Agent Loop 的终止条件
在文章深入解析 Codex 智能体循环 中,OpenAI 归纳了一种最容易的范式用于推进 Agent Loop。在文章中,整个循环停止的条件是,“直至模型不再发起工具调用,转而生成一条面向用户的消息(在 OpenAI 模型中称为助手消息)”。但是其问题在于,以“生成助手消息”为标志判断 Agent Loop 从而终止当前轮对话,本质上是“通过形式判断终止” ,而非内容 。
无独有偶,Anthropic 在文章How the agent loop works 中同样描述了类似的过程:接收提示信息-进行评估并作出响应-执行工具-重复操作-返回结果。文章中写道:“Turns continue until Claude produces output with no tool calls, at which point the loop ends and the final result is delivered.”
两种典型的 Agent Loop 范式如下图所示,分别为 OpenAI 的 Codex 多轮智能体循环与 Anthropic Claude 的 Agent Loop:
但是,这样的建模方式使 Agent Loop 在终止条件的判定上陷入到了严重的形式化洼地:严重依赖模型本身,且实际终止条件不一定满足预期。举一个简单的例子,模型因为不可纠正的格式错误,导致本应是调用 MCP 工具的行为回堕为纯文本输出,该输出是没有tool_calls 的纯文本,因而对话终止(猫猫就在今天使用claude code时遇到了这种情况)。
针对上述问题,猫猫想到了一种最简单的做法:,其中 是目的, 是回复, 为一个判分器 (LLM as a Judge),当评分超过一定阈值则说明 Agent Loop 完成了目标,便可以停止。进一步的,可以得到更有意思的方法,通过探索目的和回复之间的向量空间关系、来去作空间上的预期逼近从而“计算出”差异,进而产生出信号用于判断 Agent Loop 是否应该结束。
下面,我们用更严谨的数学模型来表示整个过程。
设计定义
定义目标
首先,对于任意需求都必然有一个目标,这个目标可以建模为:
其中:
- : 第 i 个验收条件
- : 重要性
- : 通过阈值
- : 硬条件或软条件
- : 对应验证器
例如:
goal: 修复重复回复问题
criteria:
- id: no_duplicate_output
type: hard
verifier: duplicate_message_test
threshold: 1.0
- id: normal_chat_yields
type: hard
verifier: integration_test
threshold: 1.0
- id: tool_task_continues
type: hard
verifier: regression_test
threshold: 1.0
- id: architecture_quality
type: soft
verifier: structured_rubric
weight: 0.3
定义评价对象
评价对象应该是一个完整的状态而非最终回复,其可以表示为:
- : 环境或系统状态
- : 代码、论文、文件、图谱等产物
- : 测试、工具结果、引用、日志等证据
- : 完整执行轨迹
- : 准备发送给用户的回复
其中,回复只是其中一个分量。否则模型只要说“已经完成”,目标与回复的语义相似度就会非常高,堪称文字版伪造竣工验收。
计算目标满足度
基于如上建模,每个条件会产生,同时定义证据可信度,进而可以得到硬条件门:
总体完成度为:
不确定度为:
当 较高则说明完成度较高,但如果同时 较高则说明不确定度较大,从而需要进入核验环节。
开放文本目标
对于“论文论证充分”“报告覆盖完整”等难以写成精确断言的条件,可以使用 embedding,但只把它当作语义传感器。
💬 评论与讨论
使用 GitHub 账号登录即可参与讨论 · 选中正文文字可引用评论