Files
agent/_process/05. MVP - process_v1.md
T

5.2 KiB
Raw Blame History

MVP: процесс v1

1. Общее описание

Запрос пользователя обрабатывается цепочкой API → рантайм агента → зарегистрированный процесс версии v1 → один workflow из трёх последовательных шагов. Процесс не обращается к RAG и не маршрутизирует интенты: текст сообщения передаётся в LLM по фиксированному промпту. Ответ агента — результат генерации с лёгкой постобработкой (trim).

flowchart LR
  subgraph api [API]
    RS[RequestService]
  end
  subgraph runtime [Agent runtime]
    AR[AgentRuntime]
    PR[ProcessRunner]
  end
  subgraph v1 [Процесс v1]
    P1[V1Process]
    WG[V1FlowMainGraph]
  end
  subgraph wf [Workflow v1.flow_main]
    S1[PrepareUserMessageStep]
    S2[GenerateAnswerStep]
    S3[FinalizeAnswerStep]
  end
  LLM[AgentLlmService]
  RS --> AR
  AR --> PR
  PR --> P1
  P1 --> WG
  WG --> S1 --> S2 --> S3
  S2 --> LLM

Клиент создаёт запрос с process_version: v1. AgentRuntime поднимает RuntimeExecutionContext (запрос, сессия, publisher, trace), выбирает V1Process из реестра и вызывает run. V1Process собирает V1FlowContext и прогоняет линейный граф: подготовка текста, один вызов LLM, финализация строки ответа. Итог попадает в ProcessResult.answer и дальше в ответ пользователю.


2. Шаги и контракты

2.1. Вход в процесс: V1Process.run

Название Запуск процесса v1
Задача Собрать контекст workflow и выполнить граф до готового ответа.
Вход RuntimeExecutionContext: request (в т.ч. message), session, publisher, trace.
Выход ProcessResult с полем answer: str.
Как работает Создаётся V1FlowContext с prompt_name по умолчанию v1_flow_main.answer. Вызывается V1FlowMainGraph.run. Возвращается ответ из контекста workflow.

Код: src/app/core/agent/processes/v1/process.py.


2.2. Шаг workflow: PrepareUserMessageStep

Название Подготовка сообщения пользователя
Задача Сформировать строку, которая уйдёт в LLM как пользовательский ввод.
Вход V1FlowContext с заполненным runtime и prompt_name.
Выход Тот же контекст с prepared_message: str.
Как работает Берётся context.runtime.request.message и обрезаются пробелы по краям (strip). Результат пишется в prepared_message. Других преобразований нет.

Код: src/app/core/agent/processes/v1/workflow/flow_main/steps/prepare_user_message_step.py.


2.3. Шаг workflow: GenerateAnswerStep

Название Вызов LLM
Задача Сгенерировать ответ по выбранному промпту и подготовленному сообщению.
Вход V1FlowContext с prepared_message, prompt_name, runtime.trace для модуля LLM.
Выход Контекст с answer: str (сырой ответ модели).
Как работает Асинхронно в пуле потоков вызывается AgentLlmService.generate(prompt_name, prepared_message, ...). В trace подключается модуль workflow.v1.llm. Идентификатор запроса передаётся в log_context для логов.

Код: src/app/core/agent/processes/v1/workflow/flow_main/steps/generate_answer_step.py.


2.4. Шаг workflow: FinalizeAnswerStep

Название Финализация ответа
Задача Нормализовать строку ответа перед выдачей пользователю.
Вход V1FlowContext с заполненным answer после LLM.
Выход Контекст с обновлённым answer.
Как работает К ответу применяется strip() по краям. Другой логики нет.

Код: src/app/core/agent/processes/v1/workflow/flow_main/steps/finalize_answer_step.py.


2.5. Транспорт: WorkflowGraph (v1)

Граф для v1 использует стандартный WorkflowGraph: на каждом шаге пишутся события workflow_started, step_started, step_completed, workflow_completed в runtime_traces через context.runtime.trace.

Код: src/app/core/agent/utils/workflow/graph.py, обёртка V1FlowMainGraph в src/app/core/agent/processes/v1/workflow/flow_main/graph.py.