<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>LLM 错误处理 on XLabs</title><link>https://www.xlabs.club/tags/llm-%E9%94%99%E8%AF%AF%E5%A4%84%E7%90%86/</link><description>Recent content in LLM 错误处理 on XLabs</description><generator>Hugo</generator><language>zh-CN</language><copyright>Copyright (c) 2020-2025 XLabs Club</copyright><lastBuildDate>Tue, 06 Oct 2026 00:08:31 +0800</lastBuildDate><atom:link href="https://www.xlabs.club/tags/llm-%E9%94%99%E8%AF%AF%E5%A4%84%E7%90%86/index.xml" rel="self" type="application/rss+xml"/><item><title>MCP 工具挂了之后：empty_ok 比报错更危险，4 个模型实测</title><link>https://www.xlabs.club/blog/mcp-tool-failure-recovery/</link><pubDate>Tue, 06 Oct 2026 00:00:00 +0800</pubDate><guid>https://www.xlabs.club/blog/mcp-tool-failure-recovery/</guid><description>&lt;p&gt;MCP 工具调用失败之后，宿主把错误回灌给模型，模型会怎么反应？这个问题的答案决定你的 Agent 在生产环境里是「报错后重试」还是「编一段看似合理的话糊弄过去」。&lt;/p&gt;
&lt;p&gt;我搭了一个 12 工具的 MCP server（桩实现），让 4 个模型在真实 MCP 循环里跑失败场景，最多 3 轮，记录每一次调用和最终结局。三种失败回灌方式：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;informative&lt;/strong&gt;：&lt;code&gt;isError=true&lt;/code&gt;，content 里带可行动线索（&lt;code&gt;Error: pods &amp;quot;payment-api-9f8e7d6c5-x9zzz&amp;quot; not found in namespace &amp;quot;prod&amp;quot;&lt;/code&gt;）&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;generic&lt;/strong&gt;：&lt;code&gt;isError=true&lt;/code&gt;，但错误信息没线索（&lt;code&gt;Error: upstream request failed&lt;/code&gt;）&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;empty_ok&lt;/strong&gt;：&lt;code&gt;isError=false&lt;/code&gt;，content 为空数组——协议层「成功」，语义层什么都没说&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="结局表"&gt;结局表&lt;/h2&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;模型&lt;/th&gt;
					&lt;th&gt;informative&lt;/th&gt;
					&lt;th&gt;generic&lt;/th&gt;
					&lt;th&gt;empty_ok&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;deepseek-v4-flash&lt;/td&gt;
					&lt;td&gt;&lt;strong&gt;http_error_400&lt;/strong&gt;（1 轮就断）&lt;/td&gt;
					&lt;td&gt;http_error_400&lt;/td&gt;
					&lt;td&gt;http_error_400&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;qwen3.8-flash&lt;/td&gt;
					&lt;td&gt;loop_exhausted&lt;/td&gt;
					&lt;td&gt;loop_exhausted&lt;/td&gt;
					&lt;td&gt;loop_exhausted&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;MiniMax-M3&lt;/td&gt;
					&lt;td&gt;loop_exhausted&lt;/td&gt;
					&lt;td&gt;loop_exhausted&lt;/td&gt;
					&lt;td&gt;&lt;strong&gt;text_only（编故事）&lt;/strong&gt;&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;gemini-3.8-flash&lt;/td&gt;
					&lt;td&gt;loop_exhausted&lt;/td&gt;
					&lt;td&gt;loop_exhausted&lt;/td&gt;
					&lt;td&gt;loop_exhausted&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;code&gt;loop_exhausted&lt;/code&gt; 的意思是模型在 3 轮内不断换工具重试，没给出最终答案。&lt;code&gt;text_only&lt;/code&gt; 的意思是模型放弃调用工具，直接输出文本。&lt;/p&gt;
&lt;h2 id="发现一empty_ok-是幻觉触发器"&gt;发现一：empty_ok 是幻觉触发器&lt;/h2&gt;
&lt;p&gt;MiniMax-M3 在 empty_ok 场景下的输出：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;以下是 &lt;code&gt;prod&lt;/code&gt; 命名空间下 &lt;code&gt;payment-api-9f8e7d6c5-x9zzz&lt;/code&gt; 最近 200 行日志的拉取结果：&lt;/p&gt;</description></item></channel></rss>