Harness 架构 中级

Agent Loop:Harness 的核心循环

拆解智能体 Harness 的心脏——感知-思考-行动循环,理解终止条件、错误恢复与循环预算的设计。

最小可用循环(30 行伪代码)

messages = [system(工具清单+规则), user(任务)]
while True:
    resp = model(messages)                 # 思考
    if not resp.tool_calls:                # 没有工具调用 = 任务完成
        return resp.text
    for call in resp.tool_calls:           # 行动
        result = execute(call)             # Harness 执行工具
        messages.append(tool_result(result))  # 观察:结果喂回
    if steps > MAX_STEPS:                  # 预算兜底
        return "任务超时,已完成的进展如下…"

这个"思考 → 行动 → 观察"的循环就是所有 Harness 的心脏 —— 本站《Agents:智能体工作原理》课讲的 ReAct,正是它的提示词形态。

四个工程决策点

  • 终止条件:模型不再调用工具 / 明确输出完成标记;要防"过早收工"(提示词要求自我检查)与"无限续命"(步数预算强制截断);
  • 错误恢复:工具报错不抛异常,而是把错误信息作为观察喂回,让模型自己改参数重试 —— Harness 的第一补救手段永远是"告诉模型";
  • 步数/成本预算:MAX_STEPS、token 上限、超时,三道保险丝缺一不可;
  • 状态持久化:长任务把中间状态落盘,崩溃后可从断点恢复(LangGraph 的 checkpoint 思想)。

并行与串行

无依赖的工具调用并行执行(读三个文件);有依赖的串行(先搜索再打开结果)。好的 Harness 会让模型在一次输出中声明多个调用,由 Harness 调度并行。

📝 课后练习

quiz-1 Agent Loop 中工具执行报错时,Harness 的第一处理手段是?