# 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-файлы из примеров: ```bash 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_PROXY` - `api/.env` — `OPENAI_API_KEY` - `postgres.env` — логин/пароль БД ## Запуск ```bash docker compose up -d --build ``` Проверка API: ```bash curl http://127.0.0.1:8080/health ``` ## Загрузка законов Полный прогон: ```bash docker compose exec tgbot python -m parser run ``` Запуск только для одной категории: ```bash docker compose exec tgbot python -m parser run --categories labor --limit 1 ``` Отдельные шаги: ```bash 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` перестрой индекс: ```bash curl -X POST http://127.0.0.1:8080/api/v1/index/rebuild \ -H 'Content-Type: application/json' \ -d '{"reset_collection": true}' ``` Индексация только нужного домена: ```bash 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}' ``` ## Полезные команды Проверить логи: ```bash docker compose logs -f tgbot docker compose logs -f api ``` Проверить поиск: ```bash 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 }' ``` Проверить полный ответ: ```bash 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`