Skip to content

필사 모드: 循环设计 — 在无限循环与过早放弃之间

中文
0%
정확도 0%
💡 왼쪽 원문을 읽으면서 오른쪽에 따라 써보세요. Tab 키로 힌트를 받을 수 있습니다.

把同一个调用重复了四十次的智能体

想象一份记录:在没有重试上限的框架里,智能体连续四十次尝试读取一个不存在的文件。这是构造的例子,但组装方式很现实。失败以异常字符串原样返回,模型不知道原因;不知道原因,就重复同样的尝试;没有上限,就没有任何东西让它停下。反方向的失败也存在:重试次数为零的框架,会因为一次瞬时的网络错误,扔掉一个本可以完成的任务。

循环设计的目标,是在这两道悬崖之间开出一条路。重试多少次、凭什么停下、卡住了往哪里上报。这三件事都是以代码形式部署的框架决定。

循环是框架的心脏

借用 Anthropic 智能体构建指南的区分:智能体是模型依据环境反馈自己决定下一步行动的系统。指南建议把智能体用在步骤无法预先规划的开放问题上,也警告成本会上升、错误可能累积——理由都在循环上。工具调用的结果每一步都提供现实依据,但如何消费这些依据,由框架决定。

同一份指南建议写明停止条件,例如最大迭代次数。听上去是理所当然的建议,但运维恰恰多在这层理所当然上崩塌。循环的自由度越大,停止规则就越是系统的安全阀。

重试上限:零和无限都不是答案

重试是一种价值随失败类型变化的购买。对瞬时失败,几次重试就能便宜地救回任务;对结构性失败,任何重试都是白花钱。问题在于模型常常无法自己做出这个区分。第 3 篇讲过的失败返回格式在这里再次登场:在返回原因和替代方案的框架里,重试是对不同路径的探索;在只返回异常字符串的框架里,重试是对同一次失败的重复购买。

所以顺序很重要。不先修失败返回格式、只顾提高上限,得到的只是一个以更高成本绕着同一个地方转的循环。上限本身,安全的做法是按任务的波动性从低起步,有了依据再上调。

三类停止条件:固定步数、目标检查、置信度

停止规则大体分三类。固定步数是跑满设定的次数就结束:实现零成本、预算可预测,但会攥着已完成的任务不放,也会松开还没完成的任务。目标检查是把停止条件写成代码:测试通过就停,产物满足 schema 就停。循环不再泄漏,代价是必须先把目标写成可验证的形式。置信度停止则是问模型有多确信,用那个数值来停。

MAX_STEPS = 20  # 按任务复杂度调整

for step in range(MAX_STEPS):
    action = model.next_action(context)
    if action.kind == "finish":
        if goal_check(workspace):  # 停止条件写成代码
            break
        context.add("goal_check 未通过:还有 2 个测试是红的")
        continue
    context.add(run_tool(action, retries=3))
else:
    escalate("到达步数上限", summary=context.progress_note())

三类并不互斥。实务上安全的组合,是把目标检查当主停止条件,把固定步数放在外层当安全阀。

置信度停止的陷阱

置信度停止很诱人:不用把目标写成代码,又快又便宜。陷阱恰恰在这里。自我报告的置信度是一句话,不是一次验证,而模型可以充满自信地犯错。那时循环会抱着错误答案正常收尾——失败没有以失败的形式留在记录里,这是质量最差的一种失败。

要用置信度,安全的做法是换个角色:不当停止信号,当路由信号。置信度低时,触发再跑一轮更便宜的验证,或者上报给人;停止本身交给可验证的目标检查来决定。置信是参考材料,不是裁判。

升级路径:卡住不应该等于结束

停止条件触发了、任务却没完成,就需要下一个去处。哪儿都没有的话,此前的进展会原地蒸发。去处有两个。一个是人。这时价值来自问题的具体程度:不是"我卡住了",而是"A 和 B 哪个 schema 是对的",附上进度摘要和选项,人的一次回答才能让循环重新转起来。另一个是子智能体:扔掉被污染的上下文,在干净的窗口里单独重解子问题——如第 2 篇所见,这一手的 token 成本不小。

Anthropic 的多智能体系统复盘具体列出了这一层的失败:对简单查询过度投入、没完没了的搜索、重复劳动。药方也在循环这一侧:让投入与查询复杂度成比例;委派时写明目标、输出格式和任务边界。升级不是异常处理,而是循环设计的常规零件。

亲手练习

框架工程 RPG 的第 3 层"循环设计"就是本文的练习。把从不重试到不设上限的四档重试策略、三类停止条件、三种升级路径组合起来试,你会同时遇到置信度停止便宜取胜的场景,和它信心满满地出错的场景。

参考资料

현재 단락 (1/29)

想象一份记录:在没有重试上限的框架里,智能体连续四十次尝试读取一个不存在的文件。这是构造的例子,但组装方式很现实。失败以异常字符串原样返回,模型不知道原因;不知道原因,就重复同样的尝试;没有上限,就没...

작성 글자: 0원문 글자: 2,625작성 단락: 0/29