bg
Рустам

Рустам

CEO & Тимлид

18 июня 2025

Telegram RAG‑бот: мы устали читать каналы и автоматизировали это


Проблема: информационная перегрузка от обилия каналов

Есть 10 каналов. Потом 50. Потом ты ставишь «прочитано» на глаз, чтобы совесть не мучила. Новости дублируются, какие‑то удаляются, важное уходит в никуда.

Я сам прошел через это. И решил: хватит. Надо что‑то, что само собирает информацию, понимает, о чём она, отвечает на вопросы и выполняет команды, типа:

  • «Что обсуждалось вчера?»
  • «Суммаризируй мне основную новостную повестку за неделю»
  • «Кто часто пишет о технологиях/стартапах/экономике?»
  • «В каких каналах всплеск негативного тона за месяц?»
  • «Покажи мне все посты о недавней презентации Apple»

Что вообще такое RAG‑поиск (и почему это не поиск по словам)

RAG = Retrieval‑Augmented Generation — подход, где ИИ не просто «фантазирует», а достаёт знания из базы данных и использует их в ответах. Это комбо: «поиск + генерация».

  1. Берём вопрос — например «что писали про нефть в мае?»
  2. Преобразуем в эмбеддинг (вектор, то есть упорядоченную последовательность чисел)
  3. Ищем семантически похожий текст в Qdrant (сравниваем один вектор с другим)
  4. GPT-генерация на основе найденного

Результат:

  • нет галлюнаций, потому что ответ базируется на реальных данных;
  • быстро и по сути;
  • понимает смысл,а не вхождения слов.

Пример из кода

    
async function getEmbedding(text) {
    const {
        data: [{ embedding }],
    } = await openai.embeddings.create({
        model: 'text-embedding-3-small',
        input: text,
        encoding_format: 'float',
    });
    return embedding;
}

/* Эта функция отправляет текст в OpenAI, чтобы получить вектор (embedding) — 
числовое представление смысла. 
Например, «Нефть подорожала» и «Цены на нефть выросли» 
будут иметь похожие вектора. */
  
    
async function findSimilarPosts(query, top_k = 20) {
    const vector = await getEmbedding(query);
    const results = await qdrant.search('tg_posts', {
        vector,
        limit: top_k,
    });
    return results.map((r) => ({
        id: r.id,
        score: r.score,
        text: r.payload.text,
    }));
}

/* Что делает эта функция:

Превращает текстовый запрос пользователя в вектор.

Находит в Qdrant посты, у которых похожее смысловое представление.

Возвращает список подходящих постов — по степени близости. \*/
  
Характеристика Keyword Search RAG-поиск
Поиск По словам По смыслу
Синонимы Не работает Работает (например, “ИТ” и “айти”)
Ошибки формулировки Критично Терпимо
Галлюцинации в ответах Нет, но и ответов особо нет Нет — GPT работает на фактах из базы
Требует точной формулировки Да Нет

Alt text

Почему это быстро и просто сделать сейчас

Ранее:

  • Эмбеддинги были либо дорогими, либо настолько глупыми, что особого смысла это не имело;
  • Векторные хранилища (Qdrant, Pinecone) были нестабильными;
  • Telegram userbot’ы работали на костылях.

Сейчас:

  • Эмбеддинги от OpenAI — реально качественные и дешёвые;
  • Qdrant/Pinecone — надёжны и просты в использовании;
  • Userbot на telegram.js/Telethon настраивается за час.

Совокупность этого позволяет собрать простое MVP за неделю — и именно так мы и сделали.


Наш пайплайн

Alt text

  1. TG Userbot получает посты и метаданные (даже если удалены - все равно видно);
  2. Эмбеддинг + векторное хранилище;
  3. API отдаёт ответы, графики, тональности.

💬 Ответы на популярные вопросы

Сколько это стоит? $10–30/мес: VPS + OpenAI API. Можно дешевле с локальными моделями.

Это легально? Да, парсятся только публичные каналы, работает через официальный Telegram userbot — никаких незаконных действий.

А если канал удалил пост? Мы фиксируем дату и ID. Видим «пост был», даже если он исчез — это важнее.

Можно ли искать по эмоциям и тону? Да — считаем сентимент, строим графики, ловим негатив/позитив по трендам.


Технологии

  • Node.js + Express
  • Qdrant или Pinecone
  • OpenAI embeddings
  • Telegram.js / Telethon userbot
  • React + Chart.js на фронте

Понравилось — пиши!

Соберём MVP за 2–3 недели. Подключим нужные каналы, адаптируем визуал. Без бюрократии, душных созвонов на 12 человек и вечного согласования.

Telegram: @madmaterials_bot

Почта: team@madmaterials.com

Рустам

Рустам

CEO & Тимлид