工具集設計:從十個工具到五十個工具的擴展
工具變多之後選錯率會急速上升。這是分層與檢索式工具選擇的做法。
工具數量是 Agent 品質的隱形瓶頸。十個工具時運作良好的系統,加到四十個之後常常開始選錯——因為所有工具描述都塞在同一個提示裡,彼此干擾。
解法有三種,可以組合使用:命名空間分組、階層式選擇、以及工具檢索。
做法一:命名空間分組
# 用前綴表達領域,模型更容易區分
orders.search / orders.cancel / orders.refund_status
inventory.check / inventory.reserve
shipping.track / shipping.estimate
customer.profile / customer.history這是成本最低的改善。前綴讓模型先做粗分類再選具體工具,錯誤率通常能明顯下降。
做法二:階層式選擇
# 第一層只暴露領域選擇器
META_TOOLS = [{
'name': 'use_domain',
'description': '選擇要使用的功能領域,選定後才會展開該領域的具體工具。',
'parameters': {'type': 'object', 'properties': {
'domain': {'enum': ['orders', 'inventory', 'shipping', 'customer'],
'description': 'orders:訂單查詢與異動;inventory:庫存……'}
}}
}]
# 模型選了 orders 之後,第二輪才把 orders.* 的工具放進 tools做法三:工具檢索
工具數量超過五十時,用向量檢索挑出最相關的十個再交給模型。工具描述本身就是被索引的文件。
def select_tools(user_task, all_tools, k=10):
hits = tool_index.search(user_task, top_k=k)
picked = [all_tools[h.name] for h in hits]
# 永遠附上的基本工具
return picked + [all_tools['finish'], all_tools['ask_user']]三種做法的取捨
- 分組:零額外成本,適用所有規模,第一步就該做。
- 階層:多一輪呼叫,但選擇準確;適合領域界線清楚的場景。
- 檢索:延遲最低(不多一輪),但需要維護工具索引,且檢索本身可能漏掉必要工具。
工具集的品質檢查
- 重疊檢查:兩個工具的描述相似度過高時,模型一定會混淆,應該合併或明確區分。
- 覆蓋檢查:用真實任務清單檢查是否有任務缺乏對應工具。
- 使用率檢查:長期零使用的工具應該下架,它們只是在干擾選擇。
# 找出描述過於相似的工具對
embs = {n: embed(t['description']) for n, t in TOOLS.items()}
for a, b in combinations(embs, 2):
sim = cosine(embs[a], embs[b])
if sim > 0.88:
print(f'⚠ {a} 與 {b} 描述相似度 {sim:.2f},模型可能混淆')把「工具選擇正確率」單獨當成一個指標來量。準備一組(任務、應該用哪個工具)的題目,這比整體任務完成率更能定位問題。
訂閱後繼續閱讀全文
本篇為訂閱者專屬內容。訂閱後可取得下列權限:
- 解鎖全部內容權限
- 閱讀不限篇數
- 全站移除廣告
月卡
NT$240
開通 30 天
一次付清,開通 30 天
季卡
NT$620
開通 90 天
一次付清,開通 90 天,每天約 NT$7
年卡
NT$2,160
開通 365 天
一次付清,開通 365 天,每天約 NT$6
一次性付款,付款成功後立即開通,到期自動結束,不會再次扣款,也不需要取消訂閱。
立即訂閱
金額均為新臺幣(TWD),即實際扣款金額,不另收手續費
支援信用卡 · Apple Pay · Google Pay · WebATM · ATM 轉帳
購買須知與退款政策