Agent 工程实践 / 01 · 共 12 篇

Agent 工程实践

Agent 运行循环:工具反馈如何改变下一步

运行时设计 / 工具调用与反馈循环

模型提出下一步,Harness(运行程序)执行工具、保存反馈并组织下一轮输入。一次查询如何继续,取决于这些状态如何接上。

连续行动依赖决策与执行之间的循环。调用请求、工具执行和模型收到结果,分别对应不同的完成状态。

查看交互演示 ↓

机制分析

三种角色,分别改变什么?

天气案例里,用户给出任务,规则要求先查询再建议。模型先读取这组输入,生成一个天气工具调用:调用哪个工具、带什么参数。Harness 接收请求,找到工具实现并执行;天气服务再返回实际结果。工具请求、工具执行和模型答复因此是三类不同事件。

Harness 保存原任务与新增反馈,组织下一轮输入。模型这次读到“下雨18°C”,才有依据生成带伞建议。答复生成后,仍要由程序交付给用户。装置里的消息册、输入复制台和答复打印机,分别对应这些状态,不能用一个“完成”标记替代。

边界需要核对的事实
模型 → Harness输出是工具请求还是最终答复,参数是否完整
Harness → 工具执行是否实际发生,返回的是结果还是错误
历史 → 本轮输入原任务与新增反馈是否进入这次调用
生成 → 交付模型已有答复,用户是否真正收到

反馈变化,下一步也应该有变化

保留同一个带伞任务,只替换天气反馈,能看出反馈在循环中的作用。下雨时给带伞建议,晴天时可以给不同建议;主服务超时,则没有正常天气证据,案例转向备用查询。备用工具也是一次新的动作,不能把“准备重试”写成“已经查到”。

本例的分支是预设策略,但它揭示了一个可检查的关系:后续行为应该依赖实际收到的反馈。若服务超时后仍生成确定的天气结论,应先查看输入和执行记录,而不能仅凭答复流畅就认定任务成功。

工程取舍

哪些事交给模型,哪些事由程序约束?

失败后重试,还是重新决策?

对短暂网络故障,程序可以按规则重试,省下一次模型调用;对参数错误、证据矛盾或需要改变工具的情形,再让模型参与判断更有价值。重试应有次数、超时和成本上限。对于会产生外部副作用的工具,还要确认重复执行是否安全,不能直接照搬天气查询的处理方式。

循环何时结束?

模型输出最终答复,可以作为一个结束信号,但真实任务往往还需要独立条件:工具是否完成、必要证据是否齐全、是否触发了人工确认。程序也需要预算或步数上限,防止工具失败与模型重试相互推动,形成一直运行却没有进展的循环。

保存全部历史,还是选择性整理?

完整保留便于追溯,却会增加输入体积,重复噪声也可能掩盖当前状态。可以把完整执行档案留在外部,为模型选择当前任务、有效约束、近期结果与可回查来源。整理改变了模型本轮看到什么,因此必须保留关键失败证据,不能把错误摘要成一个没有依据的“已解决”。

落到实现

排查失败时,沿着边界找证据

遇到“工具查过了,答复却不对”,可以依次检查:模型提出了什么请求、程序实际执行了什么、返回值保存在哪里、下一轮到底发送了什么,以及最终交付了哪份答复。这比把全部问题归结为“模型没理解”更容易找到可修改的位置。

这里展示离线预设回放,不调用真实天气服务或语言模型,也不展示内部思维链。它说明一种常见运行循环;真实宿主可以自行完成重试、验证、压缩和调度,不必把每一步都交给模型决定。

能提出动作、能执行动作、能看见结果、能据此继续,是一条需要逐段接通的链。Agent 的可靠性,就藏在这些衔接处。

交互演示 · Agent 天气任务回放

比较晴天、下雨与服务超时,观察下一步如何变化
模型 · 选择下一步Harness(运行程序)· 执行、保存、组织输入、交付环境 · 返回实际结果
00:00 / --:--

待机 · 双风扇、散热百叶与电源灯;任务等待操作

讲解

点击开始讲解,或把任务卡拖到亮起的模型读取口。

查看全部组件与分工
展开核对:完整输入、消息册与工具原始结果

模型本轮完整输入构成

Harness 保存的消息册

外部天气服务

实际返回数据
进一步看:每轮输入与循环代码

模型调用的输入快照

规则与工具定义同时提供,历史按轮次增长。本例保留全部历史,生产系统也可以摘要或压缩。

Harness 负责把循环接起来

while True:
    response = model(messages, tools)
    messages.append(response)
    if not response.tool_calls:
        return response.text
    for call in response.tool_calls:
        result = execute_tool(call)
        messages.append(tool_result(call.id, result))
    # 下一次调用才会收到新增结果

这里是离线预设教学回放,数据与模型输出用于说明机制,不展示内部思维链。备用查询是本案例的策略;Harness 也可以自行重试、验证和纠正。

登录后收藏评论 0

登录后发表评论

暂无评论。