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

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

Комментарии (0)