Меня зовут Ян, я разработчик. Мне нравится участвовать в разных обсуждениях — от IT и devops до чатов друзей и собственников жилья. Все эти разговоры происходят в Telegram, и однажды я столкнулся с проблемой: утром в одном чате было 127 новых сообщений.
Проблема: потеря контекста и времени
Чтобы понять, о чём шла речь, пришлось:
- Пролистать весь чат.
- Прочитать десятки сообщений.
- Восстановить контекст в голове.
Если вы в нескольких активных чатах, ситуация знакомая. За пару часов накапливается 100–300 сообщений. И если вы пропустили обсуждение, возникают две главные проблемы:
- Потеря контекста: сложно въехать в разговор, не читая всё с начала.
- Потеря времени: даже на незначимые темы уходит много минут, чтобы понять: «А стоит ли вникать?»
Решение: AI-бот с саммари и ассистентом
Я захотел получать краткую выжимку — как RSS-ленту для чатов. Пример:
Обсуждали, чем ARM отличается от x86. Вывод: ARM подходит для большинства задач. Также говорили о скорости сборки в Xcode — на M3 стало быстрее.
Всего несколько строк — и сразу ясно, о чём был разговор.
AI-ассистент прямо в чате
Во время обсуждений часто всплывают технические вопросы:
- Чем ARM принципиально отличается от x86?
- Какая архитектура быстрее в однопоточных задачах?
- Есть ли свежие бенчмарки?
Обычно люди уходят в Google или ChatGPT. Я решил: почему бы не задать вопрос ИИ прямо в чате?
Теперь любой участник может использовать команду /ask_ai — и получить ответ от DeepSeek-V3.2 прямо в диалоге.
Техническая реализация
Использовал свой рабочий стек:
- Backend: PHP
- Framework: Symfony
- Очереди: RabbitMQ
- База данных: PostgreSQL
- AI-клиент: Ollama
Выбор модели: тестирование локальных LLM
Сначала хотел всё запускать локально, без API. Протестировал несколько моделей (~5 ГБ):
- T-Lite
- Saiga YandexGPT
- Qwen 2.5
- Llama 3
- YandexGPT-5-Lite (в GGUF-квант)
Тестировал на 300 сгенерированных сообщениях по трём темам. Оценивал:
- Качество русского языка
- Соблюдение промпта
Результаты:
- Qwen2.5-7B: иногда отвечал на китайском
- Saiga YandexGPT 8B: уходила в длинные рассуждения
- T-Lite-it-2.1: не всегда возвращала результат
- Llama 3 8B: переключалась на английский
- YandexGPT-5-Lite: лучший результат, но с редкими галлюцинациями
Архитектурное решение: «Кирпич» (Brick Context)
1 кирпич = 50 сообщений.
Как работает:
- Каждые 50 сообщений крон-задача отправляет в LLM.
- Получаем краткий контекст — «кирпич».
Пример [Кирпич #1]:
ARM против x86 — есть ли разница. Sergey_it интересуется... В итоге ARM подходит для большинства. На сколько быстрее сборка в Xcode? Andrey_ios делится, что на M3 стало быстрее...
Зачем это нужно? Чтобы избежать проблемы Lost in the Middle. Для суточного саммари из 200 сообщений используем 4 кирпича + промпт.
AI-ассистент и экономика
Для /ask_ai подключил API DeepSeek-V3.2. Стоимость одного запроса — около $0.0000084.
Для саммари использую RunPod (Pay-as-you-go):
- 50 сообщений: ~4.8 сек, $0.00019
- 100 сообщений (2 кирпича): ~30 сек
- 200 сообщений (4 кирпича): ~40 сек
Сравнение стоимости: RunPod vs GPT-4o mini
Расчёт для разных сценариев (в месяц):
- 1 чат (500 сообщений): дёшево
- 10 чатов (5 000): доступно
- 100 чатов (50 000): всё ещё экономно
- 1 000 чатов (500 000): масштабируемо
- 10 000 чатов (5 000 000): при необходимости можно перейти на GPT-4o mini
Вывод: MVP получился дешёвым и быстрым. При росте легко масштабироваться.
Самое сложное
Заставить LLM стабильно следовать промпту и не галлюцинировать. Это потребовало множества итераций и тонкой настройки.
Функции бота
- Анализирует Telegram-чаты
- Делает качественные саммари
- Хранит контекст в «кирпичах» и публикует в чат или в ЛС по подписке
- Работает как AI-агент через команду /ask_ai
- Экономит время
Бот доступен: @ContextChatAiBot
Исходный код: https://github.com/phantomas007/contextChatAiBot