В последнее время часто использую этот прием, подумал, будет интересно и вам. Смысл прост:
- Скачиваем нужные каналы и чаты (базовый экспорт JSON через Telegram Desktop).
- Поднимаем по ним поиск.
Если скачивание - это пара кликов, то поиск чуть сложнее. Но ничего такого, что не делается полностью за ночь агентом.
Ниже правила, которыми я руководствуюсь при создании своего RAG по телеге:
1. Единица смысла - тред, а не сообщение.
Искать по коротким вырванным репликам бесполезно. Reply-цепочки детерминированно склеиваются в один диалог-документ. А лонгриды, наоборот, режутся на чанки с нахлестом.
2. Один Postgres вместо зоопарка баз.
Postgres 17 + pgvector тащит всё. Лексический поиск (FTS) и семантический (по векторам) идут параллельно. Плюс опечаточный поиск. Результаты сливаются через алгоритм RRF - а потом верхушка выдачи проходит через reranker.
3. Костыль для памяти Mac. Локальная векторизация (bge-m3) быстро забивает память Apple MPS на длинных текстах и вешает машину. Вылечилось адаптивным размером батча и принудительным torch.mps.empty_cache() после каждого коммита в базу.
4. “Бесплатный” RAG. Чтобы не платить за токены при генерации ответов, пайплайн скармливает результаты поиска в claude CLI (claude -p).
Итого:
FTS ищет по словам + Vector ищет по смыслу + триграммный нечеткий поиск прощает опечатки -> RRF склеивает три выдачи -> Reranker перечитывает верхушку -> Claude делает синтез по найденным фрагментам
Как это выглядит на практике:
Запрашиваю: «Проблемы промптов в агентских флоу и как их решали?»
Скрипт находит куски в базе, отдает Клоду, и тот синтезирует выжимку: какие были жалобы (нестабильность, блуждание агента) и как решали (через флоу с уточняющими вопросами). А внизу ответа - список кликабельных t.me/ ссылок на конкретные посты, откуда он это взял.
Таким образом я определяю, например, что интересует сообщество, как решались проблемы. Перегоняю нефть в высокооктановый бензин.
——
Ставим лайки, подписываемся на канал @azalio_tech, заставляем друзей.
