Привет, Хабр! ?
Недавно я собрал небольшой, но бодрый pet-проект — Telegram AI Companion. Это Telegram-бот, который умеет болтать с вами, используя локальную языковую модель через LocalAI. Без OpenAI, без облаков — всё на своём железе.
Цель проекта — не революция в AI, а именно учебное и увлекательное погружение в Rust, асинхронность, Telegram API и локальные LLM-модели. Такой себе “бот-компаньон”, но больше для разработчика, чем пользователя :)
Если вам интересно:
Как соединить Telegram-бота с локальной LLM
Как запускать Rust-проекты в Docker
Как построить REST API и обрабатывать вебхуки
Как потрогать LocalAI без боли
— добро пожаловать!
? Что под капотом
Вот что умеет бот:
✅ Отвечает в Telegram на любые сообщения
✅ Работает с LocalAI (а при желании и с OpenAI)
✅ Запускается через Docker + Docker Compose
✅ Написан на Rust с использованием Actix Web
✅ Есть REST API (/chat) — можно прикрутить любой UI
✅ Поддерживает тесты, обёрнут в читаемую структуру
⚙️ Как это работает
Общая схема
Пользователь пишет боту в Telegram.
Telegram вызывает наш вебхук (/telegram/webhook).
Rust-приложение принимает сообщение, отправляет его в LocalAI.
Получает ответ и отправляет его обратно пользователю.
Стек технологий
? Rust: язык, который не прощает ошибок, но зато учит думать
? Actix Web: быстрый веб-фреймворк
? Docker + Compose: всё изолировано, удобно и воспроизводимо
? LocalAI: альтернатива OpenAI с поддержкой GGUF и LLaMa моделей
? Быстрый запуск
-
Клонируем репозиторий:
git clone https://github.com/di-zed/tg-ai-companion cd tg-ai-companion
-
Скачиваем модель (например, Mistral 7B) и создаем
mistral.yaml
файл:cd models/ wget https://huggingface.co/TheBloke/Mistral-7B-Instruct-v0.2-GGUF/resolve/main/mistral-7b-instruct-v0.2.Q4_K_M.gguf
name: mistral backend: llama parameters: model: mistral-7b-instruct-v0.2.Q4_K_M.gguf temperature: 0.7 top_p: 0.9 top_k: 40 n_ctx: 4096
-
Либо можно использовать OpenAI, настраивается в
.env
файле:OPEN_AI_URL=http://localai:8080 # or https://api.openai.com OPEN_AI_MODEL=mistral # or gpt-3.5-turbo / gpt-4 / etc. OPEN_AI_API_KEY=your_openai_key # required if using OpenAI
-
Запускаем (не забываем отредактировать
.env
):cp .env.sample .env cp volumes/root/.bash_history.sample volumes/root/.bash_history docker-compose up --build docker-compose exec rust bash cargo run
Теперь бот работает на localhost, а LocalAI — на localhost:8080.
? Как создать Telegram-бота
Откройте Telegram и найдите @BotFather
-
Напишите команду:
/newbot
Укажите имя и уникальное имя пользователя (должно заканчиваться на bot, например: ai_companion_bot)
-
Получите токен, который будет выглядеть так:
123456789:AAH6kDkKvkkkT-PWTwMg6cYtHEb3vY_tS1k
-
Сохраните его в
.env
в параметрTELEGRAM_BOT_TOKEN
:TELEGRAM_BOT_TOKEN=ваш_токен_сюда
Теперь ваш бот готов принимать сообщения через вебхук! ?
? Проброс Telegram вебхука через ngrok
Чтобы Telegram мог достучаться до вашего локального сервера:
ngrok http 80
А потом:
curl -X POST "https://api.telegram.org/bot<ВАШ_ТОКЕН>/setWebhook" \
-H "Content-Type: application/json" \
-d '{"url": "https://ВАШ-АДРЕС.ngrok-free.app/telegram/webhook"}'
? API-режим (без Telegram)
Вы можете использовать бот как обычный LLM API:
POST /chat
Authorization: Bearer YOUR_TOKEN
{
"prompt": "Привет, кто ты?"
}
Ответ приходит от LocalAI (или OpenAI — если включите в .env
).
? Зачем это всё?
Цель была простая:
Сделать понятный, рабочий и весёлый проект, чтобы прокачаться в Rust, потрогать локальные LLM и просто поиграться с Telegram-ботами.
Теперь можно на его основе строить что-то серьёзное — например, AI-бота с памятью, генератор текстов, консультанта и т.д.
? Планы на будущее
Добавить поддержку памяти и диалогов
Прикрутить веб-интерфейс
Поддержка нескольких языковых моделей
? Заключение
Если вы только начинаете в Rust или хотите потрогать локальные модели без всяких API-ключей — этот проект может стать отличной отправной точкой.
? Примечание: В этой статье я не стал расписывать все технические детали — чтобы сохранить лёгкость и не перегружать материал.
Если вам интересно глубже погрузиться в архитектуру проекта, структуру кода или тонкости настройки, добро пожаловать в README на GitHub — там всё подробно разложено по полочкам.
Проект открыт: GitHub — tg-ai-companion
? Полезные ссылки
? LocalAI — основной движок для LLM
? Rust Book — лучшее место для старта
☁️ ngrok — если хочется Telegram вебхуки локально
Благодарю за внимание! Если бот вам ответил весело — это моя заслуга. Если молчит — ну, это Telegram или ngrok, как всегда ?