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 的第一处理手段是?