iT邦幫忙

2026 iThome 鐵人賽

DAY 6
0
佛心分享-IT 人自學之術

觀察 AI,也觀察自己:30 天重新學會如何學習系列 第 6

【Day 06】從會說到會做:Function Calling 如何讓 AI 開始使用工具?

  • 分享至 

  • xImage
  •  

https://ithelp.ithome.com.tw/upload/images/20260806/20183346NHK6Rtdr5R.png

昨天整理名詞,今天先拿一個工具出來用

昨天我們把 Agentic AI 想成一次大掃除,也替 Agent、Tool、MCP、RAG 與 Human-in-the-loop 找到各自的位置。

其中有一個名詞是:

Function Calling:領班填好工單,請真正會操作工具的人來處理。

今天就把這張工單攤開來看。不過先說結論:如果你只是在使用 ChatGPT、Claude 或 Gemini,通常不需要自己寫 Function,也不需要盯著 JSON 檢查每一格。一般人仍然是用自然語言工作,Function Calling 多半發生在產品背後。

那為什麼還要知道它?

因為當 AI 從「回答問題」變成「查資料、讀檔案、寄信或修改行事曆」,你需要知道它究竟做了什麼、你的指令能影響多少,以及什麼時候應該先踩煞車。

不是每個問題都需要工具

到目前為止,我們談的大語言模型,本質上仍然很會根據 Context 產生下一個 Token。如果你請它:

  • 改寫一段文章
  • 摘要已經貼進對話的內容
  • 解釋一個概念
  • 把資料整理成表格

這些工作所需的內容已經在 Context 裡,模型通常可以直接回答。

但有些事情只靠生成文字做不到:

  • 查詢現在的天氣或最新新聞
  • 讀取你的行事曆與雲端檔案
  • 查詢公司資料庫裡的訂單
  • 寄出 Email、建立會議或修改資料

模型可以生成一句「信件已寄出」,但句子寫得再像物流通知,也不代表信真的離開寄件匣。當任務需要外部資料或要對外部世界採取行動時,背後就需要搜尋、API、資料庫或其他工具。

Function Calling 是模型與這些工具合作的方法之一。

一般使用者怎麼知道 AI 呼叫了什麼工具?

多數時候,一般使用者看不到原始的函式名稱、JSON 參數與工具回傳值。那比較像廚房裡的工作單,不一定要貼到餐桌上。

使用者通常會從介面看到幾種線索:

  1. 執行狀態:例如「正在搜尋網路」、「正在讀取檔案」或「正在執行程式」。
  2. 資料來源:搜尋結果可能附上引用;讀取檔案時,回答可能指出資料來自哪份文件。
  3. 權限要求:第一次連接行事曆、Email 或公司服務時,產品可能要求登入或授權。
  4. 執行前確認:寄信、付款、刪除檔案等高風險動作,理想上應先讓使用者確認。
  5. 可驗證的結果:會議真的出現在行事曆、信件真的進入寄件備份,才算完成。

介面顯示多少細節,由產品設計決定。有些產品會清楚列出正在使用的工具,有些只顯示簡短狀態,也有些把整個流程藏在回答背後。因此,「畫面沒有 JSON」不代表沒有工具;反過來,模型說「我已經處理好了」也不能單獨證明工具真的執行成功。

對一般使用者來說,重要的不是背下 function 名稱,而是看見來源、權限、確認與結果

自然語言指令會影響工具嗎?

會,但不是你說了就算。

可以把工具選擇想成三層:

第一層:產品先決定工具箱裡有什麼

如果產品沒有連接天氣、Email 或行事曆工具,你再怎麼說「請務必呼叫行事曆 Function」,模型也不會憑空長出一個 Google Calendar 帳號。

平台或開發者會先決定:

  • 提供哪些工具
  • 每個工具可以存取什麼
  • 哪些使用者具有權限
  • 哪些動作必須再次確認

這是使用者指令不能跨越的硬邊界。

第二層:系統決定模型可以怎麼選

開發者可以讓模型自行判斷是否使用工具,也可以要求這一輪一定要用、禁止使用,或只能使用某個指定工具。不同平台的設定名稱不完全相同,但核心都是限制模型的選擇範圍。

第三層:使用者的自然語言影響本次判斷

在可用工具與權限範圍內,你的指令會影響模型是否使用工具。例如:

  • 「請搜尋今天的官方公告,再回答我。」
  • 「只根據我上傳的檔案回答,不要搜尋網路。」
  • 「先幫我草擬信件,不要寄出。」
  • 「查完行事曆後列出選項,等我確認再建立會議。」

這些句子不是在寫 Function,而是在告訴 AI:資料要從哪裡來、可以做到哪一步、哪裡要停下來等人類決定。

因此,使用者指令會影響工具使用,但工具是否存在、是否允許執行,以及產品是否接受這項指令,仍由系統設計與權限決定。自然語言是方向盤,不是萬能通行證。

AI 會自己完成到哪一步?

這取決於你使用的是現成產品,還是自己開發的應用。

情境 使用者要做什麼 背後由誰處理工具
使用 ChatGPT 等現成產品 用自然語言提出需求,必要時授權或確認 產品已整合的工具與平台流程
使用公司內部 AI 系統 提出需求並遵守公司權限與確認流程 公司開發者預先接好的工具
自己開發 AI 應用 定義工具、權限、執行方式與錯誤處理 自己的程式與外部服務

