OpenClaw Skills #12 - Function Calling:讓 AI Agent 真正「動手做事」的關鍵機制
發布時間:2026-03-12 | 分類:OpenClaw Skills 深度研究
---
一、開場破題
你有沒有問過 ChatGPT「現在幾點?」,然後得到一個尷尬的回答:「我無法取得即時資訊。」
這就是純語言模型的天花板——它只會「說話」,不會「做事」。
Function Calling 正是打破這道牆的關鍵機制。它讓 LLM 不再只是一個文字生成器,而是一個能夠呼叫外部工具、查詢即時資料、執行操作的真正 AI Agent 核心引擎。
2026 年,從 OpenAI 的 GPT-4o、Anthropic 的 Claude 3.5,到開源的 Mistral、LLaMA 3,幾乎所有主流 LLM 都已原生支援 Function Calling。這不是錦上添花的功能,而是 AI Agent 能否落地的根本條件。
---
二、概念精講
Function Calling 的核心概念很直觀:你告訴模型「有哪些工具可以用」,模型決定「何時呼叫哪個工具、帶什麼參數」,然後你執行並把結果還給模型。
技術架構圖
使用者輸入(User Query)
|
v
LLM 判斷:需要呼叫工具嗎?
|
是 --+-- 否
| |
v v
生成 Function Call 直接生成文字回答
(JSON 格式)
|
v
應用層執行實際函式
(查 DB / 打 API / 操作系統)
|
v
將 Function Result 回傳給 LLM
|
v
LLM 整合結果,生成最終回答
三個核心角色
1. Function Schema(函式描述)
你需要用 JSON Schema 格式描述每個函式:名稱、功能說明、參數型別與說明。模型靠這份描述判斷何時該用哪個工具。
2. Tool Call(模型決策)
當模型認為需要某個工具時,它不會直接輸出文字,而是輸出一個結構化的 JSON 物件,指定函式名稱與對應參數。
3. Tool Result(執行結果回饋)
應用層收到 Tool Call 後,執行對應函式,再把結果以特定訊息格式回傳給模型,讓模型整合進最終答案。
Parallel Function Calling(並行呼叫)
GPT-4o 與 Claude 3.5 支援在單次推理中同時發出多個 Function Call,大幅降低延遲。
單次 LLM 推理
|
v
[get_weather("台北")] + [get_stock_price("2330.TW")]
|
並行執行
|
v
結果合併 -> 最終回答
---
三、實戰場景
場景一:智慧客服 Agent
電商平台的客服 Agent 需要查訂單狀態、修改配送地址、申請退款。透過 Function Calling,模型只需理解使用者意圖,實際操作由後端函式執行,做到真正的「全自動客服」。
場景二:財務分析助理
使用者問:「台積電最新一季的毛利率是多少,跟去年同期比較如何?」模型透過 Function Calling 依序呼叫兩次財報查詢函式,分別取得 2025Q4 與 2024Q4 的數據,自動計算並生成分析段落,全程無需人工介入。
場景三:程式碼除錯 Agent
開發者輸入一段有 bug 的 Python 程式。Agent 呼叫程式碼執行函式實際運行,取得錯誤訊息後,再分析原因並給出修正建議。這是「思考 -> 行動 -> 觀察」的 ReAct 模式核心實踐。
---
四、關鍵步驟
Step 1:定義 Function Schema
以天氣查詢函式為例,Schema 需包含函式名稱、用途說明、以及每個參數的型別與描述。
required 欄位標明哪些參數是必填的。描述越清晰,模型呼叫準確率越高。Step 2:呼叫 LLM 並傳入工具清單
在建立對話時,將工具清單以
tools 參數傳入,並設定 tool_choice="auto" 讓模型自行判斷是否需要呼叫工具。也可設定 "required" 強制呼叫,或 "none" 完全禁止。Step 3:解析 Tool Call 並執行
收到模型回應後,檢查
message.tool_calls 是否存在。若存在,解析其中的函式名稱與參數(JSON 字串),呼叫你實作的對應函式取得真實結果。Step 4:將結果回傳模型
將 assistant 訊息(含 tool_calls)與函式執行結果(role: "tool")一起加入對話歷程,再次呼叫 LLM,模型會生成整合後的自然語言回答。
整個流程形成「感知 -> 決策 -> 行動 -> 回饋」閉環,這正是 AI Agent 的核心運作模式。
---
五、常見誤區
誤區一:Function Description 寫得太模糊
模型完全靠
description 判斷何時呼叫工具。描述應精確說明「適用情境」與「不適用情境」,避免模型誤判。誤區二:忘記處理模型不呼叫工具的情況
tool_choice="auto" 時模型可能直接回答,程式碼必須同時處理有無 tool_calls 兩種情境,否則出現 NoneType 錯誤。誤區三:把敏感操作直接暴露為工具
若直接暴露刪除資料庫、發送郵件等高風險操作,一旦模型誤判後果難以收拾。高風險工具應加入 Human-in-the-Loop 確認機制。
誤區四:工具數量過多導致準確率下降
研究顯示工具超過 20 個時 Tool Selection 準確率明顯下滑。建議依場景動態注入工具子集,而非每次傳入所有工具。
---
六、延伸學習
- Tool Use 進階:了解 Anthropic Claude Tool Use 與 OpenAI Function Calling 的設計差異
- ReAct 模式:Function Calling 是 ReAct Agent 模式的技術基礎,值得深入研究
- LangChain Tools:提供數十種現成工具封裝,可快速整合進 Agent
- OpenAI Assistants API:在 Function Calling 之上封裝狀態管理,適合複雜多輪對話
- MCP(Model Context Protocol):Anthropic 提出的標準化工具協議,正成為業界新標準
---
References
- OpenAI Function Calling 官方文件:https://platform.openai.com/docs/guides/function-calling
- Anthropic Tool Use 官方文件:https://docs.anthropic.com/en/docs/build-with-claude/tool-use
- LangChain Tool Calling 文件:https://python.langchain.com/docs/how_to/tool_calling/
- OpenAI Assistants API:https://platform.openai.com/docs/assistants/overview
- HuggingFace Chat Templating:https://huggingface.co/docs/transformers/en/chat_templating_writing
- OpenClaw GitHub:https://github.com/openclaw/openclaw
- LangChain 官方文件:https://docs.langchain.com
- OpenAI Platform Docs:https://platform.openai.com/docs
- ReAct: Synergizing Reasoning and Acting in Language Models (Yao et al., 2022):https://arxiv.org/abs/2210.03629
- Gorilla: Large Language Model Connected with Massive APIs (Patil et al., 2023):https://arxiv.org/abs/2305.15334