Files
LawBot/README.md
T
2026-05-25 01:12:43 +03:00

3.0 KiB

LawBot

Telegram-бот с RAG-поиском по законам РФ.

Что внутри

  • bot/ — Telegram-бот на aiogram
  • api/ — FastAPI-сервис для retrieval и генерации ответа
  • parser/ — CLI-парсер и загрузка законов
  • shared/ — общий слой БД и модели
  • compose.yml — запуск всего стека через Docker Compose

Стек

  • Telegram Bot API
  • FastAPI
  • PostgreSQL
  • Redis
  • ChromaDB
  • OpenRouter
  • локальная embedding-модель на CPU

Подготовка

Создай рабочие env-файлы из примеров:

cp bot/.env.example bot/.env
cp api/.env.example api/.env
cp postgres.env.example postgres.env

Заполни:

  • bot/.envTOKEN, BASE_ADMIN, при необходимости TELEGRAM_BOT_PROXY
  • api/.envOPENAI_API_KEY
  • postgres.env — логин/пароль БД

Запуск

docker compose up -d --build

Проверка API:

curl http://127.0.0.1:8080/health

Загрузка законов

Полный прогон:

docker compose exec tgbot python -m parser run

Запуск только для одной категории:

docker compose exec tgbot python -m parser run --categories labor --limit 1

Отдельные шаги:

docker compose exec tgbot python -m parser discover
docker compose exec tgbot python -m parser fetch
docker compose exec tgbot python -m parser normalize
docker compose exec tgbot python -m parser ingest

Индексация Chroma

После нового parser ingest перестрой индекс:

curl -X POST http://127.0.0.1:8080/api/v1/index/rebuild \
  -H 'Content-Type: application/json' \
  -d '{"reset_collection": true}'

Индексация только нужного домена:

curl -X POST http://127.0.0.1:8080/api/v1/index/rebuild \
  -H 'Content-Type: application/json' \
  -d '{"law_types":["criminal"],"reset_collection":false}'

Полезные команды

Проверить логи:

docker compose logs -f tgbot
docker compose logs -f api

Проверить поиск:

curl -X POST http://127.0.0.1:8080/api/v1/rag/search \
  -H 'Content-Type: application/json' \
  -d '{
    "question":"Работодатель задержал зарплату. Что делать?",
    "category":"Работа",
    "region":"Москва",
    "top_k":3
  }'

Проверить полный ответ:

curl -X POST http://127.0.0.1:8080/api/v1/rag/answer \
  -H 'Content-Type: application/json' \
  -d '{
    "question":"Работодатель задержал зарплату. Что делать?",
    "category":"Работа",
    "region":"Москва",
    "top_k":3
  }'

Данные

  • PostgreSQL: ./volumes/postgres
  • ChromaDB: ./volumes/chroma
  • Hugging Face cache: ./volumes/huggingface
  • Parser artifacts: ./volumes/parser