在這個流程中,如果我收到媒體 URL,我會從 URL 下載圖像並將其作為數據發送給 AI 模型。
如果沒有媒體,另一個分支就會啟動。數據不存在。
我如何告訴模型在數據存在時使用它,如果不存在則忽略它?
在這個流程中,如果我收到媒體 URL,我會從 URL 下載圖像並將其作為數據發送給 AI 模型。
如果沒有媒體,另一個分支就會啟動。數據不存在。
我如何告訴模型在數據存在時使用它,如果不存在則忽略它?
如果false分支沒有數據,AI節點可能會失敗。您需要2條不同的消息。看起來會是這樣
歡迎 @Yash_Ganthe 加入我們的社群!我是 Jay,也是一位 n8n 認證創作者。
使用程式碼節點的方法是這裡較簡潔的做法。在 false 分支中,使用程式碼節點來移除二進位資料,然後再進行合併:
return $input.all().map(item => ({
json: item.json,
binary: {}
}));
然後合併兩個分支,並將組合後的輸出傳入單一 AI 節點 - 在無媒體路徑上,模型只會收到一個空的二進位物件,它可以順利處理而不會出現錯誤。
如上所示進行了更改。合併已配置為附加輸入。如果其中一個輸入缺失,沒有選項可以選擇另一個輸入。
合併節點輸出:
[
{
"text": "Test15",
"media_url": ""
}
]
二進位值似乎為空。
LLM 節點給出錯誤:
第一個參數必須是字符串類型或 Buffer、ArrayBuffer、Array 或類似 Array 的物件的實例。收到 undefined
節點配置如下:
問題在於傳遞 binary: {} 仍然會在項目上留下 binary 鍵,而 LLM 節點會嘗試從中讀取 data 欄位 - 這是未定義的。修復方法是在沒有檔案時完全移除 binary 鍵:
return $input.all().map(item => {
const result = { json: item.json };
if (item.binary && Object.keys(item.binary).length > 0) {
result.binary = item.binary;
}
return result;
});
這樣,沒有檔案的項目就完全不會有 binary 屬性,所以 LLM 節點不會嘗試從中讀取。
LLM 現在出現錯誤訊息:
此操作預期節點的輸入資料應包含二進位檔案「data」,但找不到 [項目 0]
@Yash_Ganthe 用這個工作流試試看,100% 可以用。
仍然是相同的錯誤。請注意,data 預期是二進制數據,不是陣列。
此操作期望節點的輸入數據包含一個二進制文件 ‘data’,但找不到 [item 0]
@Yash_Ganthe 這個錯誤是因為節點仍然在期望 item 上有一個名為 data 的 binary 屬性,即使你在 false 分支上。在 false 路徑上新增一個 Code 節點(在進入 AI 模型之前),使用以下程式碼:
for (const item of $input.all()) {
item.binary = {};
}
return $input.all();
這個程式碼會明確地將 binary 設定為一個空物件,這樣可以告訴下遊節點沒有 binary 資料可用,而不是留下未定義的狀態。區別在於:使用 undefined 會觸發「找不到 binary」的錯誤,而使用空 {} 則可以順利通過。
The binary is expected to have a data property which is expected to be empty in the False branch.
item.binary = { data:{} };
Added this. Still the same error.
該項目沒有二進位欄位「data」[項目 0]
檢查您指定輸入二進位欄位名稱的參數是否正確,以及它是否與二進位輸入中的欄位相符。
當我將二進位設定為空時,我會收到此錯誤。
我所需要的只是一種方式,可以在輸入中未傳送任何影像時,讓模型的輸入作為空檔案。
請使用下方的 JSON,它會正常運作。只是要提醒一下,我是 n8n Creator,已經建立過許多類似的工作流程,所以你可以放心使用這個方法。
你需要將 AI Agent 與 OpenAI Chat Model 節點搭配使用,這樣該功能才能正確運作(在有檔案時傳送檔案,在檔案缺失時將其視為沒有檔案)。我已經測試過這個設定,在我的工作流程中運作得完全沒有問題。
The Aggregate node removes the binary data that has come from the Download node. Due to this, the Agent node does not receive the binary data.
If I remove the Aggregate node and connect the Merge to the Agent, the JSON data reaches the Agent twice as 2 items. Is there a way to retain the binary data?
簡短版本:不要試著讓一個節點「可選擇性地」接收影像 — 那是讓你卡關的地方。既然你已經有了兩個分支,就把它們分開一直保持到模型:
• 如果你使用的是內建 AI/模型節點:在每個分支上放一個模型節點 — 媒體分支設定為二進位影像輸入,無媒體分支設定為純文字 — 如果需要重新合併,在模型後面使用 Merge。
• 如果你透過 HTTP Request 節點呼叫模型:根據分支構建請求本文 — 媒體分支包含影像部分 (base64),無媒體分支傳送純文字本文。(你可以在一個節點中使用表達式,只在二進位存在時才新增影像區塊,但兩個節點更容易閱讀。)
要避免的是在模型之前合併兩個分支 — 它會在空二進位項目上拋出錯誤,而且 Merge 往往會丟棄二進位資料。歡迎加入社群 ![]()
I did it in a simpler way. The image received from Whatsapp is successfully uploaded to Google drive. However, the Agent is not able to access it. I have kept the drive images in a public folder and have tried accessing them successfully from other browsers.