Étapes du pipeline
La génération passe par 14 étapes fixes, de l'entrée utilisateur à l'enregistrement du message, et chaque hook de plugin suit les mêmes règles de priorité, délai, annulation, permissions et isolation des erreurs.
L'Ordre des Étapes
L'ordre est fixe et identique pour chaque génération :
Entrée utilisateur
→ Macros
→ Données personnage/persona
→ Lorebook
→ Mémoire/RAG
→ Comptage de jetons
→ Décalage de contexte
→ Intercepteurs de plugins
→ Rendu du format d'instruction
→ Sérialisation du fournisseur
→ Requête
→ Réponse en streaming
→ Hooks de post-traitement
→ Enregistrement du message
Étape par Étape
- Entrée utilisateur — le message brouillon et les options de génération de cette requête sont capturés.
- Macros —
{{user}},{{char}}et les variables personnalisées sont résolues parreplaceMacros. Les macros inconnues sont laissées telles quelles. - Données personnage/persona — les champs de la fiche de personnage et le persona actif sont assemblés dans le tableau de messages.
- Lorebook — les entrées de lorebook correspondantes sont insérées selon leurs règles d'activation. Les entrées marquées requises sont protégées contre la suppression.
- Mémoire/RAG — les blocs de mémoire et de rappel vectoriel sont récupérés et classés.
- Comptage de jetons — le profil de tokeniseur local compte le contexte assemblé.
- Décalage de contexte — le contexte est ajusté au budget de jetons. Consultez Décalage de contexte.
- Intercepteurs de plugins — les plugins peuvent inspecter et modifier le tableau de messages. Après le dernier intercepteur, le pipeline recompte les jetons et réapplique le budget, donc aucun plugin ne peut le contourner.
- Rendu du format d'instruction — le tableau de messages propre est rendu dans le format d'instruction sélectionné, ou conservé structuré. Consultez Formats d'instruction.
- Sérialisation du fournisseur — l'adaptateur construit la requête de fournisseur : les adaptateurs de chat reçoivent le tableau de messages structuré, les adaptateurs de texte la chaîne de prompt rendue.
- Requête — la requête est envoyée avec un
AbortSignal, des délais et une gestion de déconnexion client. - Réponse en streaming — la réponse est diffusée via SSE. Un
assistantPrefillfacultatif est préfixé exactement une fois au premier delta. - Hooks de post-traitement — les plugins peuvent traiter la réponse diffusée avant qu'elle ne soit enregistrée.
- Enregistrement du message — le message final, ses variantes et les métadonnées de génération sont enregistrés dans une seule transaction.
Règles des Hooks
Chaque hook de plugin est défini par le même contrat :
- Ordre et priorité — les hooks s'exécutent par ordre de priorité ; les priorités égales sont ordonnées de façon déterministe.
- Délai — chaque hook a un délai. Un hook qui le dépasse est abandonné.
- Annulation — les hooks reçoivent l'
AbortSignalde la génération et doivent arrêter de travailler quand il se déclenche. - Permissions — un hook ne s'exécute que si le plugin détient les permissions que ses capacités déclarées exigent.
- Isolation des exceptions — une erreur dans le hook d'un plugin est attrapée, journalisée et ignorée. Le pipeline continue ; un intercepteur cassé ne doit jamais casser silencieusement toute la génération.
- Journal de diagnostic — chaque changement de prompt est enregistré. Le
journal des changements est renvoyé dans les diagnostics de génération et
stocké dans le
metadu message de réponse, donc vous pouvez toujours voir ce qui a réellement été envoyé.
Post-Traitement du Prompt
En mode chat, le tableau de messages peut passer par une étape de
reconstruction facultative avant la sérialisation — le port de l'algorithme
classique mergeMessages. Les modes incluent merge, semi, strict et
single, plus des variantes _tools qui préservent les messages d'outils.
En mode texte cette étape est ignorée, car le rendu d'instruction a déjà
réduit les rôles en une seule chaîne.
Voir Aussi
- Décalage de contexte pour savoir comment le budget est appliqué.
- Tokenisation pour savoir comment fonctionne le comptage de jetons.
- Le Plugin SDK pour les API d'enregistrement des intercepteurs et du post-traitement.