工具執行器
這是什麼
判斷模型要求的工具應循序或安全並行執行,並依原呼叫順序回傳結果的執行層。
白話解釋
想像一個施工團隊,每個工人都可以同時在不同的牆上敲釘子而不互相干擾,但如果兩個工人同時去拿同一把梯子,其中一個就得等一下。工具執行器就是替模型做出同樣的判斷:獨立的工具請求可以同時執行,而針對同一檔案的兩次編輯則需要排隊依次進行,而不是互相競爭。
為什麼重要
模型一次要求多個工具呼叫時,必須判斷哪些可以並行、哪些必須逐一執行:檔案寫入與網路搜尋可以重疊,但兩次編輯同一檔案就不行。這項判斷能防止多工具對話輪次悄悄破壞狀態或彼此競爭。代理團隊委派也依賴同一執行層,避免並行子代理互相覆蓋變更。
運作方式
執行前,agent/tool_dispatch_helpers.py 的 _should_parallelize_tool_batch 會檢查整批工具呼叫。只要出現固定禁止並行的工具、參數無法解析,或 read_file、write_file、patch 等路徑型呼叫指向重疊路徑,就會強制循序執行;web_search、vision_analyze 等固定唯讀工具則可並行。run_agent.py 的 AIAgent._execute_tool_calls 依判定結果呼叫 agent/tool_executor.py 的 execute_tool_calls_concurrent 或 execute_tool_calls_sequential;並行路徑使用最多 8 個工作執行緒的執行緒池。所有並行結果仍會依模型原始呼叫順序收集後才加入訊息清單,因此模型看到的順序不會改變。
具體範例
Hermes 收到模型一次要求的三個工具呼叫:搜尋新聞標題、搜尋股價,以及以 write_file 保存筆記。_should_parallelize_tool_batch 發現兩項搜尋都是唯讀操作,檔案寫入也沒有與其他路徑衝突,便允許三者在不同執行緒並行;結果仍依原呼叫順序回傳。若模型改為要求兩次 write_file 都寫入 notes.txt,同一檢查便會強制循序執行,避免第二次寫入悄悄覆蓋第一次的結果。
如何連結
「工具執行器」屬於「執行期」系列。最直接相關的概念包括:「對話循環」、「對話輪次終結器」、「個人作業系統」。這些連結描述教學關係,不取代來源證據。
來源證據
agent/tool_executor.py#<file>— 結構性來源;只確認來源檔關聯,不單獨證明特定呼叫順序。
