133 lines
3.0 KiB
Markdown
133 lines
3.0 KiB
Markdown
# 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`
|