Auto-TZ - это full-stack система, которая помогает собирать структурированное ТЗ из диалога пользователя, загруженных файлов и LLM-pipeline с несколькими специализированными behavior-агентами.
Проект включает:
- фронтенд на React + Vite + Tailwind + Tiptap;
- backend API на FastAPI + Dishka + Prisma;
- асинхронные задачи в TaskIQ worker;
- инфраструктуру PostgreSQL/pgvector, Redis, RabbitMQ, SeaweedFS;
- WebSocket-уведомления о ходе генерации и экспорта.
- Frontend (
frontend) - UI чата, загрузка файлов, запуск генерации и редактирование секций. - Backend (
backend/app) - REST API, авторизация, бизнес-логика, диспатч задач в очередь. - Worker (
backend/worker) - парсинг файлов, оркестрация LLM-pipeline, экспорт документов. - PostgreSQL + pgvector - основное хранилище сущностей, GKG-фактов и секций документа.
- Redis - Pub/Sub канал для WebSocket событий и backend для результатов TaskIQ.
- RabbitMQ - брокер задач TaskIQ.
- SeaweedFS (S3-compatible) - хранение вложений, распарсенных источников и экспортов.
- Пользователь открывает чат во фронтенде.
- Загружает файлы через API
/chat/files/upload. - Backend ставит задачу
parse_file_task. - Worker парсит файл и сохраняет текстовый транскрипт в S3.
- Пользователь запускает
/tz/{chat_id}/generateили/tz/{chat_id}/update. - Backend отправляет задачу в
orchestrator_tasks. - Worker выполняет LLM-pipeline v3 (router -> behaviors -> persist -> compose).
- Статусы и финальные ответы отдаются во фронтенд через WebSocket
/chat/ws.
Пайплайн оркестрируется через LangGraph и работает по принципу fan-out/fan-in.
IntentRouter- определяет какие behavior-ветки запускать на текущем запросе.Guardian- фильтрация нецелевого/вредоносного запроса, возврат пользователя в контекст ТЗ.Harvester- извлечение фактов из чата и attachment-источников в staging-ноды.GroupingJudge- дедупликация/разрешение конфликтов, создание GKG-нод и pending conflicts.Consultant- отвечает на вопросы по текущему проекту, используя GKG и raw sources.Architect- обновляет секции документа, создает pending actions, учитывает locked/manual блоки.Compose- финальная сборка ответа в чат.
- Оркестратор:
backend/worker/modules/llm_pipeline/orchestrator. - Узлы графа:
backend/worker/modules/llm_pipeline/orchestrator/nodes.py. - Конфиг роутера:
backend/worker/modules/llm_pipeline/steps/intent_router/config.py. - Behavior-модули:
backend/worker/modules/llm_pipeline/steps/behaviors. - TaskIQ задачи:
backend/worker/tasks/orchestrator_tasks.py.
Локальная разработка:
- Python 3.12+
- Node.js 20+
- uv
- Docker + Docker Compose
Для облачного режима LLM:
- ключи провайдера для моделей, указанных в
.env.
Скопируйте шаблон и заполните значения:
cp .env.example .envКритично проверить:
DATABASE_URLREDIS_*RABBITMQ_*STORAGE_*LLM_PIPELINE_V3_*(router/harvester/grouping_judge/consultant/architect)
docker-compose.yml поднимает весь контур: infra + backend + worker + frontend.
docker compose up -d --builddocker compose exec backend uv run prisma db push --schema backend/app/infrastructure/persistent/prisma/schema.prisma- Frontend:
http://localhost:5173 - Backend API:
http://localhost:8000 - RabbitMQ UI:
http://localhost:15672 - SeaweedFS master UI:
http://localhost:9333
docker compose downНиже вариант, когда infra работает в Docker, а backend/worker/frontend запускаются локально.
docker compose up -d db redis rabbitmq seaweedfsuv sync
uv run prisma generate --schema backend/app/infrastructure/persistent/prisma/schema.prisma
uv run prisma db push --schema backend/app/infrastructure/persistent/prisma/schema.prismauv run python -m backend.app.mainuv run taskiq worker backend.worker.main:broker --fs-startupcd frontend
npm install
npm run devPOST /tz/{chat_id}/generate- Тело:
attachment_ids,template_type(опционально),comment(опционально)
POST /tz/{chat_id}/update- Тело:
new_attachment_idsи/илиcomment
POST /tz/{chat_id}/regenerate-block
POST /tz/{chat_id}/resolve-conflict
POST /tz/{chat_id}/export- Форматы:
markdown,word,pdf
Канал: GET /chat/ws
События:
GENERATION_STATUSLLM_ANSWERPARSING_STATUSEXPORT_READYERROR
На фронтенде события фильтруются по chat_id.
backend/
app/
web/ # FastAPI handlers
infrastructure/ # config, DI, storage, persistence
worker/
tasks/ # TaskIQ tasks
modules/
llm_pipeline/ # orchestrator + behaviors
parser/ # file parsing
export/ # markdown/docx/pdf export
frontend/
src/
pages/
shared/api/
shared/ws/
docs/
architecture/
economics/
В репозитории добавлены отдельные документы:
docs/architecture/llm-pipeline.puml- детальная схема LLM-pipeline.docs/architecture/system-overview.puml- общая схема проекта.docs/economics/llm-unit-economics.md- расчет юнит-экономики на 1 запрос.
Убедитесь, что worker запущен как:
uv run taskiq worker backend.worker.main:broker --fs-startupПроверьте, что DATABASE_URL для контейнеров ссылается на db:5432, а не на localhost.
Проверьте значения LLM_PIPELINE_V3_*_MODEL, *_BASE_URL, *_API_KEY и доступность внешнего провайдера.
Проверьте cookies сессии и подписку на /chat/ws, а также состояние Redis Pub/Sub.