30 秒看懂
Ayush Bhardwaj 检查了自己智能体会话中的约两万次调用,发现重复出现的管道暴露了命令行工具缺少的功能。他的改进包括选择相关消息、紧凑搜索结果和批量检查。他还说明管道如何掩盖测试失败、过时技能指令为何持续影响行为,以及为何应通过正确答案和交互轮次评估更短的输出。
- 1重复过滤可以暴露工具缺少的功能Bhardwaj 在自己的样本中发现,智能体经常用过滤器处理命令行输出。
- 2管道最后一个命令成功,可能掩盖测试失败工具和 shell 如果没有保留真实错误或退出状态,就可能丢失它们。
- 3指令仍提到无效参数时,智能体继续使用它观察到的 95 次搜索全部使用旧参数;修订指令后,两个会话改变了行为。
- 4将真实命令重放为测试案例把智能体接下来的动作当作粗略线索,并留出案例用于评估。
- 5输出 token 更少本身不能证明流程更好还要衡量正确答案和交互轮次。
要点建议
- 检查真实智能体会话中反复出现的管道和重试。
- 让错误可见,并保留真实的失败状态。
- 根据使用情况提供选择、紧凑输出和批量操作。
- 接口变化时同步更新技能和帮助文本。
- 重放留出的轨迹,用实际结果而不只是输出长度评估。
按章节阅读整理后的全文
把绕行做法当作产品反馈
Bhardwaj 审计智能体调用,并说明过滤输出也可能掩盖失败。
我构建了一个命令行工具,让编程智能体检索以前会话的上下文。观察它们使用工具让我认识到:绕行做法本身就是反馈;智能体可能默默地在工具外面写程序,而不是提交错误报告。
我从自己的会话记录中提取约两万次调用,涉及 14 个命令行工具。约四分之一将输出通过 head、tail、grep 或 Python 等工具过滤;读取密集型命令的比例更高。这些是我个人会话中的观察结果。
管道也可能掩盖失败。没有启用 pipefail 时,shell 管道通常返回最后一个命令的退出状态,因此成功的 head 或 tail 可能掩盖失败的测试。截断输出还可能删掉实际错误;我建议在末尾提供简短失败摘要和完整日志路径。
把重复过滤转化为命令行功能
他的会话搜索工具根据观察增加选择、紧凑结果和批量检查功能。
我的 chat-history 命令行工具可以搜索多个编程工具的历史会话。在一项规模较小的个人使用审计中,智能体经常打开会话后立刻再次过滤。重复截取表明接口应该提供更好的选择功能,而不是每次都让智能体自行重建。
一个完整会话约有 120 万字符,而匹配位置附近的消息约有 3000 字符。通用大小上限只能限制数量,不能确定相关部分,因此我增加了范围、匹配消息和最近消息等选项。
反复用 Python 处理 JSON 暗示需要字段更少的紧凑搜索格式;反复循环检查多个会话则暗示需要批量检查命令。智能体围绕我的命令编写的命令,成了产品路线图。
教会智能体新功能,并用真实轨迹测试
过时指令让一个无效参数继续被使用。记录的命令可以成为重放测试。
帮助文本和技能文件也是接口的一部分。我让一个参数不再产生作用,却把它留在技能指令里;观察到的 95 次搜索仍全部使用它。两个会话加载修订指令后,都不再使用旧参数,并尝试了新选项。
会话记录可以提供重放测试:在新旧版本中运行相同命令,再检查智能体后来使用的结果是否仍然可用。智能体接下来的动作只是其意图的粗略线索,因此应留出部分案例用于评估。

衡量结果,而不只是缩短输出
简洁的智能体模式只有改善任务时才有帮助。讲者建议有意识地设计并检查真实行为。
如果重新开始,我会先添加有用的范围和数量限制,教智能体使用这些选项,并让默认输出简洁,同时说明如何获取更多内容。智能体知道何时使用参数,参数才有帮助。
面向智能体的模式可以提供简洁输出和清楚的错误。但一个例子虽然减少了工具输出 token,却没有明显改善总体成本或运行时间。因此除了返回字符数,还要衡量正确答案和交互轮次。
我不指望智能体一次就设计出最好的智能体接口。人应该决定工具需要完成什么,再利用真实会话和测试帮助智能体发现并修复摩擦。
备份会话记录,搜索工具名后跟管道或反复重试的情况,再检查接下来发生了什么。对于面向智能体的工具,这些绕行做法就是产品使用数据。
同频道的其他文章
38:50EN → 简体中文
12:48EN → 简体中文
12:57EN → 简体中文
23:00EN → 简体中文
22:49EN → 简体中文
15:41EN → 简体中文