Семантический поиск по Telegram: мой second brain из чатов
Вася три месяца назад скинул решение бага с async — помню точно. В каком из 47 чатов — уже нет.
Пробовал Ctrl+F: “async”, “await”, “баг”. Telegram выдал 200+ совпадений. Половина — про что угодно, только не то. Стандартный поиск ищет слова. Мне нужен смысл.
Идея
Что если искать не по словам, а по смыслу? “Деплой”, “выкатить на прод”, “залить на сервер” — для меня одно и то же. Для Ctrl+F — три разных запроса.
Написал агенту:
Агент объяснил: нужны эмбеддинги. Текст превращается в вектор — набор чисел. Похожие по смыслу тексты оказываются рядом в этом пространстве. Математика, не магия.
Первая попытка
За час агент собрал рабочую версию. Скачивание сообщений, генерация эмбеддингов, поиск по похожести.
Запустил синхронизацию на ночь. 50 чатов, 60 дней истории.
В 2 ночи проснулся от уведомления. Telegram выдал FloodWait на 2 часа — API заблокировано за слишком частые запросы. Скрипт качал без пауз.
Исправление
Перезапустил. За ночь синхронизировал всё — ни одного бана.
Ещё одна ошибка
Поиск работал странно. Выдавал не самые похожие результаты.
Оказалось, агент использовал стандартный SQL синтаксис, а sqlite-vec требует особый. Указал явно в промпте — исправил за минуту.
Результат
Теперь пишу запрос в терминале — нахожу именно то сообщение от Васи. Секунда вместо 15 минут скроллинга.
Запросы, которые работают:
- “что обсуждали про деплой”
- “рекомендация книги от Пети”
- “тот скрипт для парсинга”
15 тысяч сообщений, эмбеддинги сгенерировались за 10 минут. $0.02 — text-embedding-3-small дешёвый.
Что понял про процесс
Первая версия будет сломана. Telegram API, sqlite-vec синтаксис — агент не знает всех особенностей. Но он быстро чинит, когда объясняешь что не так.
Конкретные ошибки → конкретные фиксы. “Telegram забанил за спам” полезнее чем “добавь rate limiting”. Агент понимает контекст.
Простой стек побеждает. sqlite-vec — один файл, нет сервера. Бэкап = копирование файла. Pinecone красивый, но зачем для 15k сообщений?
Если хочешь попробовать
Начни с малого. Один чат, 100 сообщений. Убедись что поиск работает. Потом масштабируй.
Модель универсальная — тот же подход работает для Slack, Discord, Email, заметок в Obsidian. Источник данных меняется, принцип тот же: скачал → эмбеддинги → поиск.
Источники
- telegram-search — похожий проект с 3.7k звёзд
- sqlite-vec — векторное расширение для SQLite
Подписаться на обновления — @sereja_tech