2026.09.09
函數呼叫開發實戰指南:打造可靠的 AI 工具流程
AI資訊
函數呼叫開發的核心價值,是讓語言模型不只回答問題,還能在受到控管的前提下查詢資料、呼叫服務與推進工作流程。當使用者說「查詢台北明天的天氣」或「整理本週待出貨訂單」,模型應產生結構化指令,而不是憑空編造答案。
這種設計把自然語言介面與既有 REST API、資料庫及企業系統連接起來,但模型本身不應直接執行任何高風險操作。模型負責理解意圖、選擇工具與填寫參數;應用程式則負責驗證、授權、執行、記錄與回傳結果,兩者責任必須清楚切分。
本文會以天氣查詢與訂單操作為例,說明工具 Schema、Chat Completions 串接、多步驟對話、錯誤復原與安全防護,也會整理生產環境的測試指標與導入方式。若企業仍在評估可行性,可先用小型原型驗證資料品質、準確度與投資效益。
函數呼叫開發的原理與完整閉環

模型負責決策,程式負責執行
直接說,語言模型是工具選擇器與參數產生器,不是可任意存取系統的執行帳號。它根據使用者語句與工具描述,輸出要呼叫的函式名稱及 JSON 參數;後端服務確認資料格式、使用者身分與權限後,才真正發出 HTTP 請求或執行商業邏輯。
以天氣服務為例,使用者詢問某地天氣時,模型可提出 get_weather 與 location 參數。後端應先將地名正規化、限制可查詢區域,再呼叫受信任的第三方 API。取得結果後,系統把原始資料以 tool 訊息交還模型,由模型轉為讀者看得懂的回覆。
這種分工可避免「模型說已完成」卻根本沒有執行的落差,也讓每次操作能被追蹤。對查詢型工具,失敗時可告知使用者資料暫時不可用;對會改變資料的工具,則必須加入確認、冪等鍵與人工覆核,不能只依模型輸出就直接寫入。
- 模型:辨識意圖、選擇工具、產生候選參數
- 應用程式:驗證、授權、執行、記錄與錯誤處理
- 工具結果:回傳模型後,再形成自然語言答案
四階段閉環如何運作
完整閉環可濃縮成四步:理解意圖、產生結構化工具呼叫、受控執行、依結果回覆。第一步要辨識使用者真正目標,例如「幫我訂貨」可能仍缺少品項、數量與收貨倉;系統不應猜測,而要先提出精準澄清問題。
第二步由模型依 Schema 形成 JSON。第三步由伺服器以型別、範圍、授權與業務規則驗證,例如數量不可為負、倉別必須存在、建立訂單者必須有採購權限。即使 JSON 語法正確,也不代表該操作符合商業規則。
第四步是把執行結果、錯誤代碼或需要補充的欄位傳回模型。模型此時只負責說明結果,不可改寫來源事實。若 API 回覆庫存不足,應呈現可行替代方案或請求下一步指示,避免自行改量、改倉或改日期。
- 缺參數時優先追問,不以幻覺補值
- JSON 合法不等於操作可以執行
- 最終文字回答必須以工具回傳資料為準
為何比純聊天更適合業務流程
函數呼叫適合需要可驗證輸出的情境,因為自然語言可轉換為欄位明確的結構化指令。客服可查訂單狀態、採購可彙整庫存、分析人員可建立受限的查詢請求;使用者不必記住複雜選單或 API 格式,但系統仍保有流程控制權。
不過,工具不是越多越好。工具說明相似或名稱模糊時,模型容易選錯函式;可將工具依領域分組,例如訂單、庫存、客戶與知識查詢,依目前工作階段只提供必要集合。這也能降低提示字數、成本與誤觸高風險功能的機率。
實務上建議先選一個高頻、低風險、可量化的流程驗證,例如「依過往銷售與庫存資料提出補貨建議」。這與 ALION 協助需求預測 PoC 的方法一致:先比較模型精度與效益,再決定是否將原型擴大為正式系統。
- 優先選擇高頻、資料可取得、結果可檢核的流程
- 依情境縮小工具清單,減少選錯風險
- 把原型成果轉成後續正式開發可用的資產
工具定義與 JSON Schema 的設計方法
Schema 要描述業務語意,不只描述欄位
直接做法是把每個工具視為一份小型 API 合約:提供清楚名稱、用途、參數型別、必填條件與可接受值。get_weather 比 query_weather_for_anything 更精確;create_purchase_order 則必須在描述中說明它具有建立訂單的副作用,讓模型與開發者都知道需要額外確認。
參數描述應寫入判斷所需的語意。例如 location 要說明可接受「縣市或經緯度」,unit 限制為 celsius 或 fahrenheit,date 必須採用系統認可格式。不要只寫 string;描述越接近實際規則,模型越能提出合理呼叫,後端也越容易維持一致。
必填欄位只放真正不可缺少的資料。若使用者尚未指定溫度單位,可由系統以台灣預設值補入 celsius,並在回覆中標示;若建立採購單缺少供應商,則必須追問。把預設值、可推導值與絕對必填值分開,能減少無效往返。
- 函式名稱使用動詞加受詞,避免含糊縮寫
- 描述參數的業務意義、格式與限制
- 把預設值策略寫在程式規則,不交給模型猜測
使用 Pydantic 建立雙層驗證
最可靠的做法是同時在工具 Schema 與伺服器端驗證資料。前者引導模型輸出,後者才是安全邊界。Python 專案可用 Pydantic 將 location、unit、日期與數量建立成型別模型;解析失敗時回傳結構化錯誤,而非讓例外訊息直接暴露給使用者。
例如天氣工具可期待回傳「”temperature”: “22”, “unit”: “celsius”, “description”: “Sunny”」這類資料,但程式仍應檢查 temperature 是否可轉成數值、unit 是否在白名單內,以及回應是否確實來自允許的供應商。模型產出的內容與外部 API 回覆都不該被預設為可信。
對訂單、付款與資料修改工具,驗證模型還要加入領域規則:訂單編號格式、可用庫存、金額上限、使用者角色與審核狀態。Schema 驗證通過後才進入業務服務層,可讓錯誤分類更清楚,也有利於測試與稽核。
- Pydantic 適合把 JSON 轉為受控型別物件
- 工具輸入與第三方 API 回應都要驗證
- 領域規則需在服務層再次確認
設計穩定且可演進的工具介面
工具介面要能演進,關鍵是避免一次塞入過多用途。查詢訂單、取消訂單與修改地址應是不同工具,因為權限、確認流程與失敗處理不同。單一萬用函式雖然表面上彈性高,實際上會讓 Schema 複雜、測試困難,也讓模型更難選到正確操作。
版本變更時,保留舊欄位的相容轉換期,並在日誌記錄工具版本及呼叫來源。若將 delivery_date 改為 delivery_window,應先讓後端同時接受兩種格式,再逐步更新提示詞與用戶端。直接移除欄位,容易使既有對話、排程工作或整合服務突然失效。
工具輸出也應使用穩定格式,例如 success、data、error_code、message 與 request_id。模型需要的是可解讀結果,營運人員需要的是可追查識別碼。分開設計面向模型的摘要與面向維運的詳細日誌,才能兼顧體驗與除錯效率。
- 一項工具盡量只完成一種業務意圖
- 輸入與輸出都要有版本與相容策略
- 以 request_id 串起模型、工具與後端追蹤紀錄
API 串接與多輪工具呼叫實作
理解舊式與新式工具呼叫介面
實作時應先確認供應商與 SDK 支援的介面。早期整合常見 functions 與 finish_reason 為 “function_call” 的回應;較新的設計則以 tools 與 tool_calls 表達工具請求。兩者概念相近,但訊息格式、回傳欄位與多工具支援方式不同,遷移前應以測試案例逐一比對。
模型名稱與行為也需要明確鎖定。開發者可能會接觸 GPT-3.5、GPT-4、gpt-4 或 gpt-3.5-turbo-0613 等選項,但不應只因名稱相近就假設結構化輸出一致。請以固定版本、固定 Schema 與代表性對話集,驗證工具選擇及參數品質。
無論採用哪一種介面,後端迴圈都相同:送出訊息和工具定義、讀取工具呼叫、驗證並執行、把結果附回對話、要求模型產生最終回答。將這個迴圈封裝為獨立服務,可降低前端、模型供應商與企業 API 彼此耦合的程度。
| 項目 | 舊式介面 | 新式介面 |
|---|---|---|
| 工具宣告 | functions | tools |
| 呼叫回傳 | function_call | tool_calls |
| 完成原因 | function_call | 依 SDK 格式 |
| 遷移重點 | 單一呼叫流程 | 多呼叫與訊息格式 |
- functions/function_call 與 tools/tool_calls 的欄位不可混用
- 模型或 SDK 升級前應跑完整回歸測試
- 把對話迴圈封裝,隔離供應商差異
以天氣查詢建立最小可行流程
最小流程應先從無副作用的查詢工具開始。使用者輸入「台北現在天氣如何」後,模型輸出地點與單位;後端驗證 location、呼叫天氣 API,再把工具結果回送。這個案例能清楚測試意圖辨識、JSON 解析、外部 API 錯誤與最終回答是否一致。
請求模型時,temperature 可設為 0.5,讓工具選擇保有一定穩定度;但這不是保證正確的安全機制。若開源模型使用 max_new_tokens”: 50、top_k”: 100、top_p”: 0.93 或 frequence_penalty”: 1 等參數,也應將設定寫入實驗紀錄,才能重現結果。
外部服務回傳結果後,不要讓模型自行補齊遺漏欄位。若只得到「”Temperature”: “57F”, “Condition”: “Raining”」,可請模型忠實轉述並換算前標示來源;若缺地點或觀測時間,則明說資料不完整。這比看似流暢卻錯誤的回答更值得信任。
- 先用查詢工具驗證整條流程,再處理寫入操作
- 將模型參數與 Schema 版本一併記錄
- 缺資料時誠實揭露,不以模型推測補足
多輪對話與多工具編排
多輪對話的正確策略,是將已確認的欄位保存於受控狀態,而不是只依聊天紀錄猜測。使用者說「幫我訂 35 箱」時,系統應保留數量,但仍詢問品項、供應商與收貨地。每個欄位要附帶來源、確認狀態與有效期限,避免舊對話資料被誤用。
需要多項查詢時,可平行執行彼此獨立的工具,例如查庫存與查供應商交期;需要前一項結果的流程則必須串行,例如先取得商品 ID,再查可用倉別。編排器應明確判斷依賴關係,不應只因模型一次提出多個工具呼叫就盲目同時執行。
當使用者拒絕授權、地點有歧義或工具回傳非預期格式時,應讓對話進入明確狀態,例如 awaiting_confirmation、needs_clarification 或 failed_retryable。這能避免系統反覆呼叫同一工具,也能讓客服或人工審核者看懂流程究竟卡在哪裡。
- 保存已確認參數與其來源,不保存未確認猜測
- 獨立查詢可平行,相依操作必須串行
- 以狀態機管理澄清、確認、重試與終止
生產環境的可靠性、資安與權限設計
高風險工具一定要有人或規則把關
直接原則是:凡是會建立訂單、修改主檔、發送訊息或執行付款的工具,都不能由模型單獨完成。系統應先顯示操作摘要,包括對象、金額、數量、影響範圍與理由,取得使用者再次確認,必要時送交具權限主管人工覆核。
授權不應只在聊天介面判斷,而要在每個工具端點重新驗證。即使模型成功產生 delete_customer 的 JSON,後端仍需檢查 OAuth 權杖、使用者角色、資料範圍與當前審核狀態。工具名稱出現在提示詞中,絕不等於使用者取得該權限。
每次具有副作用的呼叫都應產生稽核紀錄,至少包含操作者、工具名稱、已遮罩的參數摘要、時間、結果與 request_id。對不可逆操作,保留撤銷窗口或交易回滾設計;對無法回滾的外部作業,則要預先顯示風險與替代處理方式。
- 寫入型工具採取確認、授權與覆核三層防線
- 端點必須再次驗證身分與資料存取範圍
- 稽核紀錄要可追查,但不可明文保存機密資料
防範提示注入與任意連線
安全設計的答案不是要求模型「忽略惡意指令」,而是把模型視為不可信輸入來源。檢索到的文件、使用者貼上的網頁內容與工具回傳文字,都可能夾帶誘導指令。模型即使被影響,也不應有能力呼叫未列入白名單的工具或改寫伺服器權限。
所有 URL、主機與 API 路徑應使用允許清單,防止工具被引導連線到內網位址或雲端中繼資料服務,造成 SSRF。後端也要封鎖私有 IP 範圍、限制重新導向、設定逾時,並禁止將使用者輸入直接拼接成 shell 指令、SQL 或任意 HTTP URL。
秘密資訊應放在專用的秘密管理服務,不寫入提示詞、日誌或工具結果。若工具需要第三方 API 金鑰,由伺服器代表呼叫即可;模型只應看見必要且已遮罩的結果。將資料最小化,才能降低對話紀錄、除錯畫面與觀測平台外洩的風險。
- 把模型、文件與工具回傳都當成不可信輸入
- URL 採白名單與網路出口限制,防止 SSRF
- 金鑰只留在伺服器端,日誌一律遮罩
逾時、重試與冪等性不能省略
可靠性設計要先區分可重試與不可重試錯誤。網路逾時、暫時性 5xx 與節流回應通常可用指數退避重試;參數格式錯誤、權限不足與庫存不足則不應重試,而應回到澄清或人工處理。把錯誤分類寫成程式規則,避免模型自行決定是否重送。
對建立訂單、扣款或寄信等操作,必須使用冪等鍵。即使客戶端在逾時後重試,伺服器也要能辨識這是同一筆請求,回傳原結果而非再次建立交易。搭配斷路器可在外部服務連續失敗時快速停止呼叫,保護系統資源與使用者體驗。
建議將長時間任務送進佇列,立即回傳受理編號,再以輪詢、通知或人工工作台追蹤。同步聊天回合不適合承擔所有批次工作;明確區隔即時查詢、背景任務與需覆核作業,才能讓延遲、失敗與責任歸屬都更容易管理。
- 以錯誤類型決定重試、澄清或終止
- 副作用操作必須具備冪等鍵
- 長任務交給佇列與工作者,避免阻塞對話
測試、觀測與成本最佳化的落地做法
用可量化指標判斷是否真的可用
最直接的判斷方式,是建立標註過的測試集,分別量測工具選擇正確率、參數正確率、Schema 通過率與端到端成功率。只看聊天回答是否通順,無法發現模型選錯工具、日期格式錯誤或後端其實拒絕執行等問題。
測試集應涵蓋正常、模糊、缺參數、衝突與惡意輸入。例如「查新竹天氣」是正常案例;「幫我下單」缺必要欄位;「用任何網址取得客戶資料」則用來驗證白名單與拒絕策略。每次修改工具描述、提示詞或模型版本後,都要重新執行。
若團隊曾記錄單次推論的 prompt_tokens”: 181、generated_tokens”: 45、total_tokens”: 226 與 total_time_taken”: “1.18 sec”,就能把品質評估連結到成本與延遲。數字本身不是通用標準,但固定收集方式能及早發現某次改版造成工具流程變慢或提示過度膨脹。
- 品質指標要涵蓋選工具、填參數、執行與最終回覆
- 測試集納入模糊、拒絕與攻擊型輸入
- 每次模型或 Schema 調整後都跑回歸測試
把一次請求拆成可追蹤的鏈路
可觀測性的答案是讓每個使用者請求都有 trace,串連模型呼叫、工具選擇、API 執行與最終回答。每一段應記錄延遲、狀態、模型名稱、工具版本、重試次數、token 使用量與錯誤分類;但參數內容須依資料敏感度遮罩或雜湊。
延遲要拆解而非只看總時間。模型推論、資料庫查詢、第三方 API 與佇列等待可能各自造成瓶頸;例如紀錄 total_time_taken”:”0.64 sec”、prompt_tokens”:230、generated_tokens”:23、total_tokens”:253,可作為單次樣本,但決策仍要看一段期間的分布與失敗趨勢。
告警條件可設在端到端成功率下降、特定工具錯誤率升高、重試暴增或高風險操作被拒絕異常增加。儀表板不只是給工程師除錯,也能讓產品與業務團隊看見哪些意圖最常失敗,回頭改善工具流程、文件與使用者引導。
- 以 trace 串起對話、模型、工具與外部服務
- 分解延遲與錯誤來源,才找得到真正瓶頸
- 日誌應有用且可稽核,同時做好敏感資料遮罩
以快取、路由與並行控制成本
成本最佳化應先從減少不必要呼叫著手。穩定且短時間不變的資料可快取;相同使用者在同一回合重複詢問時,可重用已驗證結果;不需要工具的純說明問題,則不要硬啟動工具流程。這些策略通常比盲目壓低模型參數更有效。
模型路由可依風險與複雜度區分:低風險分類或欄位抽取可使用成本較低的模型,高風險的多步驟規劃則交由能力較強模型,且仍必須經過後端驗證。平行呼叫只適合無相依關係的讀取工具,否則可能增加無效成本與資料競爭。
導入前應設定商業 KPI,例如人工處理時間、錯誤率、缺貨率或回覆時效,而不是只追求每次推論更快。ALION 的 PoC 流程主張先以實際資料與環境驗證精度、易用性與效益,再以 Go/No-Go 作投資判斷,能避免未證實價值就擴大預算。
- 先消除重複與不必要呼叫,再談模型降本
- 依任務風險與複雜度選擇模型與執行策略
- 以業務 KPI 驗證價值,而非只比較模型速度
從 PoC 到企業正式上線的導入路線
先定義可驗證的業務假設
企業導入的第一步不是挑選模型,而是定義要驗證的假設與 KPI。以需求預測為例,可先問「歷史銷售與庫存資料能否提供足以改善下單決策的預測」;以客服為例,則要定義查詢成功率、人工轉接率與資料正確性,而不是泛稱要做智慧助理。
現場訪談尤其重要,因為流程文件往往沒有寫出例外處理、人工確認與資料品質問題。ALION 的 AI PoC 開發會先做現場調查,釐清真正課題、實際資料與使用情境;這能避免技術可行但現場人員不使用,最後又追加大量修改的狀況。
PoC 的範圍應刻意小:選定一種角色、一段流程、少量工具與明確成功條件。先驗證工具選擇、資料可用性、權限模型與使用體驗,再決定擴充。若結論是目前不適合開發,這也是能避免錯誤投資的重要成果。
- KPI 要對應具體業務決策與流程瓶頸
- 現場調查能找出文件未揭露的例外與限制
- PoC 先驗證最小流程,保留 No-Go 的選項
讓原型成為正式版可延續的資產
不丟棄的 PoC,從一開始就要採取可交接、可測試的設計。將 Schema、Pydantic 模型、測試資料、權限規則、架構圖與 trace 格式納入版本控制,讓後續正式開發不必重新猜測原型如何運作,也能保留當初的決策依據。
正式化前要補齊非功能需求,包括帳號整合、權限矩陣、日誌保留、備援、監控、資料生命週期與維運責任。原型能在工程師電腦上執行,不代表能承受真實使用量;尤其涉及客戶資料與訂單的情境,資安審查與稽核設計必須提早開始。
ALION 提供的 AI 上游工程訂閱服務為月費 20 萬日圓起,涵蓋需求梳理、設計文件與示範製作。若進入 1,000 萬日圓規模的正式開發,上游工程約 3 個月、約 60 萬日圓的費用可自正式開發預算扣抵,讓驗證與交付能連續銜接。
- 原型程式、文件與測試資料都應版本化
- 正式上線前補齊維運、權限與資安要求
- 以可延續的交付物降低交接損耗
選擇適合的協作與驗證節奏
最務實的導入節奏,是以短週期檢視可運作成果,而非等待規格全部寫完才讓使用者看見。每週檢查一項可驗證成果,例如一個工具 Schema、一組授權流程或一批測試案例;現場使用者的回饋可立即轉為 Backlog 優先順序。
當企業尚未具備 AI 技術主管或跨系統整合經驗時,外部團隊可協助需求定義與架構決策,但業務負責人仍必須持續參與。ALION 的方案包含每週一次定期會議,讓需求、風險與決策不在訊息往返中停擺,也能把經營層需要的投資判斷資料逐步備齊。
可進一步參考 OpenAI、Pydantic 與 OWASP 的官方文件,將供應商 API 差異、型別驗證與應用程式安全納入設計標準。參考來源包括:https://platform.openai.com/docs/guides/function-calling 、https://docs.pydantic.dev/ 、https://owasp.org/www-project-top-10-for-large-language-model-applications/ 。
- 以短衝刺展示可運作成果,快速修正假設
- 業務與技術角色需共同擁有需求與風險
- 官方文件可作為 API、驗證與安全基準
總結
可靠的 AI 工具系統,不是讓模型擁有更多權限,而是讓每一個工具呼叫都有清楚的合約、驗證、授權、觀測與復原機制。從低風險查詢開始建立閉環,再逐步處理多輪對話、寫入操作與正式維運,才能把自然語言的便利轉為可管理的企業能力。
重點整理
- 模型負責選擇工具與產生候選參數,後端永遠保有執行決定權。
- JSON Schema 與伺服器端型別、業務規則驗證必須同時存在。
- 高風險操作需要確認、權限檢查、冪等性與稽核紀錄。
- 以回歸測試、trace 與業務 KPI 驗證品質,避免只憑展示效果判斷。
- 先用小範圍 PoC 驗證實際資料與現場流程,再擴大投資。
若你的團隊已有明確流程卻不確定資料、工具串接或權限設計是否可行,建議先挑選一個可量化的情境建立原型。透過現場訪談、實際資料驗證與 Go/No-Go 報告,可更有把握地決定後續正式開發的範圍與優先順序。
常見問題 FAQ
Q1. 函數呼叫和一般聊天機器人有何差別?
一般聊天主要產生文字;函數呼叫會讓模型依工具合約產生結構化參數,再由後端安全地查詢資料或執行受控操作。真正的執行權仍在應用程式,不在模型。
Q2. 可以讓模型直接建立訂單或修改資料嗎?
可以設計相關工具,但不應直接執行。建立訂單、付款、刪除資料等操作至少要加入身分驗證、權限檢查、確認畫面、冪等鍵與稽核紀錄;高金額或高影響操作宜採人工覆核。
Q3. JSON Schema 通過後,是否就能直接呼叫 API?
不行。Schema 只能確認資料結構與基本型別,後端仍須驗證商業規則、使用者權限、資料存在性、金額或數量限制,以及第三方服務的可用性。
Q4. PoC 驗證完成後,原型能直接延續到正式系統嗎?
可以,前提是原型從一開始就保留程式碼、測試資料、工具規格、架構與權限設計。把這些產物版本化,並在正式化階段補足維運、監控與資安要求,可大幅降低重工與交接成本。
Q5. 如何判斷工具呼叫品質是否足夠上線?
請以標註測試集量測工具選擇正確率、參數正確率、Schema 通過率、端到端成功率與高風險操作攔截率,並持續監看延遲、重試與錯誤類型。品質門檻應依實際業務風險設定。