&lt;?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Stan Wu 吳信典</title><link>https://blog.stanwu.org/tags/%E6%9E%B6%E6%A7%8B%E8%A8%AD%E8%A8%88/</link><description>拆解被包裝過的東西、數位自主權實踐、非典型理財觀</description><language>zh-TW</language><lastBuildDate>Mon, 11 May 2026 21:29:56 +0800</lastBuildDate><atom:link href="https://blog.stanwu.org/tags/%E6%9E%B6%E6%A7%8B%E8%A8%AD%E8%A8%88/feed.xml" rel="self" type="application/rss+xml"/><item><title>LLM 工具調用的真相：模型從來沒有「執行」任何東西</title><link>https://blog.stanwu.org/posts/llm-tool-call-truth/</link><pubDate>Mon, 11 May 2026 00:01:00 +0800</pubDate><guid>https://blog.stanwu.org/posts/llm-tool-call-truth/</guid><description>&lt;p&gt;你有沒有問過 AI「幫我查一下今天台北的天氣」，然後它真的回答你了？&lt;/p&gt;
&lt;p&gt;看起來它「上網查了」。但事實上，它沒有。&lt;/p&gt;
&lt;h2 id="ai-其實只是在畫設計圖"&gt;AI 其實只是在「畫設計圖」&lt;/h2&gt;
&lt;p&gt;想像一位建築師坐在辦公室，畫好一份施工圖，交給工頭：「這面牆要打掉，這裡重新走管線。」&lt;/p&gt;
&lt;p&gt;建築師從頭到尾沒碰過一塊磚。真正動手的是工班。完成後，工頭跑回來回報：「牆打掉了，但發現裡面有一條舊管線沒在圖上。」建築師看了，才決定下一步怎麼改。&lt;/p&gt;
&lt;p&gt;AI 工具調用的機制幾乎一模一樣。&lt;/p&gt;
&lt;p&gt;當你叫 AI「搜尋最新消息」，它不是自己去打開瀏覽器、輸入關鍵字。它做的事情是：&lt;strong&gt;畫一張格式化的施工圖&lt;/strong&gt;，告訴外部系統「我需要這個搜尋結果」。真正去搜尋的，是外部的程式。結果回來後，再交回給 AI，它才能繼續回答你。&lt;/p&gt;
&lt;p&gt;用技術的話說，那張「施工圖」長這樣：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-json" data-lang="json"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;type&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;tool_use&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;name&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;web_search&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;input&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nt"&gt;&amp;#34;query&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;台北天氣&amp;#34;&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;AI 輸出這段文字之後，它的工作就暫停了。它既不知道搜尋有沒有成功，也不知道結果是什麼——直到工頭把答案送回來。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;AI 從來不是在「使用工具」，而是在「請別人幫它用工具」。&lt;/p&gt;
&lt;/blockquote&gt;&lt;h2 id="幕後其實有三個角色"&gt;幕後其實有三個角色&lt;/h2&gt;
&lt;p&gt;理解 AI 工具調用，可以把整個系統想成一個工程團隊：&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;角色&lt;/th&gt;
&lt;th&gt;在 AI 系統裡是誰&lt;/th&gt;
&lt;th&gt;負責什麼&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;建築師&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Model Weights（模型本體）&lt;/td&gt;
&lt;td&gt;幾百億個數字構成的設計知識，本身不動手&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;工頭&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Orchestration Layer（協調層）&lt;/td&gt;
&lt;td&gt;接收設計圖、指揮工班執行、把結果回報給建築師——&lt;strong&gt;真正的執行者&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;工班&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Inference Engine + 各種工具&lt;/td&gt;
&lt;td&gt;實際跑搜尋、執行指令、讀取檔案&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;所謂「AI 模型」，本質上就是那位建築師——滿腦子設計知識，但從不親自砌磚。&lt;/p&gt;
&lt;p&gt;你用不同的 AI 工具，背後的「工頭」也不一樣：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Claude.ai 網頁版&lt;/strong&gt;：Anthropic 自己的後台系統&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Claude Code（程式開發工具）&lt;/strong&gt;：你電腦裡的一個程式&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;ChatGPT Plugins&lt;/strong&gt;：OpenAI 的後台（2023 年 6 月率先普及「function calling」這套機制）&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;你自己串 API&lt;/strong&gt;：你寫的程式&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Anthropic 的 tool use API 於 2024 年 5 月 30 日正式 GA，同年 11 月再開源 MCP（Model Context Protocol），讓任何工具都能標準化地接進 AI 系統。&lt;/p&gt;
&lt;p&gt;換句話說，同一個 AI 模型，接上不同的「工頭」，能做的事就完全不一樣。&lt;/p&gt;
&lt;h2 id="一個任務是怎麼完成的"&gt;一個任務是怎麼完成的&lt;/h2&gt;
&lt;p&gt;以「幫我比較這兩份文件有哪裡不同」為例，完整走一遍：&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;第一步：你提問，系統把問題打包送給 AI&lt;/strong&gt;
包含「你有哪些工具可以用」的說明，以及你的請求。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;第二步：AI 輸出它的「點單」&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;我需要比較工具來讀取這兩份文件
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;第三步：協調層真正去執行&lt;/strong&gt;
它呼叫比較工具，讀取檔案，取得差異結果。&lt;strong&gt;AI 沒有參與這一步。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;第四步：結果送回給 AI&lt;/strong&gt;
AI 現在才看到比較結果，才能告訴你「第三段有一處不同：原文是 A，新版改成了 B」。&lt;/p&gt;
&lt;p&gt;整個過程，AI 從來沒有碰過任何檔案。它看到的只有文字——你的問題，以及工具回傳的結果。&lt;/p&gt;
&lt;p&gt;用圖來看，整個流程是這樣：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sequenceDiagram
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; participant 你
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; participant 工頭 as 工頭（協調層）
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; participant 建築師 as 建築師（AI）
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; participant 工具
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; 你-&amp;gt;&amp;gt;工頭: 提出任務
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; 工頭-&amp;gt;&amp;gt;建築師: 打包問題＋工具清單
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; 建築師-&amp;gt;&amp;gt;工頭: 輸出施工圖（JSON）
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; 工頭-&amp;gt;&amp;gt;工具: 實際執行
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; 工具-&amp;gt;&amp;gt;工頭: 回傳結果
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; 工頭-&amp;gt;&amp;gt;建築師: 結果注回，繼續下一步
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; 建築師-&amp;gt;&amp;gt;工頭: 下一步施工圖
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; 工頭-&amp;gt;&amp;gt;工具: 再次執行
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; 工具-&amp;gt;&amp;gt;工頭: 再次回傳
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; 工頭-&amp;gt;&amp;gt;建築師: 任務完成，收工
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; 建築師-&amp;gt;&amp;gt;工頭: 最終回答
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; 工頭-&amp;gt;&amp;gt;你: 交付結果
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="ai-怎麼處理多個步驟甚至自己組合工具"&gt;AI 怎麼處理多個步驟——甚至自己組合工具&lt;/h2&gt;
&lt;p&gt;有時候現場根本沒有你要的工具。&lt;/p&gt;
&lt;p&gt;就像工頭回報「工地沒有吊車」，建築師不是放棄，而是說：「那用滑輪加人力，分兩段吊上去。」這正是 AI agent 最有價值的能力之一——&lt;strong&gt;手邊沒有完整工具，自己組合現有的湊出來&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;工地有時候會遇到這種狀況：大型升降機故障了，但有一批建材得在今天搬上五樓。&lt;/p&gt;
&lt;p&gt;工頭沒有呆站在那裡。他安排兩組人：一組負責把建材用手推車推到樓梯口打包好，一組在五樓架滑索等著。第一組推完一批，回報「樓梯口備好了，八箱」，工頭才叫五樓開始往上吊。吊完回報「收到，全數到位」，才繼續下一批。&lt;/p&gt;
&lt;p&gt;沒有升降機，照樣完工。兩個普通動作，組合出同樣的結果。&lt;/p&gt;
&lt;p&gt;這正是 AI agent 碰到工具缺口時的做法。Git Bash 環境裡沒有 &lt;code&gt;rsync&lt;/code&gt;，AI 不會跟你說做不到——它自己拆成兩步：先用 &lt;code&gt;tar&lt;/code&gt; 把檔案打包，再用 &lt;code&gt;scp&lt;/code&gt; 傳過去，遠端收到再解開。每一步等回報，確認沒問題才繼續。&lt;/p&gt;
&lt;p&gt;關鍵是：&lt;strong&gt;這個組合不是事先設計好的，是 AI 看到現場狀況臨時決定的。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;整個過程，建築師（AI）和工頭（系統）的對話大概是這樣：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;建築師：先把資料打包壓縮
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;工頭回報：打包完成，512MB
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;建築師：用 scp 傳到遠端伺服器
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;工頭回報：傳輸完成
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;建築師：在遠端把壓縮包解開
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;工頭回報：解壓完成，資料就位
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;AI 每次只提出一個動作，等工頭回來說結果，再決定下一步。它不是一開始就把三條指令全部列出來——而是走一步、看一步。&lt;/p&gt;
&lt;p&gt;出錯的時候更能看出這個設計的彈性：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;工頭回報：scp 傳輸失敗，連線逾時
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;建築師：先去確認遠端那邊狀況再說
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;（工頭去查，回報遠端磁碟空間不足）
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;建築師：清掉舊檔再重傳
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;這個「遇到問題換策略」的能力，不是工程師寫死的 if/else 邏輯。它是 AI 從海量的人類問答記錄裡訓練出來的直覺——某種意義上，是整個開發者社群的集體經驗被壓縮進了模型裡。&lt;/p&gt;
&lt;p&gt;這套「看結果、決定下一步」的循環，有個正式名稱叫 &lt;strong&gt;ReAct&lt;/strong&gt;（Reasoning + Acting），由 Princeton 和 Google Brain 的研究團隊在 2022 年提出，2023 年發表於 ICLR。現在幾乎所有主流 AI agent 框架都以這個架構為基礎。&lt;/p&gt;
&lt;h2 id="ai-這套換策略的能力從哪裡學來的"&gt;AI 這套「換策略」的能力從哪裡學來的&lt;/h2&gt;
&lt;p&gt;簡單說，有三個來源：&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;少量的人工示範&lt;/strong&gt;：訓練時，人類示範「遇到這種錯誤要這樣處理」。奠定基本模式，但數量有限。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;大量的合成練習&lt;/strong&gt;：自動產生各種出錯情境，讓 AI 練習回應，再篩選好的答案進訓練資料。這是主要來源。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;網路上吸收的集體智慧&lt;/strong&gt;：GitHub、Stack Overflow、技術論壇上幾十億筆「遇到問題→找到解法」的記錄，全都進了模型的訓練資料。你問 AI 怎麼解決某個問題，它給出的直覺，很可能來自某個十年前在論壇發文的工程師。&lt;/p&gt;
&lt;p&gt;這也是為什麼，AI 在常見問題上表現很好，但碰到冷門或從未有人討論過的狀況，就容易出錯——它的知識底子，是人類留下的紀錄。&lt;/p&gt;
&lt;h2 id="為什麼要這樣設計"&gt;為什麼要這樣設計&lt;/h2&gt;
&lt;p&gt;你可能會問：為什麼不讓 AI 直接自己執行，而要這麼繞一圈？&lt;/p&gt;
&lt;p&gt;這個「繞一圈」的設計，其實帶來三個很重要的好處：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;安全性&lt;/strong&gt;：工頭可以攔截每一個動作、加上確認步驟、限制 AI 能做什麼。Claude Code 每次執行指令前問你「要不要允許」，就是這個機制。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;靈活性&lt;/strong&gt;：同一個 AI 模型可以接上不同的工具組合，換工具不需要重新訓練模型。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;可追蹤性&lt;/strong&gt;：每一次工具調用都可以記錄下來，方便排查問題。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;分離，帶來了控制。&lt;/p&gt;
&lt;h2 id="下次看到-ai做了什麼你知道真相了"&gt;下次看到 AI「做了什麼」，你知道真相了&lt;/h2&gt;
&lt;p&gt;AI 「查了資料」、「執行了指令」、「讀了你的檔案」——這些描述都沒錯，但背後真正發生的事，是 AI 提出了請求，有個你看不見的系統代為執行，再把結果交回給它。&lt;/p&gt;
&lt;p&gt;AI 是那個說「我需要這個」的人，不是那個真正動手的人。&lt;/p&gt;
&lt;p&gt;理解了這一點，下次你看到 AI 工具的確認提示、或是某個 AI 功能說「需要連接外部服務」，你就知道那意味著什麼了——那是幕後的「工頭」正在出動。&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;strong&gt;延伸閱讀&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;ReAct 論文：&lt;a href="https://arxiv.org/abs/2210.03629"&gt;ReAct: Synergizing Reasoning and Acting in Language Models&lt;/a&gt;（Yao et al., 2022）&lt;/li&gt;
&lt;li&gt;Anthropic tool use GA 公告：&lt;a href="https://www.anthropic.com/news/tool-use-ga"&gt;Claude can now use tools&lt;/a&gt;（2024 年 5 月 30 日）&lt;/li&gt;
&lt;li&gt;MCP 開源公告：&lt;a href="https://www.anthropic.com/news/model-context-protocol"&gt;Introducing the Model Context Protocol&lt;/a&gt;（2024 年 11 月）&lt;/li&gt;
&lt;/ul&gt;</description></item></channel></rss>