VIP 專屬 Agent 開發 實戰

工具集設計:從十個工具到五十個工具的擴展

工具變多之後選錯率會急速上升。這是分層與檢索式工具選擇的做法。

Agent 開發教程封面

工具數量是 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']]

三種做法的取捨

  • 分組:零額外成本,適用所有規模,第一步就該做。
  • 階層:多一輪呼叫,但選擇準確;適合領域界線清楚的場景。
  • 檢索:延遲最低(不多一輪),但需要維護工具索引,且檢索本身可能漏掉必要工具。

工具集的品質檢查

  1. 重疊檢查:兩個工具的描述相似度過高時,模型一定會混淆,應該合併或明確區分。
  2. 覆蓋檢查:用真實任務清單檢查是否有任務缺乏對應工具。
  3. 使用率檢查:長期零使用的工具應該下架,它們只是在干擾選擇。
# 找出描述過於相似的工具對
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 轉帳
購買須知與退款政策

延伸閱讀

更多Agent 開發 →