feat(backend): 完善 Workflow 与 DeepResearch 的运行链路与持久化能力
功能说明:\n- 重构并增强工作流网关执行链路,支持更完整的 proposal 与 run 调度参数透传\n- 增加 DeepResearch/workflow 运行事件持久化能力并补齐建表 SQL 与查询/保存接口适配\n- 优化 lead agent 与 deep research runner 的中间态处理,增强线程收集与执行链并发控制\n- 调整工作流执行器与任务路由,提升兼容性并完善错误与回放行为\n- 补充回归测试:deep_research 持久化、workflow 并发、定义加载、引擎执行、run 流程等覆盖
This commit is contained in:
1 parent
f5bf7897b9
commit
6d326a21cd
28 files changed
+836
-135
No files matched your search
@@ -55,6 +55,11 @@ The single LangGraph agent (`lead_agent`) is the runtime entry point, created vi
|
||||
- **Subagent delegation** for parallel task execution
|
||||
- **System prompt** with skills injection, memory context, and working directory guidance
|
||||
|
||||
### Workflow Studio runtime
|
||||
|
||||
- Candidate workflow graphs remain editable after they are loaded into the Coze-compatible canvas; the compatibility response explicitly marks the current owner as editable so node dragging is not mistaken for a read-only preview.
|
||||
- Workflow-agent SSE forwards provider `reasoning_content` as an inline `<think>…</think>` trace for the UI while keeping the executable node output limited to the visible answer text. Every native LangGraph `[AIMessage|ToolMessage, metadata]` frame is additionally persisted and sent as `node.message.data.messages` without projection or length cropping, so the Studio can replay DeerFlow's tool-result, search-result and `ask_clarification` cards exactly after reconnecting.
|
||||
|
||||
### Middleware Chain
|
||||
|
||||
Middlewares execute in strict order, each handling a specific concern:
|
||||
@@ -219,6 +224,21 @@ both streams `no-transform` and `X-Accel-Buffering: no`; `apps/coze-studio` also
|
||||
its Rsbuild development server `compress: false`. Agent/skill nodes use the bounded
|
||||
`workflows.agent_recursion_limit` (default `250`), rather than a chat-sized 60-step
|
||||
limit, because a model-to-tool research turn consumes about two LangGraph super-steps.
|
||||
The composer may also send a configured `modelName`: the server validates it against
|
||||
the safe model catalog, uses it for the workflow controller, and writes it into the
|
||||
generated candidate agent nodes. For a direct single-agent task it overrides only that
|
||||
projected node; confirmation still executes the immutable selected proposal snapshot.
|
||||
The controller additionally creates a per-selected-agent task contract (`mission`,
|
||||
`deliverable`, `scope`, `handoff`). The graph builder accepts contracts only for
|
||||
catalog-visible, selected agent ids and injects each one into that worker's prompt, so
|
||||
parallel branches receive complementary research assignments and sequential branches
|
||||
have an explicit review/handoff boundary rather than all workers attempting the whole
|
||||
user task. Missing controller fields receive a deterministic role-aware contract.
|
||||
When an agent emits DeerFlow's native `ask_clarification` ToolMessage, the workflow
|
||||
enters `awaiting_input` rather than completing or failing. The pause event references
|
||||
the originating `nodeRunId` and `toolCallId`; the browser renders that original card
|
||||
inside the agent message and `POST /runs/{run_id}/resume` supplies the user's reply as
|
||||
the next turn of the same agent thread.
|
||||
|
||||
The current planner is deliberately constrained: it can rank supported strategies and
|
||||
focus resources, but the server builds the graph from the already configured agent
|
||||
|
||||
Reference in new issue
Block a user