AR 15 M4 e534a74460 feat(sprint2.5): чистка чанков и переиндексация
Чанкер тащил в базу markdown-мусор: навигационные блоки «Вернуться на:»
со списками ссылок, инлайн-ссылки [текст](url) в теле, служебные
пометки _Источник: .../file.md_, лишние пустые строки. Всё это ело
контекст LLM и засоряло правую панель отладки.

- services/text_cleanup: clean_markdown_text — удаляет навигационные
  строки, строки-только-ссылки (обычно это меню), служебные _Источник:_,
  раскрывает инлайн-ссылки [x](url) → x, сжимает 3+ переносов до 2.
- services/document_processor: process_document теперь возвращает
  (id, raw_text, sections, chunks); чистку применяем к заголовкам и
  телам секций; чанки короче 20 символов выбрасываем с пересчётом
  индексов. Вспомогательная rechunk_raw_text — для переиндексации.

Чтобы переиндексировать без повторной загрузки файла, нужен исходный
текст. Вводим отдельный слой:
- новая таблица SQLite documents (id, name, file_type, raw_text,
  created_at, updated_at) + миграция Alembic 7ee7296ccd6d.
- db/models/Document + регистрация в db.models.__init__.
- services/document_service: save/get/list/delete для raw_text.
- routers/documents.upload: сохраняет raw_text в SQLite перед
  индексацией в Chroma; delete убирает и из SQLite, и из Chroma.
- Новые эндпоинты POST /documents/{id}/reindex и
  POST /documents/reindex-all — берут raw_text из SQLite, пропускают
  через rechunk_raw_text, заменяют чанки в Chroma.

Существующие 4 документа были перезалиты вручную (решение: не делать
одноразовый backfill, проще залить заново). Старая Chroma очищена,
новые чанки прошли через чистку — мусор ушёл.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-23 11:15:08 +05:00

Chat Agent for Patients (RAG) — инструмент настройки

RAG-ядро + веб-инструмент для настройки пациентского чат-агента: загрузка wiki, редактирование промпта и правил, прогон сценариев.

Подключение реальных каналов (чат в мобильном приложении, бот в МАКС) делает другой разработчик — этот проект отдаёт ему готовое RAG-ядро и API плюс согласованную конфигурацию (системный промпт, правила, снапшот базы знаний).


Статус

🟡 Active — MVP, проектирование.


Цель проекта

  • Поднять RAG по wiki операторов и API диалога с агентом.
  • Дать операторам веб-инструмент, в котором они в процессе настройки:
    • загружают документы wiki (постепенно, по мере готовности — не пакетно);
    • редактируют системный промпт и правила поведения агента;
    • играют роль пациента в тестовом чате и смотрят, что отвечает агент;
    • сохраняют проработанные диалоги как сценарии и перегоняют их после изменения настроек.
  • Сама интеграция с реальными каналами (приложение, МАКС) — вне скоупа этого проекта.

Что не входит в скоуп

  • Реальная интеграция с чатом в мобильном приложении (work-pcs-pt-mobile).
  • Реальная интеграция с ботом в МАКС (work-pcs-pt-bots).
  • Очередь и UI оператора для живого переключения с агента на человека.
  • Мультипользовательская прод-эксплуатация.

Всё это — задача смежного разработчика, который будет использовать API этого сервиса.


Архитектура (черновик)

┌──────────────────────────────────┐      ┌──────────────────────┐
│  Web UI настройки (один экран)   │      │                      │
│  ┌────────────┐  ┌────────────┐  │      │   RAG (wiki)         │
│  │ База знаний│  │ Промпт +   │──┼─────▶│   ChromaDB + E5      │
│  │ (upload)   │  │ правила    │  │      └──────────────────────┘
│  └────────────┘  └────────────┘  │      ┌──────────────────────┐
│  ┌────────────┐  ┌────────────┐  │─────▶│   DeepSeek LLM API   │
│  │ Песочница  │  │ Сценарии   │  │      └──────────────────────┘
│  │ (чат)      │  │ (сохран.)  │  │
│  └────────────┘  └────────────┘  │
└──────────────────────────────────┘
              │
              ▼
       Chat Agent API (FastAPI)
       (тот же API, что потом получит
        внешний разработчик для каналов)

Ключевая идея: веб-инструмент — это единственный клиент агента на время настройки. Когда конфигурация «устаканивается», её снапшот отдаётся внешнему разработчику вместе с документированным API.


Технологический стек (предварительно)

Слой Технология Назначение
API FastAPI (Python 3.113.12) HTTP-эндпоинты агента и настройки
Vector DB ChromaDB База эмбеддингов wiki
Embeddings intfloat/multilingual-e5-large Русскоязычные эмбеддинги
LLM DeepSeek API Диалоговая модель
Хранилище конфигов и сценариев SQLite Промпты, правила, сценарии
Веб-UI Vanilla JS / лёгкий фреймворк Одностраничное приложение настройки
Контейнеризация Docker Изолированный запуск

База опыта — work-pcs-dr-cdss (RAG-сервис для врачей). Переиспользуем паттерн сервисов embeddings.py / vectorstore.py / document_processor.py / llm_client.py.


План (спринты)

См. SPRINTS.md.


Запуск

TBD — будет заполнено в Спринте 1.


Связанные проекты

  • work-pcs-dr-cdss — RAG для врачей, источник технических паттернов.
  • work-pcs-pt-mobile — мобильное приложение пациента (канал подключит другой разработчик).
  • work-pcs-pt-bots — пациентские боты МАКС (канал подключит другой разработчик).
S
Description
No description provided
Readme 722 KiB
Languages
Python 59%
HTML 40.8%
Mako 0.1%