WENBU · FIELD NOTES

Agent 报错时先读什么:状态、约定与重试边界

一次失败的 Agent 调用,先看返回状态与输入字段,再对照公开约定,最后才决定重试、改输入还是停止。本文用一张分诊表区分字段无效、限流、断流、预算用尽与成功但为空,并说明每种情况不能推出什么。

Wenbu · AI 辅助编辑图解 · 实例 · 来源

先读状态,再读输入,最后读约定。MCP 调用应先检查 isError;内置 agent 命令则看 done 事件的 status:complete 表示本回合完成,waiting 表示还需用户补充,limited 表示预算已用完,error 或没有终止事件的断流都不是完成。REST 接口的错误带有稳定的 code 和用户可读消息,422 通常表示字段或时刻无效,429 表示短时限流或 AI 额度不足。已收到的内容可以保留,但重试要由用户决定;AI 已开始的请求即使失败也可能计次,不要自动重试。报错只说明这一次调用没有按约定完成,不说明工具坏了、牌抽错了或解读不准。

  • 先看 isError 或 done 事件的 status,再决定是否读内容;没有终止事件的断流不等于完成。
  • 422 类错误先查字段与时刻,429 类错误先退避并读错误消息,不要立刻重发。
  • AI 已开始的请求即使失败也可能计次,重试应由用户决定,而不是自动循环。
  • 成功但结果为空,往往说明输入或范围问题,不能据此推断工具缺少某项能力。

一次失败调用的阅读顺序

  1. 读状态

    MCP 先看 isError;agent 命令看 done 事件的 status 是否为 complete、waiting 或 limited。error 与无终止事件的断流都不算完成。

  2. 读输入

    核对字段、日期范围、时区与时刻。422 通常指向字段或时刻无效;省略时区会默认 Asia/Shanghai 并返回警告。

  3. 读约定

    确认所用约定,例如换日规则、真太阳时近似、塔罗抽取张数与逆位设置,避免把约定差异误判为错误。

  4. 做决定

    改输入、退避、保留已收内容交给用户,或停止。429 请退避;AI 已开始的请求可能计次,不要自动重试。

从状态到约定再到决定的四步流程。它描述的是阅读顺序,不是自动重试策略;每一步都以公开文档写明的状态或约定为依据。

先读状态:这一次调用到底结束了没有

判断一次 Agent 调用是否失败,第一步不是看内容像不像答案,而是看协议层给出的状态。MCP 为成功结果声明 outputSchema 并返回 structuredContent,文档要求先检查 isError;如果 isError 为真,后面的结构化内容就不应被当作可用结果继续解读。内置 agent 命令输出逐行 JSON 事件,最后要检查 done 事件的 status:complete 表示本回合完成,waiting 表示还需用户补充,limited 表示预算已用完。error 或根本没有终止事件的断流,都不是完成。

这一步的意义在于把「没拿到想要的答案」和「调用没有完成」分开。断流时你已经收到的内容可以保留,但它只是半成品;把它当成完整解读,会让后续追问建立在残缺的上下文上。文档同时说明,重试需由用户决定,而不是由 Agent 自行循环。状态是事实,内容是否够用是判断,两者不要混在一起。

再读输入:字段、时刻与约定是否对得上

状态显示调用未完成时,第二个要核对的是输入。REST 接口使用 POST application/json,个人输入不得放到 URL;422 通常表示字段或时刻无效。对照公开约定逐项检查:八字输入为 1901 至 2099 年的公历日期、出生地钟表时间,以及 IANA 时区名称或明确的 UTC 偏移;省略时区会默认 Asia/Shanghai 并返回警告;出生时间未知时不生成时柱。这些都属于输入层面的可修正问题,而不是工具缺陷。

