本地 Agent 十次里有两次工具调用失败,原因是它吐出的 JSON 少了个括号——格式校验与有限重试我这样加

"它昨天帮我查了三次库存都好好的,今天第一次就报错,说参数解析失败,我啥也没改啊。"

说这话的是我们办公室的采购老陈。我给他配了一个本地跑的小 Agent,能调两个工具:一个查内部库存表,一个按条件筛选供应商记录。用了一周,他说偶尔会"抽风",报个错就停了,再问一遍又好了。

"偶尔"这个词最让人头疼。我让老陈先别重试,把那次的完整日志发我。

一、先看它到底吐了什么

日志里,模型给出的工具调用参数是这样一段:开头的大括号有,物料名、仓库名都写对了,最后少了一个右括号,后面还多出半句"我来帮您查询一下"。工具那边拿到的不是一段合法的 JSON,解析直接失败。

老陈问:"那它为什么有时候好好的?"

我说,模型生成参数其实是在"写字",不是在填表。大多数时候它写得规规矩矩,偶尔顺嘴多说一句,或者问题里带了引号、换行,格式就容易乱。小模型更明显一些。

二、我加了三层

第一层:调用前先校验。 每个工具都写好参数格式说明,模型给出的参数先过一遍校验:能不能解析、必填字段在不在、类型对不对。不合格的不交给工具。

第二层:有限重试,并且把错误原样告诉它。 校验失败时,不是简单再问一遍,而是把"哪里不合格"回给模型,比如"缺少右括号""仓库名为空",让它重新给参数。最多重试两次,超过就停下来,直接跟老陈说"这次没查成,请换个说法或者稍后再试",不硬撑。

第三层:把生成参数这一步的随机性调低。 聊天回答可以活泼一点,但生成工具参数时,我把温度调低,并在说明里要求"只输出参数,不要附加说明"。

三、验收:故意找容易出错的问法

老陈帮我凑了四十个他平时真会问的问题,我又加了十个故意刁钻的:问题里带引号的物料名、带换行的备注、一句话里同时问两个仓库。

每个问题跑三遍,一共一百五十次调用,记三个数:一次成功、重试后成功、最终放弃。

改之前,五十题里有十一题至少出过一次解析失败,有两题三遍全挂。改之后,一百五十次里一次成功占了绝大多数,有九次是校验拦下、重试一次就对了,最终放弃的只有一次,是一句话问两个仓库的那种,它给出的参数总是只填一个。这一题我在说明里补了一句"多个仓库请分开查询",再测三遍都过了。

我还看了重试带来的等待时间,最慢的一次比平时多了四五秒,老陈说能接受。

四、我自己的几条小结

  • Agent 调工具不稳,先看它实际吐出的参数,别急着换模型
  • 校验要放在工具之前,别让坏参数进到真实的表里
  • 重试要有上限,把错误原因告诉模型,比闷头再问一遍有效
  • 验收时专门准备带引号、换行、一句多问的问题

老陈现在说它"不怎么抽风了",偶尔停下来也会说清楚原因。

你们的 Agent 工具调用失败率大概多少?是怎么处理格式出错的?评论区交流一下。

相关的配置记录我放在 evafang.com 。

相关推荐
Momo__1 小时前
155个App把豆包关在门外,豆包反手掏出第二把钥匙
app·agent·ai编程
阿里云云原生2 小时前
数字员工 or 数字分身?研发端到端交付提效的实践
agent
ikun_文2 小时前
LangChain-常用场景
langchain·agent
中趴菜2 小时前
工具调用 5|执行一次还不够:怎样形成“判断—行动—观察”的循环?
llm
阿里云大数据AI技术3 小时前
云栖实录|从数据闭环到模型闭环,阿里云全栈方案助力多模态AI走向生产
人工智能·agent
阿里云云原生3 小时前
AgentTeams Dashboard:统一管理团队、项目与资产
云原生·agent
七牛云行业应用3 小时前
Codex接MCP完整教程:从官方文档服务器到HTTP、STDIO与OAuth配置(2026年10月)
人工智能·ai·agent·ai编程
王中阳Go4 小时前
面到 harness 架构就卡住的人,多半是做过但没这么叫过
架构·go·agent
千木SilvaMux4 小时前
3 款免费模型颁奖词实测:0.90 分冠军赢在哪
llm·api