docs: актуализация README, закрытие Спринта 2.5
README переписан под текущее состояние — был TBD со времён init: - Статус: Спринты 1–2 и доработки (2.5) закрыты, что именно уже работает (RAG, многошаговый диалог, переиндексация, две страницы). - Запуск: команды для установки, старта, ручного наката миграций и создания новых. Автомиграции на старте отмечены. - Использование: табличка API-эндпоинтов (/documents, /query, /chat, /threads, /reindex), описание двух веб-страниц и правки системного промпта через prompts/system_prompt.md. - Структура: актуальное дерево директорий с назначением каждого модуля (db/, prompts/, routers/, services/, static/). SPRINTS.md: Спринт 2.5 помечен закрытым — все пять задач пройдены (логи, системный промпт в файле, markdown-рендер, чистка чанков + reindex, README). Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -8,7 +8,16 @@
|
||||
|
||||
## Статус
|
||||
|
||||
🟡 **Active — MVP, проектирование.**
|
||||
🟢 **Active — Спринты 1–2 и доработки (2.5) закрыты, идём на Спринт 3.**
|
||||
|
||||
Что уже работает:
|
||||
- RAG-ядро: FastAPI + ChromaDB + `intfloat/multilingual-e5-large` + DeepSeek.
|
||||
- Загрузка документов (`.md`, `.txt`, `.pdf`, `.docx`), чанкинг с чисткой markdown-мусора (навигационные блоки, инлайн-ссылки), просмотр чанков с эмбеддингами.
|
||||
- Многошаговый диалог с памятью треда (SQLAlchemy 2.0 async + Alembic + SQLite). История хранится навсегда.
|
||||
- Переиндексация без повторной загрузки файла: сохранённый `raw_text` → новый чанкер.
|
||||
- Две отладочные страницы: «Отладка» (одиночный вопрос, база знаний) и «Песочница» (чат с агентом, список тредов, переименование, удаление).
|
||||
- Markdown-рендер ответов ассистента в «Песочнице».
|
||||
- Системный промпт вынесен в `prompts/system_prompt.md` — правится без кода.
|
||||
|
||||
---
|
||||
|
||||
@@ -84,7 +93,116 @@
|
||||
|
||||
## Запуск
|
||||
|
||||
TBD — будет заполнено в Спринте 1.
|
||||
### Требования
|
||||
- Python 3.12
|
||||
- Ключ DeepSeek API
|
||||
|
||||
### Установка
|
||||
|
||||
```bash
|
||||
python3.12 -m venv .venv
|
||||
source .venv/bin/activate
|
||||
pip install -r requirements.txt
|
||||
cp .env.example .env # и вписать DEEPSEEK_API_KEY
|
||||
```
|
||||
|
||||
### Старт
|
||||
|
||||
```bash
|
||||
.venv/bin/python -m uvicorn main:app --host 0.0.0.0 --port 8003
|
||||
```
|
||||
|
||||
Миграции Alembic применяются автоматически на старте. Первая загрузка
|
||||
embedding-модели E5-large занимает ~15–20 секунд.
|
||||
|
||||
### Вручную накатить миграции
|
||||
|
||||
```bash
|
||||
.venv/bin/alembic upgrade head
|
||||
```
|
||||
|
||||
### Создать новую миграцию после изменения моделей
|
||||
|
||||
```bash
|
||||
.venv/bin/alembic revision --autogenerate -m "описание изменений"
|
||||
.venv/bin/alembic upgrade head
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Использование
|
||||
|
||||
### Веб-страницы
|
||||
|
||||
- `http://localhost:8003/` — **Отладка**: загрузка документов, просмотр чанков со scores и эмбеддингами, одиночный тест-вопрос с 3-колоночным ответом (чанки / промпт / ответ LLM).
|
||||
- `http://localhost:8003/sandbox.html` — **Песочница**: чат с агентом. Слева список сохранённых диалогов, в центре сам чат, справа отладка последнего ответа (найденные чанки + собранный промпт).
|
||||
|
||||
### API
|
||||
|
||||
| Метод | Путь | Назначение |
|
||||
|-------|------|-----------|
|
||||
| GET | `/health` | Статус, кол-во документов и чанков, модель эмбеддингов |
|
||||
| POST | `/documents/upload` | Загрузить файл (`.md`, `.txt`, `.pdf`, `.docx`), сохраняет `raw_text` в SQLite и чанки в Chroma |
|
||||
| GET | `/documents` | Список документов |
|
||||
| GET | `/documents/{id}/chunks` | Чанки документа + их эмбеддинги |
|
||||
| DELETE | `/documents/{id}` | Удалить документ (из Chroma и SQLite) |
|
||||
| POST | `/documents/{id}/reindex` | Переразметить документ с актуальными правилами чанкера |
|
||||
| POST | `/documents/reindex-all` | Переразметить всю базу |
|
||||
| POST | `/query` | Одиночный вопрос (Отладка) |
|
||||
| POST | `/chat` | Отправить реплику в тред (создаёт тред, если `thread_id` не передан) |
|
||||
| GET | `/threads` | Список всех диалогов |
|
||||
| GET | `/threads/{id}` | Тред целиком с историей |
|
||||
| PATCH | `/threads/{id}` | Переименовать |
|
||||
| DELETE | `/threads/{id}` | Удалить тред со всеми сообщениями |
|
||||
|
||||
### Правка системного промпта
|
||||
|
||||
`prompts/system_prompt.md` — читается при старте сервиса. После правки — рестарт.
|
||||
|
||||
---
|
||||
|
||||
## Структура
|
||||
|
||||
```
|
||||
.
|
||||
├── config.py # настройки (Pydantic BaseSettings)
|
||||
├── main.py # FastAPI app, lifespan, авто-миграции
|
||||
├── alembic.ini # конфиг Alembic
|
||||
├── migrations/ # миграции БД
|
||||
├── prompts/
|
||||
│ └── system_prompt.md # системный промпт (правится без кода)
|
||||
├── db/
|
||||
│ ├── base.py # DeclarativeBase
|
||||
│ ├── session.py # async engine + sessionmaker
|
||||
│ └── models/
|
||||
│ ├── thread.py # диалоги
|
||||
│ ├── message.py # сообщения
|
||||
│ └── document.py # raw_text документов для reindex
|
||||
├── models/ # Pydantic-модели API
|
||||
│ ├── requests.py
|
||||
│ └── responses.py
|
||||
├── routers/
|
||||
│ ├── health.py
|
||||
│ ├── documents.py # upload / list / chunks / delete / reindex
|
||||
│ ├── query.py # /query (одиночный вопрос)
|
||||
│ ├── chat.py # /chat (диалог с памятью)
|
||||
│ └── threads.py # CRUD тредов
|
||||
├── services/
|
||||
│ ├── embeddings.py # E5-large
|
||||
│ ├── vectorstore.py # ChromaDB
|
||||
│ ├── document_processor.py # парсер + чанкер
|
||||
│ ├── text_cleanup.py # чистка markdown-мусора
|
||||
│ ├── document_service.py # SQLite-слой для raw_text
|
||||
│ ├── llm_client.py # DeepSeek
|
||||
│ ├── rag_pipeline.py # /query pipeline
|
||||
│ └── chat_service.py # диалоги: создание треда, сборка контекста
|
||||
├── static/
|
||||
│ ├── index.html # страница «Отладка»
|
||||
│ └── sandbox.html # страница «Песочница»
|
||||
└── data/
|
||||
├── chroma/ # векторная БД (gitignored)
|
||||
└── sqlite/ # реляционная БД (gitignored)
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
|
||||
+1
-1
@@ -92,7 +92,7 @@
|
||||
### Цель
|
||||
Закрыть технический долг, накопленный за первые два спринта: почистить чанки от markdown-мусора, сделать ответ агента читаемым в UI, подготовить системный промпт к вынесению в редактор (Спринт 3) и навести порядок в логах и README.
|
||||
|
||||
### Статус: ⏳ Запланирован
|
||||
### Статус: ✅ Закрыт
|
||||
|
||||
### Задачи
|
||||
|
||||
|
||||
Reference in New Issue
Block a user