Дайджесты чатов с субагентами и дешёвыми моделями
Делаю дайджесты для чата @vibecod3rs — около 1000 сообщений за 2-3 дня нужно свернуть в 4000 символов. Раньше Gemini Pro галлюцинировал детали. Сейчас работает MapReduce через Haiku-субагенты, стоит копейки и почти не врёт.
Проблема: галлюцинации из-за потери контекста
Первый дайджест я делал через один запрос в Gemini Pro. Модель схватила общую тему, но придумала детали.
Самая показательная галлюцинация — “стрим про Claude Code скиллы”. В чате был YouTube-линк с текстом “Начинаю [ссылка]”. Gemini решил, что это про скиллы. На самом деле тема стрима была в сообщении-анонсе, на которое “Начинаю” отвечал. Контекст потерялся.
Классическая проблема Lost in the Middle — модель видит начало и конец промпта, середина размывается.
Решение: MapReduce через субагенты
Этот паттерн я уже использовал для генерации метаданных YouTube — там тоже нужно было обработать большой транскрипт без потери деталей. Для дайджестов логика та же.
Разделил процесс на четыре этапа.
954 сообщения
│
▼
┌─────────────┐
│ PREPARE │ Загрузка + enrichment (engagement scores)
└─────────────┘
│
▼
┌─────────────┐
│ MAP×7 │ 7 Haiku агентов параллельно
│ (Haiku) │ Каждый извлекает тему из кластера ~15 сообщений
└─────────────┘ + reply_to контекст для URL
│
▼
┌─────────────┐
│ REDUCE │ Sonnet собирает дайджест
│ (Sonnet) │ из 7 тем в 4000 символов
└─────────────┘
│
▼
┌─────────────┐
│ VERIFY │ Haiku проверяет факты
│ (Haiku) │ против исходных сообщений
└─────────────┘
Этап 1: Препроцессинг (enrichment)
Загружаю сообщения за три дня через Messages API. Добавляю метрики вовлечённости.
Engagement score: direct_replies × 2.0 + thread_size × 0.5
Пример: сообщение про Nanobot получило 5 прямых ответов, тред из 8 сообщений. Score: 14.0.
Беру топ-100 с score ≥ 2.0. Плюс reply_to контекст — если сообщение ответ на другое, включаю текст родителя.
Этап 2: MAP — параллельные субагенты (Haiku)
7 кластеров по ~15 сообщений. Каждый Haiku извлекает одну тему.
Использую Claude Haiku 3 ($0.25/1M input, $1.25/1M output) — в 6 раз дешевле Sonnet. За 7 запросов по 2000 токенов выходит около $0.004.
Этап 3: REDUCE — сборка дайджеста (Sonnet)
Sonnet собирает 7 тем в финальный дайджест по шаблону. Вот пример результата:
**VibeCoder Digest: 2-4 февраля**
За три дня разработчики обсуждали минималистичные AI-ассистенты,
инструменты дизайна и переход с no-code на Claude-автоматизацию.
**954 сообщений**
**🔥 Главные темы**
**1. Nanobot — 4000 строк против 400k**
Chelpindron и 👽 обсуждали легковесный AI-ассистент от исследователей
Гонконгского университета. На 99% меньше кода чем Clawdbot, работает
через Telegram и WhatsApp. [→](https://t.me/c/...)
**2. OpenClaw заменил n8n**
Eduard рассказал, как выпилил n8n и переехал на Claude-автоматизацию.
Парсер/скрапер за 3 минуты. [→](https://t.me/c/...)
Этап 4: VERIFY — проверка фактов (Haiku)
Haiku сверяет дайджест с исходными сообщениями. Результат для 2-4 февраля: 13 фактов подтверждены, 4 без источника, 1 галлюцинация поймана.
Галлюцинация: “OpenAI выпустил 6-й релиз Codex”. В исходнике была ирония — “в 6й раз 😂”. LLM прочитал как факт.
Про reply_to контекст
Telegram API возвращает reply_to_message_id. Добавляю текст родителя в данные для LLM.
{
"sender": "Сережа Рис",
"text": "Начинаю https://youtube.com/live/...",
"reply_to": {
"sender": "Сережа Рис",
"text": "Сегодня в 19:00 — стрим про OpenClaw",
"message_id": 39120
}
}
Без reply_to: “Начинаю [URL]” → LLM додумывает тему. С reply_to: видит анонс → понимает что стрим про OpenClaw.
По-моему, это главное отличие от обычного RAG. Не просто семантический поиск, а структурные связи между сообщениями.
Почему субагенты
MapReduce — один из 12 паттернов AI-пайплайнов, которые я разбирал раньше. Anthropic писали про multi-agent для исследований. Та же логика для дайджестов:
- Фокус: каждый агент на ~15 сообщений
- Цена: Haiku в 6 раз дешевле Sonnet
- Параллельность: 7 запросов одновременно
- Верификация: финальный агент ловит ошибки
Выводы
Субагенты решают Lost in the Middle. Haiku для анализа, Sonnet для сборки.
Reply_to контекст критичен — URL без описания иначе превращаются в галлюцинации.
Итого: ~$0.03 за дайджест, галлюцинации редки.
Код: tg-digest-opus
Подписаться на обновления — @sereja_tech