first commit
This commit is contained in:
@@ -0,0 +1,132 @@
|
||||
# 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`
|
||||
Reference in New Issue
Block a user