约定还决定了哪些结果本来就会带不确定性。真太阳时是近似校正,临近换日或时辰边界时建议对照不同设置;紫微不自动换算时区或校正太阳时;塔罗从 78 张牌中等概率抽取 1 张或 3 张,同一次抽取不会重复。如果返回结果与预期不符,先确认自己传的是哪一种约定,再判断是不是错误。把约定差异当成报错,会引出不必要的重试。

分诊表:五种结果各自先查什么

下表把常见结果归成五类,每类给出先查什么、以及不能据此得出什么结论。它只依据公开文档已经写明的状态与约定,不补充文档未声明的错误码、重试次数或额度重置时间。遇到文档没有描述的情况,正确做法是记录原始返回并停止推断,而不是套用某条经验规则。

需要强调的是,这张表是阅读顺序,不是自动重试策略。字段无效要改输入,限流要退避并读错误消息,断流要保留已收内容并交给用户决定,预算用尽要停下来说明,成功但为空要先查范围。任何一类都不构成「工具不可用」的结论,因为单次结果无法覆盖全部工具与全部输入。

重试边界:什么时候该停

文档给出的边界很具体:遇到 429 请退避;AI 已开始的请求即使失败也可能计次,不要自动重试。这两句话合起来意味着,重试不是免费的默认动作,而是一个需要用户知情的选择。对计算类工具,同样的输入按约定可以复算;对随机抽取,重抽会得到不同结果,公开约定要求保留返回的牌,不要在用户没有选择重抽时重新抽取。

因此,停止也是一种正确处理。当状态是 limited,或断流且用户尚未决定,或错误消息指向额度而非输入,继续重发只会消耗更多次数而不增加信息。把原始返回、已收到的内容和你的判断一起交给用户,比自动重试更接近可复核的工作方式。软件测试通过只说明已测试行为符合约定,不等于预测得到验证,这一点同样适用于对报错的解读。

Agent 调用结果分诊表
结果类型先查什么不能据此得出什么
字段或时刻无效(如 422)核对字段名、日期是否在 1901–2099 年、时区写法与钟表时间;读用户可读的错误消息不能推断工具缺少该能力,也不能推断命盘本身有问题
限流或额度不足(如 429)读错误消息区分短时限流与 AI 额度不足;按文档退避不能推断服务永久不可用,也不能自行假定额度何时恢复
流式断流、无终止事件确认是否收到 done 事件;保留已收到的内容不能把半成品当作完整解读,也不能断定模型给出了错误结论
预算用尽的回合(limited)确认 status 为 limited,说明本回合预算已用完不能推断输入有误,也不能推断后续回合一定同样受限
成功但结果为空先查搜索范围、locale 与输入是否落在工具覆盖范围内不能推断该功能不存在;页面未描述某能力不等于厂商没有该能力

假设案例:一次三张牌的解读请求断流了(虚构情境)

以下为虚构的教学情境,不对应任何真实用户或真实命盘。假设一位读者请 Agent 用三张牌做一次反思练习,宿主在流式返回中途断开,界面只显示了前两张牌的文字。读者想知道是不是应该立刻重发请求。

  1. 第一步,读状态:检查是否收到 done 事件。本例没有终止事件,按文档属于断流,不是完成;即使前两张牌看起来合理,也不能当作完整结果。
  2. 第二步,保留已收内容:把已显示的两张牌名、正逆位与关键词原样记下。公开约定要求保留返回的牌,不要在用户没有选择重抽时重新抽取。
  3. 第三步,读输入与约定:确认请求里写的是 1 张还是 3 张、是否开启逆位、locale 是否明确。本例请求为 3 张,返回只有 2 张,说明是传输中断而非张数设置错误。
  4. 第四步,做决定:把断流事实、已收内容和「是否重抽由你决定」一起交给读者。若读者选择重抽,新的一次抽取是独立的随机过程,可能碰巧重复某张牌,也可能完全不同;不能承诺复现原来的牌面。
  5. 第五步,记录:在札记里注明这次是断流、保留了哪些内容、读者最终选择什么。下次遇到类似情况时,这份记录比记忆更可靠。

