系列:00 索引 · 上一篇:08 HITL · 下一篇:10 长任务
1. 行业常见问题
| 现象 | 痛点 |
|---|---|
| 单 Agent 提示词过长 | 角色混乱、工具误用 |
| if/else 散落业务代码 | 不可测试、不可视化 |
| 进程崩溃丢进度 | 长流程需恢复 |
| 无法「回到文献阶段改方向」 | 缺显式回退 |
多角色产品(调研+执行+审核)需要 分工 + 显式控制流。
2. 该技术如何解决
多 Agent:每角色独立 agent.yaml + MCP(sequence / literature / method_kb / planner / analyst / reporter)。
编排器:agent/orchestrator/graph.py 用 LangGraph 串联 Specialist 节点,不内嵌 RAG/Argo 细节。
Checkpoint:workspace/checkpoints.db 持久化 PipelineState,配合 HITL resume(见 08)。
3. 核心原理
3.1 PipelineState 存什么
1 | # agent/orchestrator/state.py |
只存 摘要 + artifact 路径,不存 FASTA/PDF 全文。
3.2 GraphConfig 编译开关
1 | # agent/orchestrator/graph.py |
3.3 节点粒度
一个 LangGraph 节点 = 一次 Specialist 入口(或 HITL 闸门),不是一个 MCP tool:
1 | node_literature → run_literature_agent() / run_literature_direct() |
--llm-agents 时走 AgentRuntime.chat + tool loop;默认 direct 模式调 MCP/函数,便于 CI 与无密钥验收。
3.4 两种流水线形态
| 模式 | 构建函数 | 边 | 用途 |
|---|---|---|---|
| 短流水线 | build_pipeline(full=False) |
method_kb → report | 三阶段调研 + 合成报告 |
| 线性 full | build_pipeline(full=True) |
… → planner → hitl_plan → analyst → reporter | 含方案与 Argo,无回环 |
| 审核循环 full | build_pipeline_loop() |
analyst → hitl_review → literature(revise)或 reporter(approve) | 执行结果不满意时人工给方向,从 literature 重跑 |
4. 典型实现与代码示例
基于 agent/orchestrator/graph.py,理解框架如何 构图 + 编译 + 调用。
4.1 线性构建图(build_pipeline)
默认 无环 DAG,适合一次性跑通、CI 验收。与循环版 并存,不互相替代。
1 | # agent/orchestrator/graph.py(节选) |
4.2 Specialist 节点:编排 vs 业务分离
1 | # agent/orchestrator/specialists.py |
编排层 只选 agent 还是 direct;RAG 细节留在 literature / mcp_rag_gene。
4.3 调用与 checkpoint
1 | # agent/orchestrator/cli.py run 命令(节选) |
流式场景用 app.stream(..., stream_mode="updates"),见 agent/orchestrator/streaming.py。
4.4 循环构建图(build_pipeline_loop)
在 保留线性 build_pipeline 不变 的前提下,单独提供带 回环 的 full 流水线:analyst 执行完后进入 hitl_review,人工审核 execution 结果;不满意则填写 revise_feedback,图从 literature 重新执行(跳过 sequence,保留已选转录本 artifact)。
1 | sequence → literature → method_kb → planner → hitl_plan → analyst |
4.4.1 循环专用 state 字段
1 | # agent/orchestrator/state.py(循环字段) |
4.4.2 构图与条件路由
1 | # agent/orchestrator/graph.py |
node_literature 读取 revise_feedback 拼入检索问题;消费后清空并设 approved=False,下一轮 planner 后需再次走 hitl_plan(见 Agent-10-08)。
node_hitl_review 使用 HITLGate.S5_EXECUTE,待办摘要为 analyst_summary,payload 为 execution_artifact_path。
4.4.3 interrupt + resume(两档人工闸门)
| 闸门 | interrupt 点 | 人工操作 | state 写入 |
|---|---|---|---|
| 计划审批 | analyst 前 |
approve plan | approved=True |
| 执行审核 | hitl_review 前 |
结果 OK / 需 revise | review_approved=True 或 revise_feedback="…" |
1 | # 启动循环流水线(伪代码,同 Agent-10-08 streaming 模式) |
4.4.4 与线性版的选型
build_pipeline(full=True) |
build_pipeline_loop() |
|
|---|---|---|
| analyst 后 | 固定 → reporter | 条件 → reporter / literature |
| 适用 | 一次性交付、自动化 CI | 科研试错、人工质控后改检索方向 |
| sequence | 每 run 一次 | 仅首轮;revise 从 literature 重入 |
4.5 工程验收
1 | # 线性 mermaid(原有) |
产物路径:workspace/runs/<run_id>/ 下各 Specialist 的 manifest / plan / report。
5. 替代方案与优缺点
| 方案 | 优点 | 缺点 |
|---|---|---|
| LangGraph + 本仓库 orchestrator | checkpoint、HITL、Specialist 解耦 | 与 LangChain 生态绑定 |
| OpenAI Agents handoff | 轻量多 Agent | 复杂回退、长流程弱 |
| CrewAI | 角色声明快 | 自定义 MCP 集成成本高 |
| 单 Agent 强 prompt | 原型最快 | 规模上限低 |
6. 自检题
- 为什么
node_literature不应直接写 BM25 逻辑? build_pipeline与build_pipeline_loop各适合什么场景?- revise 回 literature 时为什么要重置
approved=False?
7. 延伸阅读
- LangGraph 文档
- 本仓库:
agent/orchestrator/、agent/demo_multiagent.py - 上一篇:Agent-10-08 人在回路 HITL
- 下一篇:Agent-10-10 长任务与外部计算调度