以網頁搜尋為例,現成 AI 產品可能已經把「決定搜尋、送出查詢、取得結果、整理來源」包在產品裡。使用者只看到搜尋狀態和最後的引用,不需要自己寫搜尋 Function。

但如果你要讓 AI 查詢實驗室內部資料、控制自己設計的設備,或操作公司特有的工作流程,現成產品不會知道該怎麼做。這時才輪到開發者自己定義工具。

Function Calling 不是讓模型突然長出雙手

比較精確的流程是:

模型根據使用者要求與可用工具,提出工具名稱和參數;真正執行操作的,通常是外部應用程式。

假設系統提供一個天氣工具:

get_weather(location)

使用者問:

今天台北適合帶傘嗎?

模型可能產生一張概念化的工單:

{
  "name": "get_weather",
  "arguments": {
    "location": "Taipei"
  }
}

接著由應用程式呼叫天氣服務,把結果交回模型。模型最後才整理成:

台北今天降雨機率約 80%,建議帶傘。除非你剛好想測試新買的狗鐵絲(GORE-TEX)外套。

完整流程是:

使用者提出需求 → 模型選擇工具與參數 → 應用程式執行 → 工具回傳結果 → 模型整理回答

少了「應用程式執行」,Function Calling 只是一張字跡工整、但始終沒有人處理的工單。OpenAI 的官方文件也把 Tool Calling 描述為模型與應用程式之間的多步驟往返,而不是模型單方面完成所有操作。

Function Calling流程

Google Gemini API 的函式呼叫流程圖

圖片來源:Google AI for Developers:使用 Gemini API 呼叫函式

不同平台使用的名稱略有差異:OpenAI 常稱 Function CallingTool Calling,Anthropic 常稱 Tool Use。訊息格式不完全相同,但核心概念接近:

先讓模型知道有哪些工具,再由模型提出工具請求,外部系統執行後把結果交回模型。

給想自己開發工具的人

如果只是使用現成 AI 產品,可以先停在這裡。後面的內容不是每個人都會碰到,而是給想把 AI 接到自己系統的人一張簡圖。

你通常會在以下情況自己寫 Function Calling:

  • 要連接公司或研究團隊的私人資料
  • 要操作自己設計的 API、程式或硬體
  • 現有平台沒有提供需要的工具
  • 希望把自然語言接到可重複、可驗證的工作流程

開發者首先要提供工具說明,通常包括名稱、用途、參數與必填欄位。以下是概念化簡寫;不同 API 的完整外層格式會不同:

{
  "name": "create_calendar_event",
  "description": "在使用者的行事曆中建立活動",
  "parameters": {
    "type": "object",
    "properties": {
      "title": { "type": "string" },
      "start_time": { "type": "string" },
      "duration_minutes": { "type": "integer" }
    },
    "required": ["title", "start_time", "duration_minutes"]
  }
}

工具說明要讓模型知道「什麼時候用」與「參數代表什麼」。如果只把工具命名為 do_it,說明寫成「做事情」,模型不知道你是要它排會議、查天氣還是發射火箭,不能完全怪它沒有讀懂空氣。

接下來的最小流程是:

1. 開發者把可用工具與使用者要求交給模型
2. 模型回傳工具名稱與參數
3. 應用程式驗證權限與參數
4. 應用程式執行工具
5. 應用程式把結果交回模型
6. 模型產生最後回答,或提出下一個工具請求

AI 可以協助你產生 schema、串接 API 與撰寫程式碼,但有人仍要決定權限、驗證條件、錯誤處理與高風險操作的確認方式。叫 AI 幫忙蓋橋沒有問題,只是橋蓋完還是要驗收,不能因為程式碼縮排很整齊就直接剪綵通車。

會使用工具,也代表有機會用錯工具

如果模型只是把天氣講錯,我們可能白帶一把傘;但如果它能寄信、付款、刪除檔案或修改資料庫,錯誤參數就不只是小尷尬。

可靠的系統還需要:

  • 驗證工具參數
  • 檢查使用者權限
  • 限制工具可存取的資料
  • 對高風險操作再次確認
  • 保存操作紀錄
  • 處理逾時、失敗與異常回傳

例如使用者說:

幫我刪掉昨天建立的測試檔案。

系統應該先列出符合條件的檔案並要求確認,而不是看到「刪掉」兩個字,就立刻展現超乎預期的工作熱情:

你確定是這 347 個檔案嗎?

停下來想一想

一般使用者不需要閱讀每一筆 Function Call,但需要知道如何判斷 AI 是否真的完成工作:

  • 它使用了什麼資料來源?
  • 是否要求了合理的權限?
  • 高風險動作有沒有先確認?
  • 最後結果能不能在外部系統中驗證?

進階的測試可以到day06_practice.ipynb

而對開發者來說,Function Calling 真正改變的也不是讓模型突然變成萬能,而是替自然語言與外部系統之間建立一套合作方式。

所以,AI 從「會說」走向「會做」時,使用者不必跟著進廚房看每張工單,但至少要知道:端上桌的菜究竟真的煮過,還是模型只寫了一份讀起來很香的菜單。

明天,我們就來看看這些工具工單為什麼經常長得像 JSON,以及 Markdown、JSON、YAML 與 HTML 分別在 AI 工作流程中扮演什麼角色。


參考資料


上一篇
【Day 05】我開始聽不懂了:用類比建立 AI 專有名詞的鷹架
系列文
觀察 AI,也觀察自己:30 天重新學會如何學習6
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言