这个案例教的具体一点是:断流与「牌面不好」是两类不同的问题。断流属于调用未完成,处理方式是保留内容并交回决定权;牌面含义属于解释,需要读者自己结合现实判断。把两者混为一谈,就会在传输问题上反复重抽,或在解释问题上反复重发请求。

常见问题

MCP 调用返回了内容,但我不确定它是否成功,应该先看哪里?

先看 isError。文档说明 MCP 为成功结果声明 outputSchema 并返回 structuredContent,并要求先检查 isError;如果 isError 为真,就不应把后面的内容当作可用结果继续解读。确认成功后再读结构化字段,并核对输入与约定是否与你的请求一致。

遇到 429,是不是等一会儿自动重发就行?

文档的表述是遇到 429 请退避,并说明 429 表示短时限流或 AI 额度不足,需要阅读错误消息。它没有给出统一的重试间隔或额度恢复时间,所以不要自行假定。若错误消息指向 AI 额度,自动重发可能继续消耗次数;重试应由用户决定。

成功返回但结果为空,是不是说明这个工具不支持我要的功能?

不能这样推断。空结果更可能来自输入范围、locale 设置或搜索范围,例如 search_library 搜索的是问卜原创资料与精选来源目录,不是全网搜索。页面没有描述某项能力,也不等于厂商没有该能力;应回到能力清单核对工具覆盖范围,而不是据一次空结果下结论。

重抽塔罗能不能得到和上次一样的牌?

不能按需复现。塔罗是从 78 张牌中等概率抽取 1 张或 3 张,同一次抽取不会重复;新的一次抽取是独立的随机过程,可能碰巧重复某张牌,也可能完全不同。公开约定要求保留返回的牌,不要在用户没有选择重抽时重新抽取。

术语速查

isError
MCP 结果中的错误标记。文档要求先检查它,再决定是否读取 structuredContent;它为真时,后续内容不应被当作可用结果。
done 事件
内置 agent 命令逐行 JSON 输出中的终止事件,其 status 可为 complete、waiting 或 limited。error 或没有终止事件的断流都不算完成。
422 与 429
REST 接口的两种错误状态。422 通常表示字段或时刻无效;429 表示短时限流或 AI 额度不足,需要阅读错误消息并退避。
保留返回的牌
塔罗约定的一部分:同一次抽取不重复,重抽是新的随机过程,因此应保留已返回的牌供后续讨论,而不是默认重抽。
查看事实与来源的核对笔记
  • MCP 成功结果会声明 outputSchema 并返回 structuredContent,调用方应先检查 isError 再读内容。

    先检查 isError
  • 内置 agent 命令的完成与否要看 done 事件的 status,error 或没有终止事件的断流都不算完成。

    error 或没有终止事件的断流都不是完成
  • 公开能力清单把计算描述为确定性约定或明确随机抽取,解释属于文化反思而非既成事实预测。

    Cultural reflection, not established factual predictions

来源与核对范围

这是问卜的 AI 辅助编辑内容,经过自动结构检查和独立生成的编辑检查;不代表独立专家审稿。公开产品介绍不等于付费体验测试。

  1. Wenbu · agent integrations ↗Current first-party product documentation · 2026-11-02 · 已取回正文
  2. Wenbu · versioned public capabilities ↗First-party current tool, convention and privacy contract; not external endorsement or predictive validation · 2026-11-02 · 已取回正文
  3. Wenbu · calculation conventions ↗First-party implementation; not evidence of predictive accuracy · 2026-11-02 · 已取回正文

运行 CLI doctor 检查连接与版本

在排查报错前,先用文档提到的 CLI doctor 确认连接与版本是否正常,再按状态、输入、约定的顺序阅读返回结果;这一步只检查接入,不构成一次解读。

运行 CLI doctor 检查连接与版本 ↗

围绕这篇,继续问 ↗

WENBU · A NOTE TO US

让下一次,更好一点。