Français

Templates de prompts

Aide : Démarrage · Histoires · Personnages · Livres de lore · Multijoueur · Découvrir · Avancé · Templates · FAQ


Dream Scrolls utilise Mustache comme moteur de templating pour les prompts. Chaque champ texte transmis à l'IA — le prompt système, le prompt de résumé, les descriptions de personnages, le scénario, les entrées de lore — est rendu par ce moteur avant d'être envoyé au modèle. Vous pouvez utiliser des variables et des blocs logiques directement dans ces champs.


Où les templates sont utilisés

ChampContexte disponible
Prompt système (histoire / preset)Contexte complet — toutes les variables listées ci-dessous
Prompt de résumé (histoire / preset)Contexte complet
Prompt système d'humeur (histoire / preset)Contexte complet, le personnage POV est celui en cours d'évaluation
Prompt système d'état (histoire / preset)Contexte complet, le personnage POV est celui en cours d'évaluation
Scénario (histoire)Contexte de l'histoire (char, presentChars, nonPresentChars)
Note d'auteur (histoire)Contexte de l'histoire (char, presentChars, nonPresentChars)
Description, personnalité, description courte, note d'auteur du personnageContexte du personnage (name uniquement)
Entrées de loreContexte de l'histoire (char, presentChars, nonPresentChars)

Référence des variables

Variables scalaires

VariableDescription
{{scenario}}Le texte du scénario de l'histoire, après son propre rendu de template
{{storyAuthorNote}}La note d'auteur de l'histoire, après son propre rendu de template

Personnage courant (char)

Ces variables ne sont renseignées que lorsque l'IA génère une réponse pour un personnage spécifique (le personnage POV). Elles sont vides lors de la construction du prompt de résumé.

VariableDescription
{{char.name}}Le nom d'affichage du personnage
{{char.id}}L'UUID interne du personnage
{{char.shortDescription}}La description courte du personnage
{{char.description}}La description complète du personnage
{{char.personality}}Le champ personnalité du personnage
{{char.authorNote}}La note d'auteur spécifique à cette histoire pour ce personnage
{{char.mood}}L'humeur actuelle du personnage pour cette histoire, maintenue par l'IA (ou fixée manuellement)
{{char.state}}L'état actuel du personnage pour cette histoire, maintenu par l'IA (ou fixé manuellement)

Dans l'invite système d'humeur/état spécifiquement, {{char.mood}}/{{char.state}} correspondent à la valeur avant cette réévaluation — incluez-la dans votre invite (ex. « Humeur actuelle : {{char.mood}}. Mettez-la à jour selon ce qui vient de se passer. ») pour obtenir une mise à jour incrémentale plutôt qu'une valeur redérivée de zéro à chaque fois.

Listes de personnages

presentChars contient tous les personnages actuellement présents dans l'histoire. nonPresentChars est la même liste sans le personnage POV — utile pour lister « les autres personnages présents dans la scène ».

Chaque élément de ces deux listes expose les mêmes champs que l'objet char : name, id, shortDescription, description, personality, authorNote, mood, state.

