Skip to content

About

Телеграмм-бот с RAG конвейером с sqlite-vec на базе 10000 задач из Школково. Локальная модель эмбеддингов - intfloat/multilingual-e5-base, но можно использовать платную от GigaChat.

Resources

Stars

1 star

Watchers

0 watching

Forks

Latest commit

 

History

1 Commit

Folders and files

Repository files navigation

AssistMath

Telegram-бот для репетитора по математике. Пишешь ему «5 задач на производную из №9 и 2 с параметром» — через несколько секунд приходят два PDF: условия для ученика и ответы с решениями для себя. ДЗ можно поправить прямо в чате: «замени 3-ю на посложнее», «добавь 2 на логарифмы», «без решений».

Задачи берутся из банка Школково (ЕГЭ, профиль), LLM — GigaChat.

GigaChain   LangChain   LangGraph

PDF для ученика PDF с ответами

Как устроено

flowchart LR
    msg[сообщение] --> understand[разбор запроса<br>GigaChat]
    understand --> retrieve[поиск кандидатов<br>SQLite]
    retrieve --> select[выбор задач<br>GigaChat]
    select --> build[сборка PDF<br>Tectonic]
    build --> reply[2 PDF в чат]
    build -. задача не собралась .-> retrieve
Loading
  • Парсер на Playwright собирает каталог Школково и исходный LaTeX задач в SQLite — около 9,7 тыс. задач по всем 20 номерам, с решениями и рисунками.
  • GigaChat дважды за запрос: разбирает сообщение в структуру (темы, сколько задач, номер задания) и выбирает задачи из найденных кандидатов. Текст задач модель не пишет, PDF собирается из оригинального LaTeX.
  • Поиск: сначала подбираются подходящие подтемы каталога, потом задачи внутри них — по векторам (sqlite-vec + multilingual-e5, локально) и полнотекстово (FTS5), результаты сливаются через RRF.
  • У задач разные преамбулы с собственными макросами, поэтому каждая компилируется в своей группе, иначе они конфликтуют между собой.

Стек: aiogram 3, LangGraph, langchain-gigachat, SQLite + sqlite-vec, sentence-transformers, Playwright, Jinja2 + Tectonic.

Запуск

Понадобятся uv, tectonic, Chrome (только для парсинга), токен бота и ключ GigaChat API.

uv sync
cp .env.example .env    # TELEGRAM_BOT_TOKEN и GIGACHAT_CREDENTIALS

uv run python -m assistmath.scraper all    # пару часов, можно прерывать и продолжать
uv run python -m assistmath.index build
uv run assistmath-bot

Агента можно погонять и без телеграма:

uv run python -m assistmath.llm.graph "3 задачи на логарифмические неравенства"

Пара моментов:

  • Сертификат GigaChat подписан НУЦ Минцифры, поэтому проверка TLS по умолчанию выключена (GIGACHAT_VERIFY_SSL=false). Нужна проверка — укажите файл сертификата в GIGACHAT_CA_BUNDLE.
  • Эмбеддинги локальные, так что на одно ДЗ уходит ~2 тыс. токенов GigaChat — freemium-тарифа хватает с запасом.

Разработка

uv run ruff check && uv run mypy && uv run pytest

Лицензия

MIT. Задачи и решения принадлежат Школково — в репозитории их нет, база собирается у себя парсером. Картинки выше собраны на тестовых задачах.

About

Телеграмм-бот с RAG конвейером с sqlite-vec на базе 10000 задач из Школково. Локальная модель эмбеддингов - intfloat/multilingual-e5-base, но можно использовать платную от GigaChat.

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages