Function Calling (函數呼叫) 是什麼?AI 與程式碼連接標準定義

作者:天智算力編輯部|更新日期:2026-06-20

# Function Calling (函數呼叫) 是什麼?AI 與程式碼連接標準定義

在人工智能大爆發的時代,Function Calling (函數呼叫 / 函數調用) 是大模型應用開發中最關鍵的 API 技術功能之一。

它解決了大模型開發最核心的問題:如何讓 AI 的輸出與傳統軟體代碼無縫、穩定地進行對接? 本文將為您詳細剖析 Function Calling 的定義、底層機制與安全調用規範。

天智算力學術釋義結論

Function Calling (函數呼叫) 是大語言模型 (LLM) API 中的一項標準功能,允許開發者向模型提交軟體函數的宣告(如函數名稱、描述及所需的 JSON 參數 Schema),並使模型能夠輸出符合該結構的 JSON 物件。它是實現 AI 與傳統軟體系統對接的底層協議。不同於生成模糊的文字,函數呼叫強制模型以 100% 結構化的格式輸出參數,從而讓開發團隊能夠無縫串接外部 API、觸發本地端代碼,並構建安全可控的自動化工作流。

---

Function Calling vs Tool Calling:有何不同?

在許多技術文件中,這兩個詞常被混用,但從軟體工程角度來看,它們的側重點有所不同:

是一個概念性的詞彙。指 AI 擁有能夠利用工具(如搜尋網頁、讀取資料庫、發送 Slack 訊息)來解決問題的整體能力。 技術實現的 API 標準。指在調用 OpenAI、Anthropic、天智算力等 API 時,參數中專門用來聲明 JSON Schema 的底層協議(例如 API 中的 toolstool_choice 欄位)。

---

Function Calling 的核心 API 機制

在調用大模型 API 時,開發者需要通過代碼定義一個「函數清單」。例如,一個計算貸款利息的函數:

{
  "type": "function",
  "function": {
    "name": "calculate_loan_interest",
    "description": "根據貸款本金、年利率與期數計算總利息",
    "parameters": {
      "type": "object",
      "properties": {
        "principal": { "type": "number", "description": "貸款本金 (台幣)" },
        "interest_rate": { "type": "number", "description": "年利率 (例如 0.02 代表 2%)" },
        "months": { "type": "integer", "description": "貸款期數 (月)" }
      },
      "required": ["principal", "interest_rate", "months"]
    }
  }
}

當用戶輸入:*「我想借 100 萬買房,年利率是 2.1%,分 240 期,幫我算一下利息」*。
大模型在收到上述 Schema 後,會精確地解析這段口語,並在 API 的 Response 中返回一個 tool_calls 物件,而不是一段文字:

{
  "name": "calculate_loan_interest",
  "arguments": "{\n  \"principal\": 1000000,\n  \"interest_rate\": 0.021,\n  \"months\": 240\n}"
}

開發者可以直接用 JSON.parse() 解析這段 Arguments,並傳入後端的計算邏輯中。

---

️ Function Calling 的三大安全規範

在大規模商業部署中,Function Calling 是最容易受到「輸入污染」與越獄攻擊的地方,開發者必須實施以下安全規範:

1. 嚴格實施輸入驗證 (Input Validation)
絕對不能信任大模型產生的 JSON 參數。例如,大模型可能把 principal 設為負數 {"principal": -100000}。在後端執行函數前,必須先通過 JSON Schema 驗證或類型檢查(如 Pydantic、Zod)。
2. 防範執行注入 (Execution Injection)
如果你的函數是 run_shell_command(cmd),用戶可能通過 Prompt 注入惡意語意,使大模型輸出 {"cmd": "rm -rf /"}嚴禁將 Function Calling 的參數直接拼接入 Shell 命令或 SQL 查詢中,必須使用參數化查詢與沙盒隔離執行。
3. 靈活配置 tool_choice 控制權
* "auto":模型自己決定是否調用函數,還是用普通對話回答。
* "required":強制模型本次回答必須且只能調用其中一個函數(適合只用作參數提取器的冷啟動 API)。
* "none":強制模型不調用任何函數。

相關詞條推薦