跳到主要内容

2 篇博文 含有标签「harness-engineering」

查看所有标签

无法说出"等一下"的智能体

· 阅读需 10 分钟
Tian Pan
Software Engineer

随便挑一个过去两年里搭建的生产级智能体,清点它在某一轮里实际能做的事。清单很短:发起一次工具调用、给出最终答案,或向用户提一个澄清问题。这就是整个动作词汇表。注意一下缺了什么。没有动词表达"我想在决定之前多花点时间";没有动词表达"我足够不确定,所以希望暂停并重新考虑,而不立刻承诺";没有动词表达"我想在采取任何行动之前先在这件事上多停留一会儿"。智能体在字面意义上无法说出"等一下"。语法里压根没有这个词。

这并不是表面打磨的问题,而是结构性的问题。一旦智能体的全部输出都是动作,任何内部状态都必须经由一个动作来表达。犹豫变成多余的工具调用,怀疑变成自信的承诺。只设计了动作动词的团队,实际上发布了一个唯一的语言就是"做事"的智能体——然后又奇怪它怎么从来不像在思考。

Abandon 原语:为什么你的智能体循环需要一个一等公民的方式来终止计划

· 阅读需 12 分钟
Tian Pan
Software Engineer

看看大多数智能体框架提供的循环原语:continuereturnretry 以及一个硬性终止运行的步数预算。注意缺失了什么。这里有一条表示“工作成功”的路径,一条表示“模型想继续”的路径,还有一条表示“我们耗尽了资金或耐心,于是强行终止循环”的路径。唯独没有一条头等路径来表达“我正在执行的计划是错误的,我想将其丢弃并开始一个全新的计划”。放弃原语(abandon primitive)——即一种让规划器显式、结构化地宣布当前轨迹无望的方式——是智能体循环语法中缺失的动词。它的缺失导致了一类通常被误诊为“模型需要更多推理”的失败。

一个在注定失败的分支上执行了三步的规划器,会不断优化同一个错误的计划,因为循环唯一的出口是成功、重试上一步或耗尽预算。这些路径都不包含“放弃该策略并尝试另一个”。因此,智能体执行了循环所允许的操作:它就地修改计划、再调用一个工具、再请求一次澄清,并在步数预算耗尽前不断收敛到一个非解决方案。当最终撞墙时,用户看到的是一条礼貌的失败消息,而不是问题的答案。这些浪费的步骤所带来的成本是真实的——生产数据表明,智能体系统 5-10% 的 Token 支出都花在了无法产生任何可用结果的重试上,而这一数字主要由长期的“注定失败分支”占据,而非孤立的工具错误。