Wie sendet man null-Binärdaten, wenn keine Dateidaten verfügbar sind?

Bei diesem Flow lade ich das Bild von der URL herunter, wenn ich eine Media-URL erhalte, und sende es als Daten an das KI-Modell.

Wenn es keine Media gibt, greift der andere Zweig ein. Die Daten sind nicht vorhanden.

Wie sage ich dem Modell, dass es die Daten verwenden soll, wenn sie vorhanden sind, und sie ignorieren soll, wenn sie nicht vorhanden sind?

2 „Gefällt mir“

Wenn der False-Branch keine Daten hat, kann der AI-Node fehlschlagen. Du brauchst 2 verschiedene Nachrichten. Es sieht ungefähr so aus

Willkommen @Yash_Ganthe in unserer Community! Ich bin Jay und bin ein n8n verified creator.

Der Code-Node-Ansatz ist hier der saubere Weg. Im false-Branch verwendest du einen Code-Node, um Binärdaten vor dem Zusammenführen zu entfernen:

return $input.all().map(item => ({
  json: item.json,
  binary: {}
}));

Merge dann beide Branches und übergib die kombinierte Ausgabe an einen einzelnen AI-Node - das Modell erhält auf dem no-media-Pfad einfach ein leeres Binary-Objekt, das es ohne Fehler verarbeitet.

Habe die Änderungen wie oben dargestellt vorgenommen. Der Merge ist so konfiguriert, dass er die Eingaben zusammenführt. Es gibt keine Option, eine Eingabe auszuwählen, wenn die andere fehlt.

Der Merge-Knoten gibt folgendes aus:

[ 
{
"text": "Test15", 
"media_url": "" 
}
]

Die Binärwerte erscheinen leer.

Der LLM-Knoten gibt den folgenden Fehler aus:

The first argument must be of type string or an instance of Buffer, ArrayBuffer, or Array or an Array-like Object. Received undefined

Der Knoten ist wie folgt konfiguriert:

Das Problem besteht darin, dass das Übergeben von binary: {} den binary-Schlüssel dennoch auf dem Element belässt, und der LLM-Knoten versucht, das Feld data daraus zu lesen – was undefined ist. Die Lösung besteht darin, den binary-Schlüssel vollständig zu entfernen, wenn keine Datei vorhanden ist:

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;
});

Auf diese Weise haben Elemente ohne Datei überhaupt keine binary-Eigenschaft, daher wird der LLM-Knoten nicht versuchen, daraus zu lesen.

Das LLM gibt jetzt eine Fehlermeldung aus:

This operation expects the node’s input data to contain a binary file ‘data’, but none was found [item 0]

@Yash_Ganthe Versuchen Sie es mit diesem Workflow, er funktioniert zu 100 %.

Immer noch der gleiche Fehler. Beachten Sie, dass data als Binärdatei erwartet wird. Nicht als Array.

Diese Operation erwartet, dass die Eingabedaten des Knotens eine Binärdatei ‘data’ enthalten, aber keine wurde gefunden [item 0]

@Yash_Ganthe der Fehler kommt daher, dass der Node immer noch eine binäre Eigenschaft namens data auf dem Item erwartet, auch wenn du dich im false-Branch befindest. Füge auf dem false-Pfad (bevor es zum AI Model kommt) einen Code Node mit folgendem Code hinzu:

for (const item of $input.all()) {
  item.binary = {};
}
return $input.all();

Dies setzt explizit binary auf ein leeres Objekt, was dem nachgelagerten Node mitteilt, dass keine Binärdaten verfügbar sind, anstatt es als undefined zu belassen. Der Unterschied ist: undefined löst den Fehler „binary not found

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.

**Das Element hat kein Binärfeld „data

Bitte verwenden Sie das folgende JSON, es funktioniert korrekt. Nur eine kleine Anmerkung: Ich bin ein n8n Creator und habe bereits viele ähnliche Workflows erstellt, daher können Sie diesen Ansatz bedenkenlos anwenden.

Sie müssen einen AI Agent zusammen mit dem OpenAI Chat Model Node verwenden, damit diese Funktion korrekt funktioniert (Datei senden, wenn vorhanden, und als keine Datei behandeln, wenn sie fehlt). Ich habe dieses Setup getestet und es funktioniert in meinem Workflow einwandfrei.

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?

Kurzversion: Versuche nicht, einen Knoten das Bild „optional

@Yash_Ganthe Entschuldigung, ich habe vergessen, den Include Binary-Modus einzuschalten. Ich habe es jetzt behoben.

Du kannst meine JSON jetzt nochmal überprüfen. Gerne helfe ich dir! Ich hoffe, das ist die Lösung für dein Problem.

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.