Telegram AI Companion: веселый проект на Rust, Telegram и локальном ИИ

от автора

Привет, Хабр! 👋

Недавно я собрал небольшой, но бодрый 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

✅ Поддерживает тесты, обёрнут в читаемую структуру


⚙️ Как это работает

Общая схема

  1. Пользователь пишет боту в Telegram.

  2. Telegram вызывает наш вебхук (/telegram/webhook).

  3. Rust-приложение принимает сообщение, отправляет его в LocalAI.

  4. Получает ответ и отправляет его обратно пользователю.

Стек технологий

  • 🦀 Rust: язык, который не прощает ошибок, но зато учит думать

  • 🌐 Actix Web: быстрый веб-фреймворк

  • 📦 Docker + Compose: всё изолировано, удобно и воспроизводимо

  • 🧠 LocalAI: альтернатива OpenAI с поддержкой GGUF и LLaMa моделей


🚀 Быстрый запуск

  1. Клонируем репозиторий:

    git clone https://github.com/di-zed/tg-ai-companion cd tg-ai-companion
  2. Скачиваем модель (например, 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
  3. Либо можно использовать 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
  4. Запускаем (не забываем отредактировать .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-бота

  1. Откройте Telegram и найдите @BotFather

  2. Напишите команду:

    /newbot
  3. Укажите имя и уникальное имя пользователя (должно заканчиваться на bot, например: ai_companion_bot)

  4. Получите токен, который будет выглядеть так:

    123456789:AAH6kDkKvkkkT-PWTwMg6cYtHEb3vY_tS1k
  5. Сохраните его в .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, как всегда 🙂


ссылка на оригинал статьи https://habr.com/ru/articles/920482/