Ich betreibe einen WhatsApp-Bot auf AI Agent (Tools Agent) + OpenAI Chat Model Node (gpt-4-1-mini, Responses API aktiviert, File Search Built-in Tool für RAG) + Postgres Chat Memory + 3 Custom Tools (Call n8n Workflow Tool Type).
Mein System Prompt ist ziemlich groß (~8-9k Tokens, hauptsächlich statische Anweisungen und Referenzbeispiele), daher hätte ich mit einer guten Prompt Caching-Quote rechnen können, da sich dieser Inhalt zwischen den Anfragen nicht ändert. Ich habe das OpenAI-Nutzungs-Dashboard überprüft und die Cache-Hit-Rate liegt bei etwa 2%.
Ich habe die rohe Input-Payload aus den Ausführungsdaten des OpenAI Chat Model Nodes gezogen und die Ursache gefunden: Der gesamte System Prompt, der dynamische Conversation Context Block (Kundenname, Session-Status, Arbeitszeiten usw.) und die vollständige History aller Human/AI-Turns werden alle in einen einzelnen „System: …" String zusammengefasst, bevor sie an die API gesendet werden, anstatt sie als strukturiertes Messages-Array mit separaten, rollengetagten Objekten (system / human / ai / tool) zu übergeben.
Da der dynamische Context Block zwischen den statischen Anweisungen und den eigentlichen Conversation Turns sitzt und sich dieser Block bei jeder einzelnen Anfrage ändert, bricht der Präfix-Match für alles, was folgt, zusammen — daher funktioniert Caching nie, obwohl sich der Großteil des Prompts (die statischen Anweisungen) nie ändert.
Soweit ich LangChain’s AgentExecutor verstehe, konvertiert der Memory Wrapper die History standardmäßig zu einem String, es sei denn, return_messages=True ist explizit gesetzt, und der Prompt sollte idealerweise ein ChatPromptTemplate mit einem MessagesPlaceholder verwenden, um History als eigentliche Message-Objekte beizubehalten. Ich sehe keine dieser beiden Optionen als konfigurierbar irgendwo in der UI des AI Agent Nodes.
Frage: Gibt es einen unterstützten Weg (versteckte Expression, Node-Einstellung oder andere Memory Node-Konfiguration), um den integrierten AI Agent Node dazu zu bringen, Chat-History als strukturiertes Array anstelle eines in den System Prompt String zusammengefassten Strings zu übergeben? Oder ist dies eine bekannte Einschränkung der aktuellen Tools Agent-Implementierung?