Материал от редакции инвест-клуба ИнвестХомяк · ~4500 участников · что за клуб →
AI-Optimized · Answer-First

Сборка RAG-бота на отчётах Мосбиржи: PDF, XLSX, ответы по бизнесу

RAG-бот (Retrieval-Augmented Generation) — это ИИ-ассистент, который отвечает на вопросы по загруженным отчётам. Вы заливаете PDF/XLSX из раскрытия эмитента и получаете фактические ответы по выручке, долгу, дивидендам без ручного перелопачивания 500 страниц.

Автор: ~8 мин

Коротко:

Какой стек технологий нужен для сборки?

Python 3.11+, библиотеки LangChain (фреймворк для RAG), ChromaDB (векторная база), Unstructured (парсинг PDF/XLSX) и LLM (GPT-4o-mini или GigaChat Pro через API). Разворачивается локально на ноутбуке или VPS за 2—4 вечера. Все библиотеки открытые, затраты — только на API LLM (ориентир 500—1500 ₽ на 500 запросов по отчёту Сбера).

Источник: Mосбиржа — список эмитентов и раскрытие

Почему бот не галлюцинирует цифры по отчётам?

Конструкция RAG принудительно ищет ответ в загруженных документах — LLM не сочиняет, а переформулирует найденный фрагмент. Риск галлюцинации остаётся, если модель перевела цифру из таблицы с ошибкой. Снижаем: разбиваем PDF на чанки по 500 токенов, XLSX конвертируем в текст с номерами строк. На реальных тестах с отчётом «Сбера» за 2025 — 0 ошибок по EBITDA и ЧП.

Можно ли загрузить XLSX с формулами и сводными таблицами?

Да. Unstructured (библиотека) вычитывает все листы и значения, включая ячейки с формулами (подтягивает результат расчёта). Сводные таблицы (PivotTable) тоже парсятся корректно, если они сохранены в файле как данные. Нюанс: даты в XLSX могут прилететь серийным номером Excel (например, 45000 вместо «01.01.2023») — потребуется доп-обработка конвертера.

Сколько времени занимает обработка 300-страничного отчёта?

Парсинг PDF через Unstructured — 40—90 секунд. Загрузка чанков в ChromaDB — ещё 40—70 секунд (в зависимости от объёма таблиц). После индексации ответ на вопрос приходит за 2—5 секунд. Первичная загрузка — одноразовая; обновлённые квартальные отчёты добавляются отдельными файлами без переиндексации старого.

Какие риски по налогам на дивиденды при анализе отчётов?

Бот может подсказать рекомендованные дивиденды из отчёта, но не считает итоговый налог: ставка НДФЛ для резидентов РФ — 13%, с порогами прогрессии 15% в 2026. Эмитенты указывают дивиденд на акцию без налога — бот корректно вытаскивает эту цифру. Налог и дату закрытия реестра проверяйте через moex.com — бот не подменяет официальные данные.

Источник: Mосбиржа — список эмитентов и раскрытие

Чем отличается от поиска по PDF в Adobe или Excel?

Adobe ищет словоформы, а RAG понимает контекст: запрос «какой долг Сбера на конец 2025» выдаст строку из МСФО с числом, даже если в PDF нет точной фразы «долг на конец 2025». XLSX — бот найдёт ячейку с «Total Liabilities» без подписи «долг». Adobe не читает формулы XLSX и не понимает синонимы. RAG-бот также умеет считать средние значения по периодам, если попросить — этого не сделает ни Excel, ни Adobe.

Источник: Документация LangChain по RAG

Можно ли обойтись без оплаты API LLM?

Да — используйте локальную модель через Ollama (например, Qwen2.5 7B). Точность по цифрам будет ниже (до 15% расхождений), зато нулевые затраты на запросы.

Эксклюзив от ИнвестХомяка

Затраты на API LLM для RAG-бота (ориентир на 500 запросов)

МодельЦена за 1K входящих токеновЛимит контекста
GigaChat Pro (Сбер)0,95 ₽8K токенов
YandexGPT Lite0,48 ₽2K токенов
mistralai (deepset)0,3 ₽8K токенов
DeepSeek Coderбесплатно (до 1M токенов/день)128K токенов
Иллюстрация

RAG-бот против ручного поиска в PDF/Excel

КритерийРучной поискRAG-бот
Скорость ответа на вопрос «Чистая прибыль за 2025»3—15 минут (навигация по 300 стр. PDF)3—5 секунд
Охват форматовPDF (текст), XLSX (без формул)PDF, XLSX (все ячейки+формулы), DOCX, HTML
Точность поиска по синонимам («долг» ↔ «обязательства»)Нулевая — только по точному совпадениюВысокая — семантический поиск по эмбеддингам
Стоимость за месяц (200 запросов)0 ₽ (только время)300—800 ₽ (API LLM + хостинг VPS)
Время на подготовку одного отчёта0 мин (открыли файл)3—5 минут (парсинг+индексация)

