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

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

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

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

一、先看它到底吐了什么

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

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

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

二、我加了三层

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

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

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

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

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

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

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

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

四、我自己的几条小结

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

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

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

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

相关推荐
我登哥MVP10 小时前
DeepSeek-Harness-Super-Agent-学习笔记
人工智能·深度学习·神经网络·机器学习·自然语言处理·agent
小田学Python11 小时前
工具调用:让 Agent 从“说”到“做”
大数据·大模型·agent·ai工具·deepseek
泯泷12 小时前
为什么你的 AI Agent“越改越差”?Anthropic 总结了 8 步评测方法
llm·agent·claude
阿里云云原生14 小时前
AgentCore + Codex 构建生产级 Agent 的原理与实践
agent
DigitalOcean16 小时前
Codex 如何接入 Claude 等其它模型?使用 CC Switch 接入 FluxLane API 教程
llm·agent
七夜zippoe16 小时前
Agent 并发控制:多用户、多会话与资源隔离策略
ai·agent·并发控制·资源隔离·多用户·多会话
沉默王二16 小时前
Hy4正式发布一手实测,腾讯这波起飞了。
openai·agent·vibecoding
泯泷17 小时前
做 AI 产品,路线图该数“实验”,而不是数“功能”
人工智能·llm·产品
火山引擎开发者社区19 小时前
OpenVIking 连接各种数据源,一键编译 LLM Wiki
llm
ZhengEnCi19 小时前
如何给 Agent 加一个 askQuestion 提问工具:从工具 Schema 到中断恢复的完整实现
agent