先记住这个答案
Agent 循环交换的主要信息是模型输入的任务上下文、模型提出的行动请求,以及宿主执行行动后返回的观察结果。输入通常包含用户目标、工具定义、相关历史和当前任务状态;输出可以是工具名称与参数,也可以是最终回复。宿主先校验行动权限和参数,再执行工具,把成功、失败或部分结果反馈给下一轮。历史可以摘要、检索或压缩,不要求每次重放全部内容;模型的内部推理也不一定公开返回。
- 模型提出行动,宿主校验并执行
- 上下文保留关键状态,不必堆入全部历史
- 工具返回值与停止条件共同驱动循环
循环中的信息交换内容
工具执行结果通常通过关联到对应调用的消息返回,包含结果数据、错误状态和必要的来源信息。宿主还可以维护模型消息之外的任务状态,例如已完成步骤、待确认操作和文件版本。下一次调用只需要重新组织与当前决策有关的内容,不能把“有记忆”简单理解为永远追加所有原始消息。
模型产生工具调用并不代表工具已经执行。应用需要解析请求、验证参数、检查授权,并把实际执行结果返回。经典 ReAct 提示可以显式展示 Thought 与 Action,但使用结构化工具调用的系统不必公开内部推理;审计应重点记录行动、依据摘要、权限判定和可验证结果。
代码修复中的四次状态更新
假设一个代码修复 Agent 已获得指定仓库的读取和修改权限。它先运行目标测试,工具返回失败用例与错误堆栈;随后读取相关源码与测试,补齐仅凭堆栈无法确定的上下文。宿主记录测试命令、退出状态和涉及的文件,避免模型把没有运行的检查当作成功。
读取源码后,模型提出具体修改,宿主应用补丁并返回变更结果;下一轮重新运行相关测试。测试仍失败时,模型依据新的输出决定继续定位或回退方案;测试通过也只证明这些用例通过,不能直接推导为整个系统没有回归。最终回复应说明改动和实际检查范围。
循环中信息交换的失效边界
一个脆弱点是观察返回内容格式不统一或过大,超出模型上下文窗口。若工具结果有数万字符,直接拼入会导致截断或关键信息丢失,破坏推理。通常在追加前需要摘要、过滤或分块,但摘要本身可能丢失关键细节。处理时可让工具返回结构化摘要或分级信息。
另一个风险是行动请求未被正确执行而Agent仍继续。比如工具调用格式错误或非预期异常,但系统返回简单错误而不是结构化状态,模型可能重复相同行动。应提供清晰错误信息与可用动作,并限制重试次数,超过则终止循环寻求人工干预。
容易答错的地方
- 观察只包含用户最新消息
- 观察不只是用户最新的一句话,还包括工具结果和任务状态。另一方面,模型上下文也不必包含全部历史:系统可以压缩旧消息、检索相关记录或保留结构化检查点,前提是没有丢失当前决策需要的目标、约束和关键证据。
- 思考直接作为行动执行
- 模型内部推理或一段描述行动的普通文本不会自动改变外部环境。宿主应只执行协议中明确的工具调用,并对参数、身份和权限做检查。工具返回“成功”也需要与实际效果相符,不能把模型自述当作执行证据。
面试官还会怎么问?
如何将工具结果高效地作为观察返回?
保留工具调用标识、成功或失败状态、关键结果及必要来源;大结果可以分页或另存,再返回可继续读取的位置。摘要和截断应说明省略范围,防止模型把局部结果当作全量数据。实际可传递的字段与消息格式取决于所用 API。
Agent必须每轮都调用工具吗?
不必。模型可以在已有证据足够时输出最终回复,也可能请求用户补充信息。宿主还应处理工具失败、重复无进展、超出轮数或预算等终止条件;不能只用“没有工具调用”来推断任务已经成功完成。
循环中是否交换置信度或中间决策依据?
可以记录面向审计的简短决策说明、所依据的工具结果和不确定性,但不应把完整内部思维链当作必需字段。有些模型不公开内部推理。模型自报的置信度也不是可靠概率,需要通过独立评测校准后才能用于自动决策阈值。
参考资料
示例用于理解所注明的运行环境与边界;延伸学习可结合原文中的更多案例。