构建约 12 分钟

DeepAgent 与 harness

在 ReActAgent 外面再包一层:工具、子代理、工作空间和默认 Rail 由工厂一次装配;事件分内外两层触发。

依据 agent-core 0.1.20 · develop@fbe6a0d9(2026-11-13)核实

为什么还要一层

ReActAgent 只管"想一步、做一步"的循环。真正干活的智能体还需要很多周边设施:读写文件的工作空间、待办清单、子代理、技能、安全约束、模型异常检测……这些都是 harness(openjiuwen/harness/)提供的,DeepAgent 把它们装到一个 ReActAgent 外面。

DeepAgent(外层)
 ├─ 外层任务循环(可选):把大任务拆成多轮
 ├─ 工作空间、子代理、技能、工具
 ├─ 默认 Rail:安全、模型异常检测……
 └─ 内层 ReActAgent:每轮任务里真正"想一步、做一步"
源码DeepAgentagent-core/openjiuwen/harness/deep_agent.py:320@fbe6a0d9

一个工厂函数装配全部

from openjiuwen.harness.factory import create_deep_agent

agent = create_deep_agent(
    model,                          # 已构造好的 Model 实例
    system_prompt="你负责回答客户的交期询问。",
    tools=[check_inventory, calc_promise, create_order],
    subagents=[...],                # 子代理:可以用不同模型、工具和提示词
    rails=[PromiseGateRail(store)],  # 先排队,第一次 invoke 时注册
    workspace="./workspace",        # 文件工具的工作目录
    enable_task_loop=True,          # 开启外层任务循环
)
说明

示意代码,参数名取自 create_deep_agent 的签名;工具和 Rail 是你自己的对象。本站没有连接真实模型运行它。

源码create_deep_agentagent-core/openjiuwen/harness/factory.py:464@fbe6a0d9

几个默认值值得记住:

参数默认含义
enable_security_railTrue默认挂 SecurityRail,往提示词里加安全说明
enable_model_anomaly_detection_railTrue默认挂 ModelAnomalyDetectionRail:流式卡顿超时、重复输出重试、工具死循环时压缩
restrict_to_work_dirTrue文件访问限制在工作空间内
enable_task_loopFalse外层任务循环默认关闭
max_iterationsNone内层 ReAct 不设上限

传了 subagents 会自动加 SubagentRail,传了 skills 会自动加 SkillUseRail,enable_task_planning=True 会加 TaskPlanningRail。如果你自己已经传了同类 Rail,工厂不会重复添加。

源码默认 Rail 列表agent-core/openjiuwen/harness/factory.py:398@fbe6a0d9

事件分两层

这是 DeepAgent 最容易踩的地方。Rail 关卡里讲的 13 个事件,在 DeepAgent 上由两个对象分别触发:

集合事件回调注册到
_OUTER_ONLY_EVENTSBEFORE_INVOKE、AFTER_INVOKE外层 DeepAgent
_DEEP_EVENTSBEFORE_TASK_ITERATION、AFTER_TASK_ITERATION外层任务循环
_BRIDGE_EVENTS模型调用、工具调用、AFTER_REACT_ITERATION、输入相关事件桥接到内层 ReActAgent
源码三个事件集合agent-core/openjiuwen/harness/deep_agent.py:166@fbe6a0d9

开了任务循环以后,每轮任务先触发 BEFORE_TASK_ITERATION,再调用一次内层 react_agent.invoke(),最后触发 AFTER_TASK_ITERATION。这一轮即使失败,AFTER_TASK_ITERATION 也会补触发一次。

于是有两种"轮":任务的一轮(外层)和 ReAct 的一轮(内层)。一轮任务里可能有好几轮 ReAct。

动手:选对事件

三个任务都只让你选一个事件,看它在两轮任务里触发几次、在哪一层。

模拟器加载中…

小结

  • DeepAgent = 内层 ReActAgent + harness 周边设施,用 create_deep_agent 一次装配。
  • 默认已经挂了安全和模型异常检测两道 Rail,传子代理、技能等会自动补对应的 Rail。
  • 事件分内外两层;"任务一轮"和"ReAct 一轮"是两回事,按你要的频率选事件。

源码出处

链接指向固定提交,仓库后续更新不影响这里的行号。

过关测验

  1. 1. create_deep_agent 是同步函数,传进去的 rails 什么时候真正注册?

  2. 2. 在 DeepAgent 上注册一个覆写 before_tool_call 的 Rail,它会在哪一层触发?

  3. 3. 开了外层任务循环,某一轮任务执行失败了,AFTER_TASK_ITERATION 还会触发吗?

通关条件

  • ○ 完成模拟器任务(0/3)
  • ○ 测验全部答对