{{#presentChars}}
- {{name}} : {{shortDescription}}
{{/presentChars}}
{{#nonPresentChars}}
- {{name}}
{{/nonPresentChars}}

Entrées de lore

Le tableau lore contient uniquement les entrées qui ont passé la recherche vectorielle et tiennent dans le budget de contexte de lore. Utilisez {{hasLore}} pour envelopper conditionnellement le bloc afin qu'aucun titre n'apparaisse quand il n'y a rien à afficher.

VariableDescription
{{hasLore}}true si au moins une entrée de lore a été injectée
{{lore[*].label}}Le titre de l'entrée de lore
{{lore[*].content}}Le texte de l'entrée de lore
{{#hasLore}}
# Connaissances du monde
{{#lore}}
**{{label}}** : {{content}}

{{/lore}}
{{/hasLore}}

Résumés

Le tableau summaries contient les résumés d'événements passés qui tiennent dans le budget de contexte. Comme les entrées de lore, seuls les résumés ne chevauchant pas l'historique de messages bruts sont inclus.

VariableDescription
{{hasSummaries}}true si au moins un résumé a été injecté
{{summaries[*].content}}Le texte du résumé
{{#hasSummaries}}
# Résumé des événements passés
{{#summaries}}
{{content}}

{{/summaries}}
{{/hasSummaries}}

Messages

Le tableau messages est l'historique de conversation filtré selon le budget de contexte, transmis au modèle.

VariableDescription
{{messages[*].role}}user, assistant ou system
{{messages[*].authorName}}Le nom d'affichage de l'auteur
{{messages[*].content}}Le corps du message

Le rendu des messages sous forme de tours avec balises de rôle (voir la section suivante) est le pattern recommandé :

{{#messages}}
<{{role}}{{#authorName}} name="{{authorName}}"{{/authorName}}>{{content}}</{{role}}>
{{/messages}}

Balises de rôle — Structurer le prompt en conversation

Par défaut, l'intégralité du template rendu est envoyée au modèle comme un seul message système. Vous pouvez le découper en plusieurs tours — system, user, et assistant — à l'aide de balises de rôle.

Syntaxe

<system>Vos instructions ici.</system>
<user name="Alice">Ce qu'elle a dit.</user>
<assistant name="Bob">Ce qu'il a répondu.</assistant>
  • L'attribut name est optionnel sur toutes les balises.
  • Les balises de fermeture sont optionnelles — une nouvelle balise ouvrante ferme implicitement le bloc précédent.
  • Tout texte apparaissant avant la première balise ouvrante est traité comme un message système.
  • Les blocs vides (après suppression des espaces) sont ignorés.

Fonctionnement du découpage

Une fois le template Mustache rendu, le moteur parcourt le résultat à la recherche de balises de rôle et produit une liste ordonnée de messages de prompt. Chaque message a un rôle (SYSTEM, USER, ASSISTANT) et, optionnellement, un nom. Cette liste est ensuite transmise au LLM sous forme de conversation multi-tours structurée.

Si le rendu ne contient aucune balise de rôle, l'intégralité du contenu est envoyée comme un seul message système — compatible avec les prompts simples.

Exemple pratique

<system>
Vous incarnez {{char.name}} dans une histoire collaborative.

{{char.name}} : {{char.description}}
</system>
{{#scenario}}
<system>
{{scenario}}
</system>
{{/scenario}}
{{#hasLore}}
<system>
# Connaissances du monde
{{#lore}}
{{label}} : {{content}}

{{/lore}}
</system>
{{/hasLore}}
{{#hasSummaries}}
<system>
# Résumé des événements passés
{{#summaries}}
{{content}}
{{/summaries}}
</system>
{{/hasSummaries}}
{{#messages}}
<{{role}}{{#authorName}} name="{{authorName}}"{{/authorName}}>{{content}}</{{role}}>
{{/messages}}
<system>
[Continuez l'histoire en tant que {{char.name}}. Deux paragraphes maximum.]
</system>

Variables dans les champs de personnage et d'histoire

Les descriptions, personnalités, descriptions courtes et notes d'auteur des personnages sont également passées par Mustache avant d'être injectées dans le prompt. Cependant, seul le nom propre du personnage est disponible dans ces champs :

VariableDisponible dans les champs de personnage
{{name}}Le nom propre du personnage

Dans le scénario et la note d'auteur de l'histoire, le contexte de l'histoire est disponible : {{char}}, {{presentChars}}, {{nonPresentChars}}.

Le texte des entrées de lore est rendu de la même façon avec le contexte de l'histoire avant injection.


Aide-mémoire de la syntaxe Mustache

SyntaxeEffet
{{variable}}Affiche la valeur d'une variable (sans encodage HTML)
{{objet.propriété}}Accède à une propriété imbriquée
{{#bloc}}...{{/bloc}}Affiche le bloc si la valeur est vraie ; itère si c'est une liste
{{^bloc}}...{{/bloc}}Affiche le bloc si la valeur est fausse (section inverse)
{{! commentaire }}Commentaire — non inclus dans la sortie

Dream Scrolls désactive l'encodage des entités HTML par défaut de Mustache. Toutes les valeurs sont affichées telles quelles.


Dépannage

Erreur « Invalid system prompt template » dans le fil de l'histoire Le template n'a pas pu être rendu, généralement à cause d'une erreur de syntaxe (balises {{# / {{/ mal fermées, ou {{ non fermé). Vérifiez votre prompt système à la recherche de fautes de frappe. Le message d'erreur contient une brève description du problème.

Une variable s'affiche vide

  • Les variables {{char.*}} sont vides quand aucun personnage POV n'est défini (ex. dans le prompt de résumé sans contexte de personnage). Utilisez {{#char}}...{{/char}} pour protéger le bloc.
  • {{scenario}} et {{storyAuthorNote}} sont des chaînes vides si les champs correspondants de l'histoire sont vides.

Le bloc lore / résumés apparaît même quand il est vide Enveloppez-le dans {{#hasLore}}...{{/hasLore}} ou {{#hasSummaries}}...{{/hasSummaries}} pour le masquer conditionnellement.

Les balises de rôle ne sont pas découpées Assurez-vous que les noms de balises sont en minuscules (<system>, <user>, <assistant>). Le parseur est insensible à la casse pour les noms de balises, mais la valeur de l'attribut name est utilisée telle quelle.