Files
LawBot/README.md
T

133 lines
3.0 KiB
Markdown
Raw Normal View History

2026-05-25 01:12:43 +03:00
# 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`