Guide des réglages pour agents mini-me (en langage simple)
Ce guide explique, sans jargon, ce que fait chaque réglage de configuration d'un agent mini-me, pourquoi il existe, quelle est sa valeur par défaut, et comment le régler quand on fait tourner un petit modèle de langage en local (celui qui tient sur ton laptop, pas un modèle géant dans le cloud).
Pourquoi ces réglages existent
Un petit modèle local (quelques milliards de paramètres, tournant sur un CPU/GPU grand public) n'a pas les mêmes défauts qu'un gros modèle cloud :
- il est lent — surtout pour lire un long prompt (le "prompt processing"),
- il a une mémoire (fenêtre de contexte) limitée — souvent 8k à 32k tokens, parfois moins,
- il boucle ou décroche plus facilement (répète la même commande, oublie ce qu'il a déjà lu, part en vrille dans un raisonnement),
- il peut halluciner un résultat de commande qu'il n'a jamais vraiment exécuté.
Les réglages ci-dessous sont les garde-fous qui compensent ça : ils disent à l'agent "arrête-toi si tu es trop lent", "ne garde pas tout en mémoire", "ne tourne pas en rond indéfiniment", "ne renvoie pas un pavé de texte qui bouche ta propre mémoire".
Ils se règlent dans le fichier YAML de l'agent (agent.*.yaml), sous les mêmes noms de clés.
1. contextWindow — la taille de la mémoire du modèle
En clair : c'est la taille de la "mémoire de travail" du modèle, exprimée en tokens (un token ≈ 0,75 mot). Tout ce que l'agent a dit, lu, exécuté doit tenir dans cette mémoire. Quand elle est pleine, il faut faire de la place (voir section context plus bas).
- Valeur par défaut :
0, ce qui veut dire "je ne sais pas, demande au serveur". Si le serveur (llama.cpp, Docker Model Runner...) expose sa taille de contexte configurée, mini-me l'utilise automatiquement. - Comment la régler : en général, ne la fixe pas toi-même si ton serveur peut la communiquer automatiquement — laisse
0. Ne la renseigne à la main que si ton serveur ne la rapporte pas, et mets alors la vraie valeur que tu as configurée côté serveur (ex:-c 8192surllama-server→contextWindow: 8192). - Pour un petit modèle : les petits modèles sont souvent livrés avec une fenêtre annoncée de 32k ou plus, mais en pratique, la qualité se dégrade bien avant d'atteindre cette limite. Mieux vaut connaître la vraie valeur utilisable pour que les calculs de compression du contexte (section 7) soient fiables.
2. firstTokenTimeout — le temps qu'on laisse au modèle pour commencer à répondre
En clair : avant même que le modèle produise son premier mot, le serveur doit lire tout le prompt (la question + l'historique + les instructions). Sur un petit modèle local, lire un prompt de 20-30k tokens peut prendre plusieurs minutes. Ce réglage dit : "j'attends jusqu'à combien de temps avant de considérer que ça a planté ?"
- Valeur par défaut :
3 minutes. - Particularité : si le serveur (llama.cpp) donne des nouvelles de sa progression de lecture pendant ce temps, le chronomètre est remis à zéro à chaque nouvelle. Donc en pratique, tant que le serveur progresse, ça ne coupera pas — ce timeout protège surtout contre un vrai blocage silencieux.
- Comment la régler :
- Modèle petit (≤ 8B) avec un bon GPU : la valeur par défaut (3 min) suffit généralement.
- Modèle plus gros (15-30B) ou machine modeste (CPU seul, peu de VRAM), ou prompts très longs (gros
AGENTS.md, beaucoup d'historique) : monte à5mvoire10m. - Règle d'or : jamais plus court que
watchdogTimeout(voir juste après) — sinon la protection n'a pas de sens.
3. watchdogTimeout — le chien de garde pendant que le modèle génère
En clair : une fois que le modèle a commencé à répondre (ou à utiliser un outil), ce réglage surveille qu'il continue à produire quelque chose régulièrement. S'il reste silencieux plus longtemps que cette durée sans rien produire de nouveau, mini-me considère que la connexion est bloquée et coupe.
- Valeur par défaut :
20 secondes. - Différence avec
firstTokenTimeout:firstTokenTimeoutsurveille le démarrage (lecture du prompt),watchdogTimeoutsurveille la suite (génération token par token, ou l'exécution d'un outil). C'est pour ça quewatchdogTimeoutest beaucoup plus court. - Comment la régler :
- Si l'agent a accès à l'outil
bashet que des commandes peuvent légitimement prendre du temps (build, tests, téléchargements), monte ce timeout en même temps quebashTimeout: pendant qu'une commande bash tourne, le chien de garde continue de compter, donc sibashTimeoutvaut2m,watchdogTimeoutdoit valoir au moins2maussi, sinon mini-me couperait la commande avant qu'elle finisse. - Pour un usage "chat" simple sans gros outils : la valeur par défaut convient très bien, y compris sur un petit modèle lent (c'est la génération token-par-token qui compte, pas la vitesse globale).
- Si l'agent a accès à l'outil
4. bashTimeout — combien de temps une commande shell a le droit de tourner
En clair : quand l'agent exécute une commande (bash), c'est le temps maximum avant que mini-me la tue de force, même si elle n'a rien renvoyé.
- Valeur par défaut :
30 secondes. - Comment la régler :
- Tâches rapides (lire un fichier,
git status,ls) : le défaut de 30s est largement suffisant. - Tâches lourdes attendues (compilation, tests, installation de dépendances, longue recherche) : augmente franchement, par exemple
2m,5m, voire plus selon le projet. - Toujours augmenter
watchdogTimeouten même temps (voir section 3) — c'est le piège le plus courant : une commande se fait tuer par le chien de garde alors quebashTimeoutlui laissait le temps. - Ce réglage ne dépend pas vraiment de la taille du modèle, mais du type de projet sur lequel l'agent travaille.
- Tâches rapides (lire un fichier,
5. maxTurns — combien d'allers-retours modèle ↔ outils sont autorisés pour une seule question
En clair : pour répondre à une question, l'agent peut faire plusieurs tours : "je lance une commande" → "je regarde le résultat" → "j'en lance une autre" → etc. Ce réglage plafonne le nombre de ces tours avant que mini-me arrête l'agent (pour éviter qu'il boucle à l'infini).
- Valeur par défaut :
10. - Valeur réellement utilisée dans les configurations livrées :
40— l'expérience montre que 10 est souvent trop bas pour des tâches de code réalistes avec un petit modèle, qui a besoin de plus d'itérations (relire, corriger, retenter) qu'un gros modèle. - Comment la régler :
- Tâche étroite, une seule action attendue (répondre à une question factuelle, un seul appel d'outil) :
8à15suffit, et ça protège mieux contre les boucles. - Agent de développement généraliste (explorer du code, éditer, tester) :
40à60est raisonnable, surtout avec un petit modèle qui a besoin de plusieurs essais. - Plus le modèle est petit/faible, plus il risque de boucler sans jamais conclure — associe un
maxTurnsgénéreux à une bonne détection de boucle plutôt que de mettre une valeur énorme "au cas où".
- Tâche étroite, une seule action attendue (répondre à une question factuelle, un seul appel d'outil) :
6. maxOutput — la taille maximale de ce qu'un outil peut renvoyer au modèle
En clair : si une commande bash renvoie 500 000 caractères (un gros fichier de log, par exemple), on ne veut pas que ça remplisse d'un coup toute la mémoire du modèle. Ce réglage tronque le résultat avant de le montrer au modèle.
- Valeur par défaut :
16000caractères. - Comment ça tronque : pas juste en coupant à la fin — mini-me garde le début du résultat et jusqu'à 2000 caractères de la fin, car souvent l'information utile (erreur, résumé) est à la fin d'une sortie longue.
- Comment la régler :
- Petit modèle à fenêtre de contexte réduite (8k-16k tokens) : baisse cette valeur, par exemple
4000à8000, pour qu'une seule commande ne consomme pas un tiers de la mémoire disponible. - Modèle avec une grande fenêtre de contexte, ou agent qui a vraiment besoin de voir des sorties complètes (ex: analyser un gros diff) : tu peux monter à
20000-30000, mais garde en tête que chaque sortie "coûte" en tokens et accélère le moment où la compression du contexte (section 7) se déclenche.
- Petit modèle à fenêtre de contexte réduite (8k-16k tokens) : baisse cette valeur, par exemple
7. agentsMd — comment l'agent lit ses instructions de projet
En clair : AGENTS.md (ou équivalent) contient les instructions propres au projet que l'agent doit suivre. Ce bloc de réglages contrôle si/comment ce fichier est chargé.
agentsMd:
enabled: true
path: "AGENTS.md"
maxChars: 0
enabled— défaut :true. Active la lecture automatique du fichier.path— défaut :"AGENTS.md". Le nom/chemin du fichier à lire.maxChars— défaut :0(= pas de limite).
Le point important sur maxChars
Ce n'est pas une troncature. Si le fichier AGENTS.md dépasse maxChars caractères, il n'est pas coupé — il est entièrement ignoré (le code source dit explicitement : couper au milieu risquerait de supprimer justement la règle qui compte). Mini-me affiche alors un avertissement plutôt que de faire semblant d'avoir lu le fichier en entier.
- Comment la régler :
- Avec un petit modèle à faible fenêtre de contexte, un
AGENTS.mdtrop long peut à lui seul consommer une part énorme de la mémoire disponible avant même que la conversation commence. FixermaxCharste permet d'avoir un filet de sécurité : plutôt qu'un contexte saturé dès le départ sans que tu t'en rendes compte, tu obtiens un avertissement clair "ce fichier est trop long, il a été ignoré", et tu sais qu'il faut le raccourcir. - Valeur indicative donnée dans la documentation : le seuil d'alerte recommandé tourne autour de 20 % de la fenêtre de contexte convertie en caractères (grosso modo, 1 token ≈ 4 caractères). Exemple : fenêtre de 8192 tokens → ≈ 32 000 caractères →
maxChars: 6500si tu veux rester sous les 20 %. - Si ton
AGENTS.mdest court (quelques centaines de lignes maximum) et que ton modèle a une fenêtre confortable (32k+), tu peux laisser0.
- Avec un petit modèle à faible fenêtre de contexte, un
8. context — la compression automatique de l'historique
En clair : au fur et à mesure que la conversation avance, l'historique (questions, réponses, résultats de commandes) grandit. Sur un petit modèle à mémoire limitée, il arrive un moment où tout ne tient plus. Ce bloc décide quand et comment résumer automatiquement les anciens échanges pour faire de la place, sans perdre le fil.
context:
enabled: false
threshold: 75
maxMessages: 80
keepLastTurns: 3
summaryMaxTokens: 1200
prompt: ""
showStats: true
| Sous-réglage | Défaut | Ce qu'il fait | Comment le régler |
|---|---|---|---|
enabled |
false |
Active la compression automatique. Même désactivé, tu peux toujours lancer une compression manuelle. | Active-le (true) pour tout petit modèle local — c'est la protection principale contre le "contexte plein" qui fait planter ou dégrader l'agent. |
threshold |
75 (%) |
Pourcentage de la fenêtre de contexte à partir duquel la compression se déclenche. 75 % laisse volontairement un quart de la mémoire libre pour la prochaine question, les résultats d'outils et la réponse. | Ne descends pas trop bas (tu compresserais trop souvent, donc tu perds en continuité) ; ne monte pas trop haut (tu risques de saturer avant que la compression ait pu agir). 70-80 % est une bonne plage. |
maxMessages |
80 |
Déclencheur de secours basé sur le nombre de messages, utilisé quand la taille de la fenêtre est inconnue (contextWindow: 0 et serveur muet sur le sujet). Une commande = 2 messages (l'appel + le résultat), donc 80 ≈ 30 commandes d'historique. |
Sur un petit modèle (le texte indique le seuil de ralentissement typique autour de 12B), tu peux baisser cette valeur si tu remarques que l'agent devient plus lent ou confus avant d'atteindre 80 messages. Mets 0 pour désactiver ce déclencheur si tu es sûr de connaître contextWindow. |
keepLastTurns |
3 |
Nombre de derniers tours de conversation gardés intacts (non résumés) — c'est là que l'agent "travaille" activement, le résumer le ferait rejouer ce qu'il vient juste de faire. | Garde au moins 2-3. Monte-le un peu (4-5) si tu remarques que l'agent "oublie" une action toute récente juste après une compression. |
summaryMaxTokens |
1200 |
Taille maximale du résumé généré pour remplacer les vieux échanges. Ce plafond empêche un modèle qui dérape de produire un résumé qui lui-même remplit la fenêtre qu'on cherchait à vider. | Pour un petit modèle, ne monte pas trop ce chiffre : un résumé doit rester compact. 1200 convient à la plupart des cas ; descends à 600-800 si tu veux économiser encore plus de place. |
prompt |
"" (prompt intégré) |
Permet de remplacer le prompt utilisé pour demander le résumé. | Laisse vide sauf besoin spécifique (ex: vouloir que le résumé garde un format particulier). |
showStats |
true |
Affiche une ligne d'info après chaque compression (combien de tokens économisés, etc.). | Laisse activé, c'est utile pour vérifier que la compression fait bien son travail — désactive seulement si tu veux une sortie plus silencieuse. |
Astuce pratique : la compression envoie le résumé au modèle sans les outils actifs et sans le mode "raisonnement", justement pour que summaryMaxTokens ne soit pas gaspillé en réflexion plutôt qu'en résumé utile.
Résumé — profils types
| Situation | firstTokenTimeout |
watchdogTimeout |
bashTimeout |
maxTurns |
maxOutput |
context.enabled |
|---|---|---|---|---|---|---|
| Petit modèle (≤ 8B), tâches courtes/chat | 3m (défaut) |
20s (défaut) |
30s (défaut) |
15 |
8000 |
true |
| Petit/moyen modèle, agent de code généraliste | 5m |
2m (aligné sur bashTimeout) |
2m |
40 |
16000 |
true |
| Modèle plus gros ou machine modeste (CPU) | 10m |
5m |
5m |
40-60 |
16000-24000 |
true |
Ces profils sont des points de départ, pas des vérités absolues — ajuste en observant le comportement réel de ton modèle (est-ce qu'il boucle, est-ce qu'il se fait couper trop tôt, est-ce que le contexte se remplit trop vite).
9. Section sampling — comment le modèle choisit ses mots
En clair : le "sampling" (échantillonnage), ce sont les réglages qui contrôlent la façon dont le modèle pioche le mot suivant parmi toutes les possibilités qu'il juge plausibles. C'est la partie qui décide si le modèle est précis et prévisible ou créatif et varié. Contrairement aux réglages précédents (timeouts, quotas), le sampling n'a pas de struct figée dans mini-me : c'est une liste libre de clés (sampling: dans le YAML) transmise quasiment telle quelle au serveur du modèle.
sampling:
temperature: 0.0
top_p: 0.9
max_tokens: 4096
Ce sont les trois seules clés définies par défaut dans mini-me. Les autres (top_k, min_p, repeat_penalty...) ne sont pas fixées par défaut — à toi de les ajouter si ton serveur/modèle les supporte et si tu en as besoin.
temperature — le curseur "précis ↔ créatif"
En clair : plus elle est proche de 0, plus le modèle choisit systématiquement le mot qu'il juge le plus probable (réponses stables, reproductibles, parfois un peu rigides). Plus elle monte vers 1 (ou au-delà), plus il accepte de piocher des mots moins évidents (réponses plus variées, mais aussi plus de risques d'erreurs ou d'écarts).
- Défaut mini-me :
0.0— volontairement très bas, car mini-me est pensé pour un agent de code, où on veut de la précision et de la reproductibilité, pas de la créativité. - Comment la régler pour un petit modèle :
- Agent qui exécute des commandes, écrit du code, suit des instructions strictes : garde
0.0-0.2. Un petit modèle est déjà plus sujet aux erreurs et aux boucles qu'un gros modèle ; une température basse réduit ce risque. - Agent conversationnel, créatif, ou qui doit reformuler/brainstormer : monte à
0.5-0.8. Au-delà de0.8, un petit modèle part plus facilement en incohérence.
- Agent qui exécute des commandes, écrit du code, suit des instructions strictes : garde
top_p (nucleus sampling) — la largeur du choix
En clair : au lieu de considérer tous les mots possibles, le modèle ne regarde que le plus petit groupe de mots dont la probabilité cumulée atteint ce pourcentage. top_p: 0.9 veut dire "ne considère que les mots qui, ensemble, couvrent 90 % de la probabilité — ignore la longue traîne improbable".
- Défaut mini-me :
0.9. - Comment la régler : combiné à une
temperaturebasse,0.9est déjà un bon compromis "sûr" pour un petit modèle. Tu peux descendre à0.8si tu veux encore réduire les écarts bizarres ; inutile de monter plus haut pour un agent de code.
top_k — limiter le nombre de candidats (optionnel, pas de défaut dans mini-me)
En clair : ne garde que les k mots les plus probables à chaque étape, et ignore tout le reste, quel que soit top_p.
- Comment la régler : les petits modèles (souvent Qwen, Gemma, Llama en petites tailles) n'ont pas tous la même sensibilité à
top_k— certaines familles de modèles recommandent explicitement une valeur (par exemple20-40) dans leur fiche technique. Vérifie les métadonnées/recommandations du modèle GGUF que tu utilises plutôt que de deviner : untop_kmal choisi peut rendre un petit modèle plus répétitif ou au contraire plus instable.
repeat_penalty / min_p — anti-répétition (optionnel, pas de défaut dans mini-me)
En clair : repeat_penalty pénalise le modèle s'il réutilise un mot déjà employé récemment (utile contre les boucles de répétition, un défaut classique des petits modèles). min_p est une alternative à top_p qui élimine les mots dont la probabilité est trop faible par rapport au mot le plus probable du moment.
- Comment les régler : ce sont typiquement les réglages qui varient le plus d'une famille de modèle à l'autre — il n'existe pas de valeur universelle. La bonne pratique est de reprendre les valeurs recommandées par la fiche du modèle (souvent indiquées dans les métadonnées GGUF ou la documentation du modèle) plutôt que d'improviser. Si l'agent répète des phrases ou des actions en boucle, c'est souvent le premier réglage à ajuster, avec le détecteur de boucle de mini-me et
maxTurns(section 5).
max_tokens — la longueur maximale d'une réponse
En clair : combien de tokens le modèle a le droit de générer en une seule réponse avant d'être coupé.
- Défaut mini-me :
4096. - Comment la régler : pour un petit modèle avec une fenêtre de contexte réduite, vérifie que
max_tokenslaisse assez de place dans la fenêtre pour le prompt lui-même —max_tokens+ taille du prompt ne doit pas dépassercontextWindow. Baisse-le (1024-2048) si tes réponses doivent rester courtes (ex: classification, extraction) ; garde la valeur par défaut pour un agent qui doit écrire du code ou des explications plus longues.
En résumé — philosophie du sampling dans mini-me
mini-me part du principe qu'un petit modèle local est un agent de code avant tout, donc ses réglages de sampling par défaut privilégient la précision et la reproductibilité (temperature: 0.0) plutôt que la créativité. C'est le point de départ le plus sûr pour limiter les erreurs, les hallucinations de résultats de commandes et les boucles — quitte à l'assouplir toi-même si ton usage est plus conversationnel ou créatif.
Il n'existe pas aujourd'hui dans mini-me de "profil de sampling" automatique par famille de modèle — les valeurs par défaut sont génériques et volontairement conservatrices. Si tu changes de modèle, pense à revérifier ces réglages plutôt que de garder ceux d'un autre modèle par habitude.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 |
|