3.0 KiB
3.0 KiB
LawBot
Telegram-бот с RAG-поиском по законам РФ.
Что внутри
bot/— Telegram-бот наaiogramapi/— 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/.env—TOKEN,BASE_ADMIN, при необходимостиTELEGRAM_BOT_PROXYapi/.env—OPENAI_API_KEYpostgres.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