转载--AI Agent 架构设计:工具返回值设计(OpenClaw、Claude Code、Hermes Agent 对比)

原文:https://mp.weixin.qq.com/s?__biz=MzkzMTEzMzI5Ng==&mid=2247496776&idx=1&sn=5fdeadb256ab6905c9334672b9634c69&chksm=c26d1657f51a9f41954bc52ec73e443816990cb0a1fda28a6370e9b882c883d0b65bb9db635e&cur_album_id=4419773328652107782&scene=189#wechat_redirect

工具执行完了,麻烦才刚开始

工具调用成功了,返回了结果。

但这个结果现在要进入上下文。从这一刻起,它会占据上下文里的一块空间,在后续所有推理里被模型"看到"------直到这个 Session 结束,或者被 Compaction 压缩掉。

如果返回值设计得不好,它会持续地污染后续的推理:

返回太长:5 万字的日志全量注入上下文,关键信息被淹没,Lost in the Middle 问题加剧,Token 成本暴涨,后续每次调用都带着这 5 万字作为"包袱"。

返回太短:只返回"成功"或者一个 ID,模型不知道接下来该怎么做,下一步推理质量下降,甚至会再次调用工具来获取本来应该一起返回的信息。

返回格式不对:模型对 JSON、XML、Markdown 的处理能力不同。格式不对,模型理解效率低,也可能产生解析错误。

错误消息太抽象:工具失败了,只返回"Error 500",模型不知道原因,不知道怎么修,可能会盲目重试或者换一个错误的方向继续。

返回值设计,是工具设计里最容易被忽视、但影响最持久的部分。

Anthropic 的官方建议:25,000 Token 上限

Anthropic 在工具设计指南里给出了明确的数字:

Claude Code 默认把工具返回值限制在 25,000 Token 以内。

这不是随意设定的数字。Anthropic 的理由是:

"优化上下文质量很重要,但优化工具返回给 Agent 的上下文数量同样重要。我们建议对任何可能消耗大量上下文的工具返回值,实现分页、范围选择、过滤、截断的某种组合,并设置合理的默认参数。"

25,000 Token 大约是 2 万字------够模型做出合理判断的信息量,但不会撑爆上下文。

重要的是:这个限制预计会随着上下文窗口的增大而调整,但"需要上下文高效的工具"这个需求不会消失。 上下文窗口扩大,不是"可以随便返回大量数据"的理由,而是"可以处理更复杂任务"的能力扩展。

错误返回值:比成功返回值更重要

工具失败了,返回的错误消息是模型决策的唯一依据。

一个真实的案例:Anthropic 发布 Claude 的网页搜索工具时,发现模型会在搜索查询里无缘无故加上"2025",导致搜索结果出现年份偏差。修复方法不是改模型,而是改工具描述------在描述里明确说明"不要在查询里添加年份约束,除非用户明确要求"。

这说明工具的返回值和描述,会系统性地塑造模型的行为。 一个工具的设计问题,会在每次调用这个工具的任务里反复出现。

三个框架对返回值设计的不同态度

Claude Code:50K 外部化是架构级保护

Claude Code 对超长返回值有一个框架级别的保护机制:

当工具调用返回内容超过 50,000 字符,自动触发外部化------完整内容写入临时文件,上下文里只注入约 2KB 的摘要和文件引用。模型需要更多细节时,通过文件读取工具按需获取。

复制代码
工具返回 100,000 字符的日志    ↓超过 50,000 字符阈值    ↓完整内容写入 /tmp/tool_output_xxx.txt    ↓上下文注入:"工具返回了大量输出,已保存到 tool_output_xxx.txt。摘要:发现 127 条 ERROR 级别日志,主要集中在 14:30-15:00。如需查看完整输出,使用 read_file 工具读取文件。"

这个机制保护了主上下文不被单次工具调用撑爆,同时给了模型继续工作的信息(摘要)和获取更多信息的路径(文件引用)。

OpenClaw:无架构级保护,依赖 Skill 作者

OpenClaw 没有类似 Claude Code 的 50K 外部化机制。

工具返回什么、返回多少,完全由 Skill 作者决定。如果 Skill 作者没有实现分页和截断,工具可能返回几十万字的原始内容,全部注入上下文,没有任何自动保护。

ClawHub 上工具返回值设计的质量参差不齐。有质量好的 Skill,会在工具描述里明确说明返回值大小限制和分页参数;也有质量差的 Skill,直接暴露底层 API 的原始输出,没有任何裁剪。

Hermes:内置工具设计合理,execute_code 是特殊路径

Hermes 的 40+ 内置工具,大多数遵循了合理的返回值设计:有限制最大返回量、支持分页参数、错误消息有基本的可读性。

Hermes 最有特色的是 execute_code 工具------模型可以写脚本来处理数据,脚本的输出作为工具返回值。

原始日志可能有 10 万行,但脚本只返回了几十个 Token 的摘要。 模型"看到"的是处理结果,不是原始数据。这本质上是把"数据处理"放在了工具里,而不是让模型来处理原始数据。

这也是 Hermes 处理长文档的推荐方式(第二十七篇讲过的):对于结构化数据,让 execute_code 处理,返回摘要;对于非结构化内容,才考虑直接读取。

返回值是工具和模型之间的对话

工具的返回值,不只是"给了模型一个结果"。它是工具在告诉模型:

"发生了什么"------操作的结果。

"还有什么可以做"------分页提示、相关工具建议。

"如果出错了,下一步怎么办"------可操作的错误说明。

设计得好的返回值,让模型每次读完都知道接下来该做什么。设计得差的返回值,让模型每次都要在大量噪音里找信号,或者因为信息不足而做出错误决策。

Anthropic 在指南里说的那句话,在返回值设计这里同样适用:

"工具设计和 prompt 工程一样,需要同等程度的投入。"

工具能调出什么,往往被高估。工具返回什么、怎么返回,往往被低估。但后者对 Agent 稳定性的影响,一点都不亚于前者。

相关推荐
用户71333585156243 分钟前
MySQL - EXPLAIN 执行计划
数据库
小大宇27 分钟前
mongoDB dump技巧
数据库·mongodb
huijingjituan29 分钟前
三方聊天软件工具定制开发|打造企业级智能通讯平台
数据库·安全·阿里云·实时互动·腾讯云
zyplayer-doc33 分钟前
研发接口文档怎么长期维护:zyplayer-doc把API、Markdown和变更记录放进同一个知识库
大数据·数据库·人工智能·笔记·pdf·ocr
NineData33 分钟前
Oracle 卡住时先看阻塞源,ChatDBA 会先把锁链路理出来
数据库·oracle·ninedata·锁故障·锁等待·chatdba·锁阻塞
Macbethad1 小时前
基于WPF与.NET的洁净厂房数据孪生平台技术方案:架构、实现与SEMI标准实践
数据库·系统架构
咏方舟【长江支流】1 小时前
【开源】跨语言·跨平台·跨数据库(6) ——一种ORM缓存的接口实现和容错处理
数据库·缓存·开源·咏方舟-长江支流·用宝框架
努力进修1 小时前
破除工业 AI 业务落地壁垒:多模时序融合架构重塑设备全维度数据价值
数据库·人工智能·架构
静水楼台x1 小时前
spring security
java·数据库·spring
深度研习笔记2 小时前
OpenCV工业视觉进阶14|SQLite违规数据库存储+历史记录查询+Excel报表导出,完成项目商用数据闭环(验收必备)
数据库·opencv·sqlite