描述問題/錯誤/問題
我發現了一個工具呼叫的問題,當代理在流程中使用時會產生空的工具呼叫。
流程設定:排程觸發節點 → AI 代理(使用 openrouter + 工具)→ 合併節點(及其他已測試的節點)
當使用「執行步驟」按鈕執行 AI 代理時,工具運作完美,但當執行節點作為流程的一部分(包括實際運作的流程)時,工具呼叫會失敗並無聲地完成(它們在 UI 中似乎甚至沒有被代理使用,但它們在日誌中顯示為空呼叫)。有時它們顯示為空,有時顯示在 AI 代理的輸入內。
注意:
- 已測試各種模型,我確保它們有足夠的代幣上下文長度。我在至少 6 個不同成本的不同工具支援模型中發現了此問題。
- 已測試各種工具(brave 搜尋、gmail、http 節點),全部都以相同方式失敗
有人有修復此問題的經驗,或者這是一個錯誤?
錯誤訊息是什麼(如果有的話)?
沒有錯誤訊息,但當作為流程的一部分執行時,工具呼叫會返回空值
請分享您的工作流程
正確:使用「執行步驟」按鈕
工具呼叫運作良好,輸入和輸出都很正常。節點 UI(未顯示)也亮起綠色並顯示勾號
有缺陷:從流程內
運行時的工具不會出現在日誌中,但神奇地出現在最後,但它們是空呼叫,似乎會做一些事情,例如將工具呼叫注入到輸入中。
AI 輸入中的工具呼叫範例

在 UI 中顯示工具失敗的範例,顯示日誌中有工具呼叫但 UI 中沒有
使用「執行步驟」時工具正確運作的範例
相關問題:Tool calling bug for agents using OpenRouter (various models) · Issue #29758 · n8n-io/n8n · GitHub
(在畫布上選擇節點,然後使用鍵盤快捷鍵 CMD+C/CTRL+C 和 CMD+V/CTRL+V 複製和貼上工作流程。)
分享最後一個節點返回的輸出
失敗時的範例
[ { "response": { "generations": [ [ { "text": "抱歉,我無法在我可以存取的電子郵件中找到任何相關資訊。有其他我可以幫助您的事情嗎?", "generationInfo": { "finish_reason": "stop" } } ] ] }, "tokenUsage": { "completionTokens": 31, "promptTokens": 607, "totalTokens": 638 } } ]
關於您的 n8n 設定的資訊
這是預期行為。並非所有 AI 模型都能可靠地使用工具呼叫。
你使用的是什麼模型?
宣告工具呼叫架構可能會提高工具呼叫的可靠性。
你需要試錯
n8n AI 團隊已經識別了這個問題,相關的 GitHub issue 已標記為 status:in-linear 和 team:ai,這表示該問題目前正在處理中。
問題與 AI Agent 節點在逐步執行與作為完整工作流程的一部分執行時與上下文的交互方式有關。當作為工作流程的一部分執行時,OpenRouter 輸入上下文觸發器要麼在工具調用架構中被忽略,要麼被直接嵌入到提示中,導致無法執行任何函數調用。這不是 OpenRouter 特定的問題,而是因為 n8n 在生產執行期間的請求方式所導致的。
目前唯一一致的解決方案是不要直接在生產環境中將 AI Agent 鏈接到其他節點,使用簡單的觸發器 → agent → 輸出設置進行測試以隔離它,並持續關注 GitHub issue 中的修復進展:
你是在使用 n8n Cloud,還是自己用 docker 進行自託管?調試信息顯示你正在使用 docker (cloud) 版本 2.18.7,我只是確認一下,因為修復可能會在補丁版本中發布,了解何時執行更新會很有用。
嗨 Miliaga,感謝你的回覆!目前我會嘗試用另一種方式解析信息作為臨時解決方案。
我在使用 n8n Cloud,我會持續關注更新。
@ChrisA 在修復發佈之前的快速解決方案:將 OpenRouter Chat Model 替換為 OpenAI Chat Model 節點。在 OpenAI 認證中,將 Base URL 設定為 https://openrouter.io/api/v1 並貼上您的 OpenRouter 金鑰。模型名稱 = 您的 slug(例如 anthropic/claude-3.5-sonnet),然後將其重新連接到代理。透過 n8n 的 OpenAI 路徑,可以略過導致當代理從觸發器而不是執行步驟啟動時產生空的 finish_reason: stop 呼叫的架構錯誤。
很棒的話題,@ChrisA!很高興 n8n 團隊已經在追蹤這個問題。
為了補充一些背景說明,說明為什麼會發生這種情況:「執行步驟」和完整流程執行之間的差異源自於執行上下文的建構方式。當你透過「執行步驟」觸發時,n8n 會為該節點構建一個新的上下文。但在完整流程中,來自排程觸發器的上游上下文會被傳遞,而 OpenRouter Chat Model 節點的結構描述處理在該情況下無法正確處理 finish_reason: stop 信號,導致代理完全跳過工具呼叫。
@achamm 的解決方案完全正確 - 使用基底 URL 指向 OpenRouter 的 OpenAI Chat Model 節點目前是最可靠的修復方式,因為它使用 n8n 原生的 OpenAI 程式碼路徑,能正確處理結構描述。
在等待官方修復期間,還有幾件值得嘗試的事:
- 切換到直接在 OpenRouter 上託管的模型,但已知其 tool_call 結構描述與 OpenAI 相容(如透過 OpenRouter 的
openai/gpt-4o-mini),以縮小範圍並檢查是否為模型特定的結構描述差異
- 嘗試將 AI Agent 節點包裝在自己的子工作流程中,並使用手動觸發器來排除任何上游上下文洩露
希望修補程式能盡快在 n8n Cloud 上發布!