统一错误协议(error-as-data) 安全与工程

别名: error-as-data

把工具失败当成数据而不是崩溃:工具抛错 → 捕获 → 格式化成字符串 → 作为 `tool_result` 回填给模型 → 模型读到自己失败的原因,自己纠正重试。错误字符串必须带「工具名 + 非法值 + 期望」,模型才有纠正的抓手;循环本身从不因一个工具而中断。

它是什么

统一错误协议(error-as-data)把工具失败当成数据而不是崩溃:工具抛错 → 捕获 → 格式化成字符串 → 作为 tool_result 回填给模型 → 模型读到自己失败的原因,自己纠正重试。错误不跳出数据通道,而是顺着数据通道流回给发起点——循环本身从不因一个工具而中断,用户也永远看不到「Agent 挂了」。

错误字符串怎么写

错误消息的写法决定模型能不能纠正。Error: add() expects numeric a, got "abc" 之所以有效,是因为它包含三样东西:工具名add)、非法值got "abc")、期望expects numeric a)。反过来 Error: failed 让模型无从下手;把整个堆栈丢进去则既烧 token 又对模型没用——错误字符串是给模型看的,不是给调试器看的,内部路径、环境变量这类信息更不该暴露(模型的话会原样进日志)。

走同一条路的失败

错误协议一旦建立,所有失败都走同一条路:工具抛错、工具不存在、甚至模型吐出的 arguments 是非法 JSON——统统捕获、格式化、回填,让模型重新生成参数。加上超时Promise.race)与工具结果截断,就是工具层健壮性的完整闭环(第 08 章)。

相关词条

出现在这些章节