Décrivez le problème/l’erreur/la question
Un Agent IA (@n8n/n8n-nodes-langchain.agent) utilisant gemini-3-flash-preview avec Postgres Chat Memory et des outils échoue lors de conversations multi-tours : le tour qui effectue des appels d’outils parallèles réussit, mais le tour suivant échoue avec un 400 du modèle, avant l’exécution de tout outil.
Cause racine : lorsque Gemini 3 retourne des appels de fonction parallèles en une seule étape, n8n persiste les messages IA vers Postgres Chat Memory dont les appels de fonction manquent leur thought_signature (le message d’appel unique ré-émis est stocké avec additional_kwargs: {}). Au tour suivant, cet historique est relu, et le nœud Google Vertex Chat Model le rejette avec un 400 (thought_signature manquante).
Ceci est sensible au point de terminaison et semble être une régression :
- Google Vertex Chat Model → 400 au tour suivant un tour d’appels parallèles.
- Google Gemini Chat Model (API consumer) → tolère les mêmes signatures manquantes (pas d’erreur), donc cela masque le bogue.
- Sur une ancienne version de n8n, le même workflow stockait un unique message d’appel d’outil signé par tour et n’échouait jamais ; après la mise à niveau vers 2.25.7, il stocke les appels parallèles sans signatures et le tour suivant 400 sur Vertex.
Étapes de reproduction (déterministes, ~6 nœuds)
- Chat Trigger → AI Agent + Google Vertex Chat Model (
gemini-3-flash-preview) + Postgres Chat Memory + 2 outils Code triviale, avec un message système qui force le modèle à appeler les deux outils en parallèle à chaque tour (workflow ci-dessous). - Tour 1 dans un nouveau chat (par exemple
hi) : l’agent appelle les deux outils en parallèle → réussit. - Tour 2 (même chat, même texte uniquement) : premier appel LLM → 400 avant l’exécution de tout outil.
En utilisant le nœud Google Gemini Chat Model (consumer) à la place, le même workflow s’exécute correctement pendant plusieurs tours — il tolère les signatures manquantes. Donc l’historique malformé est produit indépendamment du point de terminaison ; seul Vertex applique et rejette.
Mes questions
- S’agit-il d’une régression connue dans 2.25.7 dans la façon dont l’Agent IA sérialise les
thought_signatures de Gemini vers la mémoire de chat pour les appels d’outils parallèles (appel ré-émis stocké avecadditional_kwargs: {}) ? - Quelle version de n8n persiste correctement les signatures d’appels parallèles, afin que je puisse la fixer ?
- Y a-t-il une solution de contournement prise en charge autre que le downgrade, l’évitement des appels d’outils parallèles ou la suppression des messages d’appel d’outils de la mémoire entre les tours ?
Quel est le message d’erreur (le cas échéant) ?
Erreur du wrapper n8n sur le nœud Chat Model :
Bad request - please check your parameters
API Google 400 sous-jacente par nœud :
- Nœud Vertex : l’appel de fonction manque une
thought_signature. - Nœud Gemini consumer : tolère les signatures manquantes (pas d’erreur). Il ne 400 qu’avec une
thought_signaturecorrompue si une session mélange les points de terminaison (signature générée par Vertex relu via l’API consumer).
Veuillez partager votre workflow
Reproduction minimale (remplacez YOUR_GCP_PROJECT, ajoutez vos identifiants Vertex sur le nœud du modèle et un identifiant Postgres sur le nœud de mémoire — aucune autre donnée nécessaire) :
Partagez la sortie retournée par le dernier nœud
Le tour qui échoue ne atteint jamais le dernier nœud — le premier appel LLM de l’Agent 400. La cause est visible dans les lignes n8n_chat_histories écrites par le tour précédent (un tour d’appel parallèle montré) :
ai | tool_calls: [tool_a, tool_b] | additional_kwargs.__gemini_function_call_thought_signatures__: { tool_a_id: "<sig>" } // seulement 1 sig pour 2 appels
tool | résultat tool_a
ai | tool_calls: [tool_b] | additional_kwargs: {} // <-- appel ré-émis, PAS DE thought_signature
tool | résultat tool_b
ai | "done"
Avec le nœud Vertex, le tour suivant relisant ceci 400. Avec le nœud Gemini consumer, l’historique identique est stocké mais le tour suivant réussit (les signatures ne sont pas appliquées). Sur la version plus ancienne de n8n, le même tour stockait plutôt un unique message d’appel d’outil consolidé avec sa signature, et les relecures n’échouaient jamais.
Informations sur votre configuration n8n
Version de n8n : 2.25.7 (se reproduit sur n8n Cloud et Docker auto-hébergé 2.25.7 avec le nœud Vertex ; n’a pas reproduit sur une ancienne version auto-hébergée)
Base de données (par défaut : SQLite) : PostgreSQL (Postgres Chat Memory)
Paramètre n8n EXECUTIONS_PROCESS (par défaut : own, main) : par défaut
Exécution de n8n via (Docker, npm, n8n cloud, application de bureau) : n8n Cloud et Docker auto-hébergé
Système d’exploitation : Linux (Docker, VPS) / n8n Cloud

