<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Tool-Use on CAO ZUOHUA</title><link>https://caozuohua.github.io/tags/tool-use/</link><description>Recent content in Tool-Use on CAO ZUOHUA</description><generator>Hugo</generator><language>zh-cn</language><lastBuildDate>Wed, 01 Jul 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://caozuohua.github.io/tags/tool-use/index.xml" rel="self" type="application/rss+xml"/><item><title>智能体问题：工具调用失败</title><link>https://caozuohua.github.io/posts/2026-07-01-agent-tool-call-failure/</link><pubDate>Wed, 01 Jul 2026 00:00:00 +0000</pubDate><guid>https://caozuohua.github.io/posts/2026-07-01-agent-tool-call-failure/</guid><description>&lt;h2 id="当智能体的手不听使唤"&gt;当智能体的&amp;quot;手&amp;quot;不听使唤&lt;/h2&gt;
&lt;p&gt;如果说幻觉是智能体&amp;quot;脑子&amp;quot;的问题，那工具调用失败就是&amp;quot;手脚&amp;quot;的问题。智能体不仅要思考，还要行动——调用 API、查询数据库、操作文件系统。而但凡涉及外部系统交互，失败的维度比纯文本幻觉要多得多。&lt;/p&gt;
&lt;p&gt;Arize AI 2026 年对生产环境智能体的故障分析指出：&lt;strong&gt;工具相关失败占 Agent 异常的 40% 以上&lt;/strong&gt;，其中最危险的不是&amp;quot;调用失败&amp;quot;本身，而是&lt;strong&gt;失败后的错误处理&lt;/strong&gt;——智能体对错误的理解和处理能力，往往比工具调用本身更不可靠。&lt;/p&gt;
&lt;h2 id="三大失败模式"&gt;三大失败模式&lt;/h2&gt;
&lt;h3 id="模式一静默错误最危险的失败"&gt;模式一：静默错误——最危险的失败&lt;/h3&gt;
&lt;p&gt;工具返回了错误信息，但智能体没有正确解读，把错误响应当做正常结果继续推理。&lt;/p&gt;
&lt;h4 id="典型场景"&gt;典型场景&lt;/h4&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-json" data-lang="json"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;// 智能体调用天气 API
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;{&lt;span style="color:#f92672"&gt;&amp;#34;tool&amp;#34;&lt;/span&gt;: &lt;span style="color:#e6db74"&gt;&amp;#34;get_weather&amp;#34;&lt;/span&gt;, &lt;span style="color:#f92672"&gt;&amp;#34;arguments&amp;#34;&lt;/span&gt;: {&lt;span style="color:#f92672"&gt;&amp;#34;city&amp;#34;&lt;/span&gt;: &lt;span style="color:#e6db74"&gt;&amp;#34;北京&amp;#34;&lt;/span&gt;, &lt;span style="color:#f92672"&gt;&amp;#34;date&amp;#34;&lt;/span&gt;: &lt;span style="color:#e6db74"&gt;&amp;#34;2026-07-01&amp;#34;&lt;/span&gt;}}
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;// API 返回错误
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;{&lt;span style="color:#f92672"&gt;&amp;#34;error&amp;#34;&lt;/span&gt;: &lt;span style="color:#e6db74"&gt;&amp;#34;city_not_found&amp;#34;&lt;/span&gt;, &lt;span style="color:#f92672"&gt;&amp;#34;message&amp;#34;&lt;/span&gt;: &lt;span style="color:#e6db74"&gt;&amp;#34;City name must be in English: Beijing&amp;#34;&lt;/span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;// 智能体把 json 当成了天气数据继续推理
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;根据返回的数据，北京7月1日的湿度和 error 字段显示...&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;这比调用直接报错更危险——至少报错时智能体知道出错了，还能重试。静默错误时，智能体浑然不知，把垃圾数据当成金子继续加工。&lt;/p&gt;
&lt;h4 id="为什么会发生"&gt;为什么会发生？&lt;/h4&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;错误格式不统一&lt;/strong&gt;：不同 API 的错误响应结构不同（HTTP 状态码、JSON error 字段、HTML 错误页……），智能体难以用统一逻辑识别&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Prompt 缺少错误处理指令&lt;/strong&gt;：很多人在 system prompt 里只写了&amp;quot;使用 XX 工具查询&amp;quot;，没写&amp;quot;如果工具返回错误，你应该……&amp;quot;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;模型倾向&amp;quot;继续完成任务&amp;quot;&lt;/strong&gt;：遇到异常数据时，模型的训练倾向是给用户一个答案，而不是停下来讨论 API 报错&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id="模式二参数构造错误最常见的失败"&gt;模式二：参数构造错误——最常见的失败&lt;/h3&gt;
&lt;p&gt;智能体理解了要调什么工具，但构造参数时出错。&lt;/p&gt;
&lt;h4 id="常见错误类型"&gt;常见错误类型&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;格式错误&lt;/strong&gt;：日期传 &lt;code&gt;2026/07/01&lt;/code&gt; 而 API 要 &lt;code&gt;2026-07-01&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;类型错误&lt;/strong&gt;：传字符串 &lt;code&gt;&amp;quot;5&amp;quot;&lt;/code&gt; 而 API 要整数 &lt;code&gt;5&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;枚举错误&lt;/strong&gt;：传 &lt;code&gt;&amp;quot;medium&amp;quot;&lt;/code&gt; 而有效值只有 &lt;code&gt;[&amp;quot;low&amp;quot;, &amp;quot;mid&amp;quot;, &amp;quot;high&amp;quot;]&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;遗漏必填参数&lt;/strong&gt;：忘了传 &lt;code&gt;currency&lt;/code&gt; 字段&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;语义错误&lt;/strong&gt;：传了合法格式但语义不对，比如把 &lt;code&gt;page_size=100&lt;/code&gt; 传给了限制最大 50 的分页接口&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id="根因分析"&gt;根因分析&lt;/h4&gt;
&lt;p&gt;模型对 API 的理解来自 prompt 中的工具描述（Function Schema）。如果描述不够精确——比如某个参数的合法值只写了 &lt;code&gt;string&lt;/code&gt; 没有枚举——模型就只能&amp;quot;猜&amp;quot;。&lt;/p&gt;</description></item></channel></rss>