工具白名單與執行約束:Schema 是契約,驗證在程式
依教案「六、Function Calling 與資料契約」整理
| 工具 | 主要參數 | 回傳 |
get_customer | customerId | 客戶 DTO 或 not_found |
search_customers | companyName/country 至少一項;page、pageSize | 候選客戶、總筆數、分頁 |
get_customer_orders | customerId、page、pageSize、選用日期範圍 | 訂單主檔列表與總筆數 |
get_order | orderId | 單筆訂單或 not_found |
教案附的 get_customer_orders Schema 範例:
"parameters": {
"type": "object",
"properties": {
"customerId": { "type": "string", "pattern": "^[A-Z]{5}$" },
"page": { "type": "integer", "minimum": 1 },
"pageSize": { "type": "integer", "minimum": 1, "maximum": 50 }
},
"required": ["customerId", "page", "pageSize"],
"additionalProperties": false
}
執行約束:
- 每輪最多 4 個工具呼叫、最多 3 次規劃迭代,到上限就停止並提示縮小問題。
- 不接受工具名稱對應任意反射方法、任意 SQL、任意表名或欄名。
- 模型產生的使用者 ID、角色、權限不作為授權依據。
- 日期、分頁與單次上限由後端檢查,不接受省略條件後全表讀取。
- not_found、validation_error、service_unavailable 分開處理;同一輪重複的工具與參數可去重,防止迴圈與重複收費。
資料語意:「最近五筆」定義為資料內依日期排序的最近五筆;「今年」要有實際資料才可能查到,空結果不可補造;ShippedDate 為 NULL 顯示「尚無出貨日期」,不能推論「逾期」;金額若要算,要用 [Order Details] 的單價、數量與折扣,不能拿 Freight 當訂單總額。
一句話記住:五碼大寫字母是本課程資料集的輸入規則,C# 仍要自己驗證格式與可見範圍,不能只靠正規表示式判斷客戶存在。
來源:Northwind 18 小時教案 六-1~六-4