8.3 KiB
8.3 KiB
Архитектура приложения
Документ описывает модульную архитектуру backend-приложения, связи между модулями и контрактные границы.
1. Диаграмма модулей и взаимосвязей
flowchart LR
UI["Клиент / Frontend"] --> API["FastAPI (app/main.py)"]
API --> CHAT["chat модуль"]
API --> RAG["rag модуль"]
API --> AGENT_INTERNAL["internal tools API"]
CHAT -->|AgentRunner| AGENT["agent модуль"]
AGENT -->|RagRetriever| RAG
AGENT --> DB[(PostgreSQL + pgvector)]
CHAT --> DB
RAG --> DB
AGENT --> GIGA["GigaChat API"]
RAG --> GIGA
AGENT_INTERNAL --> AGENT
APP["ModularApplication\n(app/modules/application.py)"] --> CHAT
APP --> AGENT
APP --> RAG
Внутренние слои agent
flowchart TB
ROUTER["Router\n(intent + context)"] --> ORCH["Orchestrator\n(task spec + plan + execution + quality)"]
ORCH --> GRAPHS["Action Graphs\nLangGraph"]
ORCH --> METRICS["Quality Metrics\n(faithfulness/coverage)"]
METRICS --> DB[(agent_quality_metrics)]
2. Описание модулей
Модуль app/modules/chat
- Цель: принять пользовательский запрос, управлять задачей обработки, отдать результат и прогресс.
- Кратко о реализации:
ChatModuleпубликует HTTP API (/api/chat/*,/api/tasks/*,/api/events).ChatOrchestratorзапускает обработку асинхронной задачи, публикует SSE-события, обрабатывает retry и ошибки.TaskStore,DialogSessionStore,IdempotencyStoreдержат состояние задач/диалогов.
- С кем взаимодействует:
- с
agentчерез контрактAgentRunner. - с
ragдля проверкиrag_session_id. - с
shared/event_busдля стриминга прогресса. - с БД через
ChatRepository(dialog_sessions,chat_messages).
- с
- Контракты:
- потребляет
AgentRunner.run(...)изapp/modules/contracts.py.
- потребляет
Модуль app/modules/agent
- Цель: интеллектуальная обработка запроса, маршрутизация, оркестрация сценария, генерация ответа/changeset.
- Кратко о реализации:
GraphAgentRuntimeвыполняет pipeline: route -> task spec -> orchestrator -> post-processing.- Router (
engine/router/*) выбираетdomain/processи хранит routing-context. - Orchestrator (
engine/orchestrator/*) строит и валидирует plan, исполняет шаги, запускает графовые/функциональные actions. - Graphs (
engine/graphs/*) выполняют целевые действия (QA, edits, docs). - Рассчитывает quality-метрики (
faithfulness,coverage) и сохраняет их в БД. - Поддерживает внутренний инструмент получения страниц Confluence (
/internal/tools/confluence/fetch).
- С кем взаимодействует:
- с
ragчерез контрактRagRetriever. - с
shared/checkpointer(LangGraph checkpoints в PostgreSQL). - с GigaChat (LLM-запросы, промпты).
- с БД через
AgentRepository(router_context,agent_quality_metrics).
- с
- Контракты:
- реализует
AgentRunner(используетсяchat). - потребляет
RagRetriever(реализуетсяrag).
- реализует
Модуль app/modules/rag
- Цель: индексация проектных файлов и retrieval релевантного контекста.
- Кратко о реализации:
- API для snapshot/changes индексации и retrieval.
- Индексация хранит чанки, эмбеддинги и состояние job.
- Retrieval ищет релевантные куски в
rag_chunks(pgvector).
- С кем взаимодействует:
- с
agent(выдача контекста черезRagRetriever). - с БД (
rag_sessions,rag_chunks,rag_index_jobs). - с GigaChat Embeddings.
- с
- Контракты:
- реализует
RagRetrieverиRagIndexerизapp/modules/contracts.py.
- реализует
Модуль app/modules/shared
- Цель: общие инфраструктурные компоненты, переиспользуемые всеми модулями.
- Кратко о реализации:
db.py: engine/session factory.event_bus.py: pub/sub для SSE.retry_executor.py: общий retry.checkpointer.py: PostgresSaver для LangGraph.bootstrap.py: инициализация схем БД на старте.
- С кем взаимодействует:
- со всеми бизнес-модулями (
chat,agent,rag).
- со всеми бизнес-модулями (
- Контракты:
- внутренние инфраструктурные API без отдельного публичного контракта уровня
contracts.py.
- внутренние инфраструктурные API без отдельного публичного контракта уровня
Модуль app/modules/contracts.py
- Цель: зафиксировать межмодульные интерфейсы и отделить реализацию от потребителей.
- Кратко о реализации:
AgentRunner,RagRetriever,RagIndexerопределены какProtocol.
- С кем взаимодействует:
- используется
chat(как потребительAgentRunner),agent(как потребительRagRetriever),rag(как реализацияRagRetriever/RagIndexer).
- используется
- Контракты:
- это и есть контрактный слой.
Модуль композиции app/modules/application.py
- Цель: централизованный wiring зависимостей.
- Кратко о реализации:
ModularApplicationсоздаётEventBus,RetryExecutor, репозитории и модули.- На
startup()выполняет bootstrap БД.
- С кем взаимодействует:
- со всеми модулями, но не содержит бизнес-логики.
- Контракты:
- использует
contracts.pyдля сборки зависимостей без жёсткого сцепления по реализациям.
- использует
3. Ключевые контрактные границы
chat -> agent: только черезAgentRunner.agent -> rag: только черезRagRetriever.rag: не зависит отagentinternals.application.py: единственная точка связывания реализаций.
4. Схема данных (кратко)
chat:dialog_sessions,chat_messages.rag:rag_sessions,rag_chunks,rag_index_jobs.agent:router_context— контекст маршрутизации по диалогу.agent_quality_metrics— пер-сценарные quality-метрики для отчетности:faithfulness_score,coverage_score,quality_status,metrics_json,created_at.
story_records— карточка Story (статус, владелец, метаданные).story_artifacts— артефакты по Story (analytics/doc_increment/test_model и версии).story_links— внешние связи Story (тикеты, документы, URL).
5. Поток обработки запроса
- Пользователь отправляет сообщение в
chat. chatсоздаёт task и вызываетAgentRunner.run(...).agent/routerвыбирает маршрут (domain/process).agent/orchestratorстроитTaskSpecиExecutionPlan.- Выполняются шаги плана (function/actions/graph steps).
- Формируется
answerилиchangeset. - Считаются
faithfulness/coverage, сохраняются вagent_quality_metrics. chatвозвращает результат и стримит прогресс через SSE.