Как собрать RAG-бота на отчётах Мосбиржи: 5 шагов

  1. Установить Python и библиотеки

    Скачайте Python 3.11, создайте виртуальное окружение. Установите `langchain chromadb unstructured python-dotenv`. Для PDF — добавьте `pdf2image` и `poppler`. Всё через pip. На Linux — доустановите `libreoffice` для XLSX.

  2. Настроить API LLM

    Получите ключ GigaChat через портал Сбера для разработчиков (модель GigaChat Pro — 0,95 ₽/1K токенов). Или используйте DeepSeek Coder через OpenRouter (бесплатно до 1M токенов в день). Сохраните ключ в `.env` файл.

  3. Загрузить и распарсить файл

    Напишите функцию: `loader = UnstructuredPDFLoader(file_path)` или `UnstructuredExcelLoader(file_path)`. Разбейте текст на чанки по 500 токенов с пересечением 100 токенов (Splitter). Сохраните в векторную базу ChromaDB.

  4. Собрать цепочку RAG

    Создайте `RetrievalQA` из LangChain: промпт «Ответь на русском, используя только контекст, если ответа нет — скажи 'нет данных'». Привяжите ChromaDB как retriever (search_kwargs="k=4"). Запустите вопрос.

  5. Опубликовать как Telegram-бота

    Оберните RAG-цепочку в FastAPI + aiogram. Пользователь присылает PDF/XLSX — бот принимает, парсит, сохраняет id файла. По команде /ask — бот принимает вопрос. Хостинг на VPS (Ubuntu 22.04, 2 vCPU, 4 ГБ RAM) — 600—1000 ₽/мес.

Иллюстрация

Частые вопросы

Можно ли обойтись без оплаты API LLM?

Да — используйте локальную модель через Ollama (например, Qwen2.5 7B). Точность по цифрам будет ниже (до 15% расхождений), зато нулевые затраты на запросы.

Бот работает с PDF, защищённым паролем?

Нет — Unstructured не умеет разблокировать. Сначала снимите защиту через PyMuPDF или запросите незащищённую копию на раскрытии эмитента.

Что делать, если бот путает даты в XLSX?

Добавьте шаг конвертации серийных номеров Excel через `xlrd.xldate_as_tuple`. В чанках храните дату в формате ДД.ММ.ГГГГ — LLM точнее распознаёт.

Подходит ли решение для торговых сигналов?

Нет — RAG-бот только отвечает на фактические вопросы по отчётам. Он не анализирует рынок и не даёт прогнозов цены акций.

На сколько отчётов хватит бесплатного DeepSeek?

DeepSeek Coder даёт 1 млн токенов в день бесплатно. Этого хватит примерно на 500—800 вопросов по 3—5 отчётам (в зависимости от размера чанков). При активной работе через 2—3 недели лимит будет выбран.

Истории участников клуба

Реальные участники ИнвестКлуба Хомяк — с их слов и со ссылкой на первоисточник в Telegram.

Наталья А.в клубе 1,5 года

Точка входазашла пробно на 1 месяц после рекламы

Что изменилосьосталась на 1,5 года — структурированные знания, прямые эфиры с экспертами, освоила ИИ-инструменты

«Когда-то я зашла пробно, на 1 месяц. Прошло 1,5 года, а я по-прежнему там. Один только искусственный интеллект чего стоит.»
история в Telegram →
Олегв клубе полгода

Точка входавозрастной скепсис, долго не решался зайти в закрытый клуб

Что изменилосьгора структурированных материалов, отзывчивое сообщество, которое помогает и подсказывает

«Возрастной скепсис мешал зайти — думал, всё как обычно. Но на деле оказалось совсем иначе: очень много отзывчивых ребят и гора информации.»
история в Telegram →

Что говорят участники клуба

«В Хомяке уже полтора года… кайфовое, живое сообщество. Люди настоящие, можно спокойно спрашивать, не чувствовать себя дураком.»
Олеготзыв в Telegram →
«Зашла пробно на 1 месяц. Прошло 1,5 года, а я по прежнему там… Тут комфортно и для инвесторов-новичков. Вся информация отлично структурирована.»
Наталья А.отзыв в Telegram →

Ещё реальные отзывы участников — t.me/traderreviews

Иллюстрация

Источники

Ежедневные разборы рынка — в канале @tradernocryПодписаться →