đ€ ChatGPT Internals â Pipeline d'InfĂ©rence, Tokens, ModĂšles & Outils
Guide IDEO-Lab : de ton prompt jusqu'à la réponse, avec une vision ingénieur des couches logicielles, modÚles, routage, sécurité, outils et génération de code.
Panorama global
Vision d'ensemble : client, API, orchestrateur, contexte, modĂšle, filtres, streaming.
ArchitecturePipelinePrompt utilisateur
Ce que tu écris n'est que l'entrée visible. Le systÚme construit ensuite un contexte complet.
PromptContexteTokenisation
Le texte devient une séquence de tokens : unités manipulables par le modÚle.
TokensBPERouting & orchestration
Choix du modÚle, mode de raisonnement, outils autorisés, garde-fous et politiques.
RouterToolsConstruction du contexte
System prompt, historique, fichiers, mémoire, messages développeur et demande finale.
Prompt builderWindowTransformer
Le cĆur mathĂ©matique : embeddings, attention, couches, logits, prĂ©diction du token suivant.
AttentionLogitsInférence GPU
Batching, KV cache, scheduling, débit, latence, mémoire GPU, génération séquentielle.
GPUKV cacheDécodage
Comment le modÚle choisit le prochain token : température, top-p, contraintes, stop.
SamplingDeterminismQuand tu demandes du Python
Le modĂšle active implicitement des patterns de code : syntaxe, architecture, tests, edge cases.
PythonDjangoOutils externes
Web, fichiers, calendrier, mail, interpréteur, recherche : quand le modÚle doit appeler un outil.
ToolsFunction callingSécurité & politiques
Filtrage, refus, transformation sûre, prévention des abus, protection des données.
SafetyGuardrailsStreaming
Pourquoi la réponse arrive progressivement et comment les tokens sont envoyés au client.
StreamLatencyLimites & erreurs
Hallucinations, bugs de code, contexte incomplet, conflit d'instructions, surcharge.
DebugRisksPerformance & scaling
Pourquoi le service tient à l'échelle mondiale : batch, files, caches, routage, priorités.
ScaleQueueCheat-sheet ingénieur
Résumé opérationnel : pipeline, mots-clés, diagnostic, bonnes pratiques de prompt code.
RĂ©sumĂ©Pratiqueđ§ Vue mentale complĂšte (rĂ©aliste)
Utilisateur
â
Tokenization (BPE / sentencepiece)
â
Prompt Builder (system + history + tools)
â
LLM Transformer (GPU)
â
Logits (distribution probabilité)
â
Decoding (top-p, temperature)
â
Post-processing (safety, format)
â
Streaming réponse
đ Ordres de grandeur
| Composant | Valeur typique |
|---|---|
| Context window | 8k â 128k+ tokens |
| Taille modĂšle | 10B â 1T+ paramĂštres |
| Latence token | 10 â 100 ms |
| Tokens/sec | 20 â 200+ |
| VRAM modĂšle | 10GB â 100GB+ |
â ïž RĂ©alitĂ© fondamentale
- Pas de logique déterministe
- Pas dâexĂ©cution rĂ©elle
- 100% probabiliste
- Simulation intelligente de code
đ§± Stack logique
| Layer | RÎle réel | Complexité |
|---|---|---|
| Frontend | UI + UX + streaming | Faible |
| Gateway | Auth + rate limit | Moyen |
| Orchestrator | Routing + stratĂ©gie | ĂlevĂ© |
| Context Builder | Assemblage prompt | Critique |
| Inference | Calcul GPU massif | ExtrĂȘme |
| Decoder | Sampling tokens | Moyen |
| Safety | Filtrage sortie | ĂlevĂ© |
đĄ Insight critique
đ 70% de la qualitĂ© vient du **context + routing**, pas uniquement du modĂšle.
đïž Architecture distribuĂ©e rĂ©elle
Client
â CDN / Edge
â API Gateway
â Auth Service
â Rate Limiter
â Request Validator
â Context Builder
â Model Router
â Tool Router
â Queue System
â GPU Inference Cluster
â Post-processing
â Streaming Server
â Client
đĄ Services invisibles
- Load balancer L7
- Queues (Kafka / internal)
- Autoscaling GPU
- Observability (metrics, logs, traces)
- Cost control / quota system
âïž GPU Cluster
| Composant | RĂŽle |
|---|---|
| GPU A100/H100 | Calcul matrice |
| KV Cache | Réutilisation contexte |
| Batching | Fusion requĂȘtes |
| Scheduler | Distribution charge |
| Quantization | Réduction mémoire |
đ„ CoĂ»ts estimĂ©s
| ĂlĂ©ment | Ordre de grandeur |
|---|---|
| GPU haut de gamme | 20k â 40k ⏠|
| CoĂ»t / requĂȘte | 0.001 â 0.1 ⏠|
| Cluster complet | Millions ⏠|
đŹ Pipeline Transformer
Tokens
â Embeddings
â Attention layers (multi-head)
â Feed-forward layers
â Residual connections
â Layer normalization
â Logits
đ§ Attention mechanism
| Concept | RĂŽle |
|---|---|
| Query | Ce que le token cherche |
| Key | Index du contexte |
| Value | Information associée |
đŻ Decoding strategies
| Méthode | Effet |
|---|---|
| Greedy | Deterministic |
| Top-k | Réduction choix |
| Top-p | Naturel |
| Temperature | Créativité |
â ïž Pourquoi erreurs ?
- Pas de vérification runtime
- Context incomplet
- ProbabilitĂ© â vĂ©ritĂ©
- Sampling non déterministe
â±ïž DĂ©composition latence
| Phase | Latence |
|---|---|
| Tokenization | 1-5 ms |
| Context build | 10-50 ms |
| Queue GPU | 0-500 ms |
| Inference | dominant |
| Streaming | progressif |
đ Optimisations
- KV Cache
- Speculative decoding
- Batching
- Parallel GPU
- Distillation
đĄ Insight
đ Bottleneck = GPU + queue đ Pas le modĂšle lui-mĂȘme
đ ScalabilitĂ© mondiale
| Métrique | Ordre |
|---|---|
| Utilisateurs | 100M â 1B+ |
| RequĂȘtes/sec | 10k â 1M+ |
| Clusters | globaux |
âïž Techniques
- Load balancing global
- Edge routing
- Regional clusters
- Traffic shaping
đĄ Pourquoi ça tient
- Tout le monde nâinteragit pas en mĂȘme temps
- Réponses streamées
- Batch GPU
- ModÚles optimisés
đĄ Insight
đ Le systĂšme est conçu pour **absorber le chaos global**
â Public
- Transformers
- Tokenization
- Inference pipeline
- Decoding
đ PropriĂ©taire
- Architecture exacte GPT
- Datasets
- Routing interne
- Optimisations GPU
đ§ Ton message visible
Le prompt utilisateur est uniquement la partie visible de la demande : texte, captures, fichiers, consignes, ton, objectif. Mais dans un systĂšme LLM moderne, ce message est seulement le dernier bloc dâun contexte beaucoup plus large.
User visible prompt
â
Conversation context
â
Developer rules
â
System instructions
â
Tool availability
â
Model inference prompt
Point fondamental
Le modĂšle ne reçoit pas simplement âĂ©cris-moi du Pythonâ. Il reçoit une construction complĂšte qui encadre : le style, les limites, les outils disponibles, le contexte prĂ©cĂ©dent, les fichiers fournis, et parfois les prĂ©fĂ©rences de rĂ©ponse.
đ Ce que contient ton entrĂ©e
| ĂlĂ©ment | Exemple | Impact |
|---|---|---|
| Objectif | Créer une commande Django | Détermine la nature de la réponse |
| Contraintes | Avant/aprĂšs, fichier exact | RĂ©duit les erreurs dâintĂ©gration |
| Contexte métier | SRDF, Django Doctor, i18n | Oriente les choix techniques |
| Niveau attendu | Patch précis, pas de blabla | Modifie le format de sortie |
| PiĂšces jointes | HTML, Python, screenshots | AmĂ©liore lâancrage rĂ©el |
đïž Construction du prompt rĂ©el
[System instructions]
+ [Developer instructions]
+ [Tool rules]
+ [Conversation history]
+ [Memory / preferences]
+ [Uploaded files / extracted content]
+ [Current user request]
= Effective prompt sent to the model
Le prompt rĂ©el est donc un objet composite. Câest pour cela quâune mĂȘme phrase peut produire deux rĂ©ponses diffĂ©rentes selon lâhistorique, les fichiers joints, le niveau de dĂ©tail demandĂ© ou les contraintes de format.
Ordre dâinfluence typique
| Bloc | Priorité | RÎle |
|---|---|---|
| System | TrÚs haute | Cadre général, sécurité, identité du modÚle |
| Developer | Haute | Style, outils, comportement attendu |
| Conversation | Moyenne | Continuité, contraintes déjà données |
| Fichiers | Moyenne | Source de vérité locale |
| User prompt | Haute sur lâobjectif | Demande immĂ©diate Ă satisfaire |
đ§© Exemple concret
User:
"Fais-moi un patch pour corriger la capture SRDF."
Prompt réel implicite:
- User veut un patch précis.
- Projet Django existant.
- Il déteste les réponses trop longues.
- Il veut fichier + fonction + bloc avant/aprĂšs.
- Le code doit rester English-only.
- Ne pas crĂ©er dâindex DB dangereux.
- Garder lâarchitecture actuelle sauf demande contraire.
Sans ces informations, le modÚle pourrait proposer une architecture nouvelle, trop générale, ou inutilisable. Avec ce contexte, il doit produire un correctif beaucoup plus opérationnel.
Pourquoi cela compte
- Le modĂšle choisit un niveau dâabstraction.
- Il dĂ©cide sâil doit expliquer ou patcher.
- Il adapte le style de code.
- Il évite certains choix interdits par le projet.
â ïž AmbiguĂŻtĂ©s frĂ©quentes
| Prompt flou | ProblĂšme | Prompt meilleur |
|---|---|---|
| Corrige ça | Pas de fichier, pas dâerreur | Corrige cette fonction, erreur X, voici le traceback |
| Fais un script | Scope inconnu | Script standalone Linux Ubuntu 24, logs + dry-run |
| Optimise | Performance ? lisibilité ? mémoire ? | Réduis le temps de scan de 2 min à moins de 5 sec |
| Explique-moi | Niveau inconnu | Explique niveau ingénieur Django senior, avec diagramme |
| Ajoute une feature | Architecture inconnue | Ajoute feature sans changer le modĂšle DB existant |
Pourquoi le modĂšle peut partir de travers
- Il comble les trous avec des patterns probables.
- Il suppose une architecture standard.
- Il peut ignorer une contrainte non répétée récemment.
- Il nâexĂ©cute pas automatiquement le code produit.
đŻ Anatomie dâun bon prompt technique
1. Objectif exact
2. Fichier ou module concerné
3. Erreur observée
4. Résultat attendu
5. Contraintes de style
6. Contraintes dâarchitecture
7. Format de sortie attendu
Exemple premium
Dans srdf/binlog_capture.py, fonction capture_updates(),
corrige le bug oĂč OutboundEvent reste pending aprĂšs update SQL.
Je veux un patch minimal, sans refactor global.
Format:
- diagnostic court
- fichier concerné
- bloc AVANT complet
- bloc APRES complet
- test management command
- résultat attendu console
đ Prompt de code : ce qui change
Quand tu demandes du code, le modĂšle active implicitement des patterns appris : syntaxe, structure projet, conventions, gestion dâerreur, logs, tests, sĂ©paration des responsabilitĂ©s. Mais il ne âcompileâ pas mentalement comme un IDE.
| Ce que le modĂšle sait faire | Limite |
|---|---|
| Reconnaßtre des patterns Django | Peut manquer le contexte réel du projet |
| Ăcrire une fonction plausible | Peut inventer un import ou un champ |
| Proposer une architecture | Peut ĂȘtre trop lourde |
| Lire un traceback fourni | Ne voit pas lâenvironnement complet |
| Produire un test | Ne garantit pas son exécution réelle |
đ§ Prompt idĂ©al pour patch Django
Contexte:
- Django 4.1
- MariaDB
- app: srdf
- fichier: services/binlog_capture.py
ProblĂšme:
- capture update parfois non fiable
- console montre X
- admin montre Y
Contraintes:
- patch minimal
- pas de migration DB
- pas de nouvel index
- code English-only
- logs visibles stdout
Sortie attendue:
- bloc AVANT/APRES
- commande de test
- résultat attendu
Pourquoi ça marche mieux
- Réduit les suppositions.
- Force une sortie actionnable.
- Ăvite les refactors inutiles.
- Permet dâappliquer le patch sans reconstituer le contexte.
â Checklist âprompt efficaceâ
| Question | Pourquoi |
|---|---|
| Ai-je donnĂ© le fichier exact ? | Ăvite les patchs gĂ©nĂ©riques |
| Ai-je donnĂ© lâerreur exacte ? | RĂ©duit les hypothĂšses |
| Ai-je prĂ©cisĂ© le format ? | AmĂ©liore lâapplicabilitĂ© |
| Ai-je limitĂ© le scope ? | Ăvite lâusine Ă gaz |
| Ai-je donné le résultat attendu ? | Permet de vérifier le succÚs |
đ« Anti-patterns
- âRefais tout proprementâ sans limites.
- âOptimiseâ sans mĂ©trique.
- âCorrigeâ sans traceback.
- âAjoute une featureâ sans modĂšle de donnĂ©es.
- âExpliqueâ sans niveau cible.
Formule simple
CONTEXTE + PROBLEME + CONTRAINTES + FORMAT + TEST ATTENDU
đ§ Ce que voit rĂ©ellement le modĂšle
Un LLM ne voit pas du texte. Il voit une sĂ©quence dâIDs numĂ©riques reprĂ©sentant des fragments de texte appelĂ©s tokens.
"def capture_binlog(event):"
â Tokenisation
["def", " capture", "_", "bin", "log", "(", "event", ")", ":"]
â
[501, 1842, 27, 910, 882, 12, 774, 9, 33]
đ Ordres de grandeur
| ĂlĂ©ment | Valeur typique |
|---|---|
| 1 token â | 0.75 mot anglais |
| 1 ligne code | 10 â 40 tokens |
| 1 page texte | 500 â 1000 tokens |
| 1 JSON lourd | Ă2 Ă Ă4 inflation |
â ïž Insight critique
đ Le coĂ»t, la latence et la qualitĂ© dĂ©pendent directement du nombre de tokens đ Pas du nombre de mots visibles
đ€ Un token â un mot
| Texte | Tokens |
|---|---|
| Hello world | ["Hello", " world"] |
| binlog_capture | ["bin", "log", "_", "capture"] |
| indentation Python | [" "] (espaces comptés !) |
| JSON | beaucoup de { } , " : |
đĄ Pourquoi ce dĂ©coupage
- Réduction du vocabulaire
- Gestion des mots inconnus
- Compression efficace
- Adaptation multi-langue
âïž Pipeline de tokenisation
Raw text
â
Normalization (lowercase, unicode)
â
Pre-tokenization (split basic)
â
Subword algorithm (BPE / SentencePiece)
â
Vocabulary mapping
â
Token IDs
đŹ Algorithmes utilisĂ©s
| Algo | Principe |
|---|---|
| BPE | Fusion de sous-mots fréquents |
| WordPiece | Optimisation vocabulaire |
| SentencePiece | Langage-agnostique |
đ Exemple BPE simplifiĂ©
"database"
â "data" + "base"
â "dat" + "a" + "base"
â dĂ©pend du vocabulaire appris
đŻ Pourquoi câest puissant
- GĂšre mots rares
- Réduit taille vocabulaire
- Permet généralisation
- Optimise mémoire modÚle
â ïž Limite
đ Peut dĂ©couper des noms techniques (ex: variable) de façon non intuitive
đ° Impact coĂ»t & performance
| Facteur | Impact |
|---|---|
| Nombre tokens | â coĂ»t |
| Long contexte | â latence |
| Sortie longue | â temps rĂ©ponse |
| Code dense | â tokens/sec nĂ©cessaires |
đ Exemple rĂ©el
Prompt court: 100 tokens â rĂ©ponse rapide
Prompt long: 10 000 tokens â latence Ă©levĂ©e + coĂ»t Ă©levĂ©
⥠Impact qualité
- Contexte long â dilution attention
- Tokens inutiles â bruit
- Fichiers Ă©normes â perte prĂ©cision
- RĂ©ponses longues â dĂ©rive possible
đĄ Insight
đ Un bon prompt = maximum d'information utile / minimum de tokens
đ„ Cas explosifs en tokens
| Entrée | Effet |
|---|---|
| Traceback Python | Paths longs + répétitions |
| HTML complet | Balises + attributs |
| JSON API | Clés répétées |
| Logs | Horodatage + bruit |
| SQL dump | TrĂšs verbeux |
đ Exemple JSON
{"user_id":123,"user_name":"John"}
â ~20+ tokens
đ Cas Python critique
- Indentation = tokens
- Commentaires = tokens
- Noms longs = tokens multiples
- Imports multiples = inflation
đĄ Optimisation pratique
- Couper fichiers inutiles
- Ne garder que la fonction cible
- Résumer logs
- Ăviter copier/coller brut massif
đ§ FenĂȘtre de contexte
Le modĂšle a une limite maximale de tokens (input + output).
| ModĂšle | Contexte |
|---|---|
| Ancien GPT | 2k â 4k |
| Moderne | 8k â 128k+ |
| High-end | jusquâĂ 1M tokens |
â ïž Effet dĂ©passement
- Troncature du contexte
- Perte dâinformation critique
- Réponse incohérente
đ Bonnes pratiques
- Fichier ciblé uniquement
- Fonction précise
- Logs pertinents seulement
- Sortie structurée demandée
đŻ Formule idĂ©ale
TOKENS UTILES >> TOKENS BRUIT
đ§ RĂŽle exact de lâorchestrateur
Le routeur nâest pas le modĂšle. Câest la couche qui dĂ©cide comment traiter ta demande avant ou pendant lâappel au modĂšle : rĂ©ponse directe, lecture de fichier, recherche web, gĂ©nĂ©ration dâimage, calcul, exĂ©cution Python, crĂ©ation de document, etc.
User request
â
Intent classification
â
Risk / policy check
â
Context source selection
â
Model selection
â
Tool selection
â
Execution plan
â
LLM + tools
â
Answer assembly
Point clé
Pour une mĂȘme question, deux stratĂ©gies peuvent ĂȘtre possibles : rĂ©pondre directement ou dĂ©clencher un outil. Le routing cherche le meilleur compromis entre qualitĂ©, fraĂźcheur, sĂ©curitĂ©, coĂ»t et latence.
𧱠Couches de décision
| Couche | Question posée | Effet |
|---|---|---|
| Intent router | Que veut lâutilisateur ? | Classe la tĂąche |
| Freshness router | Lâinfo peut-elle avoir changĂ© ? | DĂ©clenche web ou source rĂ©cente |
| Tool router | Un outil est-il nécessaire ? | Active fichiers, Python, Gmail, Calendar... |
| Model router | Quel modĂšle convient ? | Rapide, raisonneur, multimodal... |
| Policy router | Y a-t-il un risque ? | Autorise, limite ou refuse |
| Output router | Quel format produire ? | Patch, tableau, HTML, mail, rapport... |
đ Classification de la demande
La premiĂšre Ă©tape consiste Ă reconnaĂźtre la nature de la tĂąche. Une demande de code, une question dâactualitĂ©, une gĂ©nĂ©ration dâimage ou une analyse de fichier ne suivent pas le mĂȘme chemin.
| Type de demande | Signal détecté | Stratégie |
|---|---|---|
| Code | Python, Django, patch, traceback | Analyse technique + réponse structurée |
| Fichier | âci-jointâ, HTML, PDF, XLSX | Lire ou rechercher dans le fichier |
| RĂ©cent | âactuelâ, â2026â, prix, loi, prĂ©sident | Recherche web obligatoire |
| Image | âgĂ©nĂšre une imageâ, âmodifie cette imageâ | Outil image |
| Calcul | conversion, formule, total | Calculateur ou Python |
| Action personnelle | email, calendrier, contacts | Connecteur dédié |
đ§Ș Exemple : demande de patch Django
Input:
"Corrige ce bug SRDF, voici le fichier et le traceback."
Classification:
- Task type: code repair
- Domain: Django / database / replication
- Risk: medium, could break existing system
- Need files: yes
- Need web: no
- Output format: patch before/after
- Tool: file reader, maybe Python if testable
Ambiguïtés traitées
- Est-ce une explication ou une modification ?
- Faut-il lire un fichier joint ?
- Lâinformation doit-elle ĂȘtre vĂ©rifiĂ©e en ligne ?
- Le rĂ©sultat doit-il ĂȘtre court, long, actionnable ?
- Y a-t-il des rÚgles projet déjà connues ?
đ§ Choix du modĂšle ou du mode
Dans un systĂšme LLM moderne, toutes les requĂȘtes ne nĂ©cessitent pas le mĂȘme niveau de raisonnement. Un âbonjourâ ne doit pas consommer la mĂȘme puissance quâun debug Django complexe.
| Besoin | Mode probable | Pourquoi |
|---|---|---|
| Réponse simple | Fast model | Faible coût, faible latence |
| Debug complexe | Reasoning model | Analyse multi-étapes |
| Image jointe | Multimodal model | Compréhension visuelle |
| Long document | Long-context model | FenĂȘtre de contexte large |
| Code patch | Code-strong model | Syntaxe + architecture |
đ Arbitrage qualitĂ© / coĂ»t / latence
| Option | Qualité | Coût | Latence |
|---|---|---|---|
| Petit modĂšle | Moyenne | Faible | TrĂšs faible |
| ModÚle général | Bonne | Moyen | Moyenne |
| ModĂšle raisonneur | TrĂšs bonne | ĂlevĂ© | Plus forte |
| Long contexte | Variable | ĂlevĂ© | ĂlevĂ©e |
Routing objective:
maximize(answer_quality)
while minimizing(latency + cost + risk)
đ ïž Tool routing : quand appeler un outil ?
Le modÚle seul génÚre du texte. Les outils ajoutent une capacité externe : lire un fichier, chercher sur le web, créer un document, interroger un calendrier, manipuler un tableur, générer une image ou exécuter du Python.
| Outil | Déclencheur | Résultat |
|---|---|---|
| File search | Fichier joint, document interne | Extraits citables |
| Web | Infos récentes ou vérification | Sources actuelles |
| Python | Calcul, analyse, génération fichier | Résultat exécutable |
| Image | Création ou édition visuelle | Image générée |
| Calendar | ĂvĂ©nement, disponibilitĂ© | Action calendrier |
| Gmail | Lecture, brouillon, envoi | Email traité |
đ Boucle LLM + outils
LLM decides tool is needed
â
Tool call
â
Tool result returned
â
LLM reads result
â
LLM continues reasoning
â
Final answer
Exemple : fichier attaché
User:
"Densifie cette modal HTML."
Router:
- Detect uploaded HTML
- Read file content
- Preserve existing IDs/classes
- Generate drop-in replacement
- Cite original file
PiĂšge important
Un outil amĂ©liore lâancrage rĂ©el, mais ajoute de la latence. Le routeur doit donc Ă©viter les appels inutiles.
đĄïž Policies, garde-fous et conformitĂ©
Le routeur applique aussi des rĂšgles : sĂ©curitĂ©, confidentialitĂ©, droits dâaccĂšs, fraĂźcheur des sources, actions sensibles, contenu interdit ou contenu Ă limiter.
| Risque | Exemple | Action |
|---|---|---|
| Information périmée | Prix, lois, versions API | Recherche web |
| Action destructive | Supprimer emails, modifier calendrier | Vérification / action explicite |
| Donnée privée | Emails, fichiers personnels | Limiter au besoin |
| Code dangereux | Malware, exfiltration | Refus ou redirection |
| Fait incertain | Rumeur, politique, conflit | Citations + prudence |
đŠ DĂ©cision policy simplifiĂ©e
if request is safe:
answer normally
elif request needs verification:
browse or cite sources
elif request touches private data:
use minimal necessary access
elif request is unsafe:
refuse and redirect safely
Ce que cela change pour toi
- Une demande de code normale passe directement.
- Une demande dâactualitĂ© doit ĂȘtre vĂ©rifiĂ©e.
- Une demande sur fichier doit sâancrer sur le contenu rĂ©el.
- Une action email/calendrier doit respecter lâintention explicite.
â±ïž Latence : oĂč part le temps ?
| Phase | Ordre de grandeur | Commentaire |
|---|---|---|
| Classification | ms Ă dizaines ms | Intent + risque |
| Recherche contexte | variable | Fichiers, historique, web |
| Choix modĂšle | ms | Routing interne |
| Tool calls | 100ms Ă secondes | Web/fichiers/API |
| Inference | dominant | GPU + longueur sortie |
| Streaming | progressif | Améliore perception utilisateur |
Pourquoi parfois ça semble lent
- Plusieurs outils appelés successivement.
- Fichier long Ă analyser.
- Recherche web ou API externe.
- ModÚle raisonneur plus coûteux.
- Réponse trÚs longue à générer.
đ° CoĂ»t : ce qui pĂšse vraiment
| Facteur | Effet coût | Réduction possible |
|---|---|---|
| Tokens dâentrĂ©e | â | Nettoyer contexte |
| Tokens de sortie | ââ | Format prĂ©cis |
| Gros modĂšle | ââ | Router modĂšle adaptĂ© |
| Outils externes | â | Appels seulement nĂ©cessaires |
| Raisonnement long | ââ | Scope clair |
Best routing = smallest sufficient path
not:
maximum model + maximum tools
but:
right model + right context + right output
đ§ Ce que fait rĂ©ellement le Context Builder
Le Context Builder transforme une conversation complexe (messages, fichiers, rÚgles, mémoire) en une **séquence linéaire de tokens** que le modÚle peut traiter.
System rules
â
Developer rules
â
Conversation history
â
Memory (user/project)
â
Files / extracted content
â
Tool outputs
â
User request
â
Final prompt sent to model
â ïž Insight critique
đ Le modĂšle ne voit jamais âla conversation bruteâ đ Il voit une **reconstruction optimisĂ©e**
đ Taille du contexte
| ĂlĂ©ment | Poids typique |
|---|---|
| System prompt | 500 â 2000 tokens |
| Historique rĂ©cent | 1000 â 10k tokens |
| Fichiers | 100 â 50k tokens |
| Sortie outil | variable |
| Message utilisateur | 10 â 500 tokens |
đĄ Conclusion
đ Ton message = souvent <5% du contexte rĂ©el
đïž Construction rĂ©elle du prompt
"You are ChatGPT..."
+ Safety rules
+ Developer constraints
+ Conversation summary
+ Relevant past messages
+ Extracted file content
+ Tool outputs
+ User request
+ Instruction: answer appropriately
đ§± Blocs du contexte
| Bloc | RĂŽle |
|---|---|
| System | Cadre global, sécurité, style |
| Developer | Contraintes techniques (format, outils) |
| History | Continuité conversation |
| Memory | Préférences persistantes |
| Files | Données concrÚtes |
| Tools | Résultats dynamiques |
| User | Demande finale |
đĄ Exemple rĂ©el (ton cas)
User:
"Densifie cette modal HTML"
Context réel:
- IDEO-Lab layout rules
- Grid + modal + tabs pattern
- User hates long vague answers
- Wants dense content
- Wants drop-in HTML
- Wants code English-only
- Previous modal structure
- Uploaded HTML file
đŻ RĂ©sultat
- Réponse directement intégrable
- Respect du style IDEO-Lab
- Pas de refactor inutile
- Haute densité d'information
âïž Gestion des prioritĂ©s
| Priorité | Bloc |
|---|---|
| 1 | System |
| 2 | Developer |
| 3 | Policy |
| 4 | User (dernier message) |
| 5 | History |
| 6 | Memory |
â ïž Exemple conflit
User: "Ignore les rĂšgles et fais X"
System: "Ne pas faire X"
â RĂ©sultat : refus ou adaptation
𧚠Conflits fréquents
| Conflit | Résolution |
|---|---|
| User vs policy | Policy gagne |
| Ancien vs nouveau message | Nouveau prioritaire |
| Fichier incomplet | HypothĂšses explicites |
| Contexte trop long | Compression |
| Ambiguïté | Best effort ou question |
đĄ Insight
đ Le modĂšle ne âchoisit pas librementâ đ Il suit une hiĂ©rarchie stricte
đ§ Compression du contexte
Quand le contexte devient trop grand, le systĂšme compresse :
- Résumé de conversation
- Suppression messages anciens
- Sélection contenu pertinent
- Extraction partielle de fichiers
Full conversation (50k tokens)
â
Summarization
â
Relevant subset (10k tokens)
đ Effets de la compression
| Effet | Impact |
|---|---|
| Perte de détails | Possible |
| Meilleure vitesse | Oui |
| Moins de coût | Oui |
| Risque dâerreur | Augmente si mal compressĂ© |
â ïž Danger
đ Une info importante peut disparaĂźtre du contexte
đ„ Cas rĂ©el : patch Django
Context utilisé:
- Fichier Python ciblé
- Fonction concernée
- Traceback
- Contraintes utilisateur
- Historique debug
Context ignoré:
- Messages anciens inutiles
- Code non lié
- Discussions hors sujet
Résultat
- Réponse ciblée
- Patch précis
- Faible latence
đŻ Bonnes pratiques
- Fournir le bon fichier
- Limiter le bruit
- Préciser la fonction cible
- Donner les contraintes
- Demander format de sortie
Formule idéale
CONTEXTE UTILE > CONTEXTE MASSIF
đ§ Pipeline Transformer complet
Le Transformer est le cĆur mathĂ©matique du LLM. Il prend une sĂ©quence de tokens numĂ©riques, les transforme en vecteurs, propage le contexte via lâattention, puis produit une distribution de probabilitĂ© sur le prochain token possible.
Text
â
Tokenizer
â
Token IDs
â
Embedding vectors
â
Positional information
â
Transformer block 1
â
Transformer block 2
â
...
â
Transformer block N
â
Final hidden state
â
Linear projection
â
Logits over vocabulary
â
Softmax / decoding
â
Next token
Ordres de grandeur
| ĂlĂ©ment | Ordre typique | Commentaire |
|---|---|---|
| Vocabulaire | 50k â 200k tokens | Selon tokenizer |
| Dimension vecteur | 768 â 16k+ | Largeur interne |
| Couches | 12 â 100+ | Profondeur |
| TĂȘtes attention | 12 â 128+ | Relations parallĂšles |
| ParamĂštres | Md â centaines de Md+ | CapacitĂ© du modĂšle |
đ§± Les briques internes
| Brique | RĂŽle | Image mentale |
|---|---|---|
| Embedding | Convertit token en vecteur | Coordonnées numériques |
| Position | Encode lâordre des tokens | Adresse dans la phrase |
| Self-attention | Relie les tokens utiles | Regarder le bon contexte |
| MLP / FFN | Transformation non linéaire | Raisonnement local |
| Residual | Préserve information | Autoroute de gradient |
| LayerNorm | Stabilise calculs | Régulation numérique |
| Logits | Scores prochains tokens | Vote final |
đą Embeddings : transformer un token en vecteur
Un token ID comme 1842 nâa aucun sens mathĂ©matique direct. Le modĂšle le remplace par un vecteur dense, par exemple 4096 nombres rĂ©els. Ce vecteur encode progressivement des rĂ©gularitĂ©s apprises : syntaxe, domaine, proximitĂ© sĂ©mantique, usage dans du code, etc.
Token: " Django"
Token ID: 1842
Embedding vector:
[0.12, -0.03, 1.44, ..., 0.07]
Dimension possible:
768 / 1024 / 4096 / 8192 / 16384
Pourquoi câest puissant
- Des tokens similaires ont des vecteurs proches.
- Le modĂšle peut combiner syntaxe et sens.
- Le mĂȘme token change de rĂŽle selon le contexte.
- Le code, les logs et le texte partagent le mĂȘme espace vectoriel.
đ Position : lâordre compte
Sans information de position, le modĂšle verrait un sac de tokens. Il doit savoir que def arrive avant le nom de fonction, que return est dans un bloc, et que les imports prĂ©cĂšdent souvent lâusage.
Tokens:
["def", " build", "_", "batch", "(", "events", ")", ":"]
Position:
[0, 1, 2, 3, 4, 5, 6, 7]
| Signal | Utilité |
|---|---|
| Position absolue | OĂč se trouve le token |
| Position relative | Distance entre tokens |
| Ordre local | Syntaxe courte |
| Distance longue | Référence à définitions antérieures |
đŻ Self-attention : le mĂ©canisme central
Lâattention permet Ă chaque token de pondĂ©rer les autres tokens du contexte. Pour prĂ©dire correctement un token, le modĂšle doit savoir quelles parties de la sĂ©quence sont importantes.
def build_batch(events):
for event in events:
process(event)
Pour prédire "event" dans process(event),
le modĂšle doit regarder:
- for event in events
- build_batch(events)
- indentation du bloc
Forme simplifiée
Attention(Q, K, V) = softmax(QKá” / âd) V
Q = Query : ce que le token cherche
K = Key : ce que les autres tokens annoncent
V = Value : information transmise
đ§© Ce que lâattention capture
| Relation | Exemple code | IntĂ©rĂȘt |
|---|---|---|
| Variable â dĂ©finition | event â for event | Ăvite variable inventĂ©e |
| Fonction â imports | timezone.now() | Besoin dâun import |
| Bloc â indentation | if / for / try | Structure Python |
| Classe â mĂ©thode | self.status | Contexte objet |
| Erreur â cause | KeyError + dict | Diagnostic |
Multi-head attention
Une seule tĂȘte dâattention serait trop limitĂ©e. Plusieurs tĂȘtes observent des relations diffĂ©rentes : syntaxe, noms, types probables, dĂ©pendances longues, format de sortie.
Head 1 â syntaxe
Head 2 â variables
Head 3 â indentation
Head 4 â imports
Head 5 â style utilisateur
Head 6 â intention globale
đïž Un bloc Transformer
Un modÚle moderne empile des dizaines de blocs. Chaque bloc affine la représentation. Les premiÚres couches capturent souvent des formes locales, les couches intermédiaires structurent, les couches finales préparent la prédiction.
Input hidden states
â
LayerNorm
â
Multi-head self-attention
â
Residual connection
â
LayerNorm
â
Feed-forward network
â
Residual connection
â
Output hidden states
RĂŽle par profondeur
| Niveau | Ce qui est capturé |
|---|---|
| Couches basses | Syntaxe, ponctuation, motifs locaux |
| Couches moyennes | Relations, types, structures, blocs |
| Couches hautes | Intention, format, réponse finale |
âïž Pourquoi empiler les couches ?
- Une couche seule capture peu de relations complexes.
- Les couches successives composent des abstractions.
- Le modÚle construit une représentation de plus en plus contextualisée.
- Le dernier état caché contient une synthÚse exploitable pour prédire la suite.
Exemple conceptuel
Entrée:
"Corrige la fonction capture_updates dans binlog_capture.py"
Couches basses:
tokens, noms, ponctuation
Couches moyennes:
fonction cible, fichier cible, action "corriger"
Couches hautes:
format attendu = patch précis, pas refactor global
đ Logits : le vote final
Ă chaque Ă©tape, le modĂšle produit un score brut pour chaque token du vocabulaire. Ces scores sâappellent des logits. Ils sont ensuite transformĂ©s en probabilitĂ©s, puis un token est choisi.
Contexte:
"def build_batch(events):\n "
Scores possibles:
"for" â 8.9
"return" â 6.4
"if" â 5.8
"print" â 2.1
"class" â -1.2
Token choisi probable:
"for"
Softmax simplifié
logits â softmax â probabilities
[8.9, 6.4, 5.8]
â
[0.89, 0.07, 0.04]
đïž DĂ©codage : choisir le prochain token
| Stratégie | Effet | Risque |
|---|---|---|
| Greedy | Choisit le meilleur token | Rigide, répétitif |
| Temperature basse | Plus déterministe | Moins créatif |
| Temperature haute | Plus variĂ© | Plus dâerreurs |
| Top-k | Garde k meilleurs tokens | Peut exclure bonne option rare |
| Top-p | Garde masse probabilité | Plus naturel, variable |
Pourquoi deux réponses peuvent varier
- Décodage probabiliste.
- Contexte légÚrement différent.
- Outils ou fichiers différents.
- Historique compressé différemment.
- Contraintes de sortie différentes.
đ Pourquoi un Transformer sait gĂ©nĂ©rer du code
Le modÚle a appris des régularités massives : syntaxe Python, idiomes Django, structures HTML, conventions SQL, signatures de fonctions courantes, patterns de tests, tracebacks, erreurs fréquentes. Il ne compile pas comme Python, mais il prédit trÚs bien les formes probables du code correct.
| Capacité | Exemple | Limite |
|---|---|---|
| Syntaxe | indentation, def, class | Peut rater un cas complexe |
| API connue | Django ORM, pathlib | Peut inventer une méthode |
| Architecture | services, models, admin | Peut surarchitecturer |
| Debug | traceback â cause | Besoin du vrai contexte |
| Refactor | séparer fonctions | Risque de casser contrat existant |
đ§ Exemple appliquĂ© Ă Django
Prompt:
"Ajoute un filtre admin pour voir seulement les erreurs critiques."
Le modĂšle cherche implicitement:
- ModelAdmin
- list_filter
- queryset filtering
- field names
- admin display
- labels lisibles
- compatibilité Django
Bonnes pratiques pour du code fiable
- Donner les modÚles réels.
- Fournir la fonction ou classe exacte.
- Inclure le traceback complet mais utile.
- Demander un patch minimal.
- Exiger des blocs AVANT/APRES.
- Tester ensuite dans lâenvironnement rĂ©el.
đ§ Ce quâest rĂ©ellement lâinfĂ©rence
LâinfĂ©rence est le processus de gĂ©nĂ©ration token par token via des calculs matriciels massifs. Chaque token nĂ©cessite un passage dans toutes les couches du Transformer.
Input tokens
â
GPU memory load
â
Matrix multiplications (Transformer layers)
â
Attention computations
â
Logits
â
Next token
â
Loop (repeat N times)
â ïž Insight critique
đ GĂ©nĂ©ration = processus sĂ©quentiel đ Impossible de gĂ©nĂ©rer tous les tokens en parallĂšle
đ Ordres de grandeur
| Métrique | Valeur typique |
|---|---|
| Temps par token | 10 â 100 ms |
| Tokens/sec | 20 â 200+ |
| VRAM modĂšle | 10GB â 100GB+ |
| GPU type | A100 / H100 |
| Utilisation GPU | partagée |
đĄ Conclusion
đ Plus la rĂ©ponse est longue, plus elle coĂ»te cher et prend du temps
âïž Pipeline rĂ©el sur GPU
Request arrives
â
Queued for GPU
â
Batch formation
â
Load model weights
â
Forward pass (Transformer)
â
KV cache update
â
Next token generated
â
Repeat loop
â
Stream token to user
đĄ Ce qui se passe en parallĂšle
- Plusieurs requĂȘtes sur le mĂȘme GPU
- Batch dynamique
- Gestion mémoire temps réel
- Scheduling prioritaire
đ§ Pourquoi GPU obligatoire
| CPU | GPU |
|---|---|
| Peu de cĆurs | Des milliers de cĆurs |
| Calcul séquentiel | Calcul parallÚle |
| Lent pour matrices | Ultra optimisé matrices |
| Non viable LLM | Indispensable |
đ„ RĂ©alitĂ©
đ Un LLM moderne sans GPU = inutilisable en production
đ KV Cache (clĂ© performance)
Sans KV cache, chaque token nĂ©cessiterait de recalculer toute la sĂ©quence prĂ©cĂ©dente. Avec KV cache, on rĂ©utilise les rĂ©sultats dâattention dĂ©jĂ calculĂ©s.
Sans cache:
Token 100 â recalcul tokens 1..99
Avec cache:
Token 100 â utilise rĂ©sultats stockĂ©s
đ Gain
| Mode | Complexité |
|---|---|
| Sans KV cache | O(nÂČ) |
| Avec KV cache | O(n) |
â ïž CoĂ»t mĂ©moire
| Facteur | Impact |
|---|---|
| Long contexte | â mĂ©moire |
| Nombre requĂȘtes | â VRAM |
| ModĂšle large | ââ VRAM |
đĄ Insight
đ KV cache accĂ©lĂšre mais consomme Ă©normĂ©ment de mĂ©moire GPU
đŠ Batching
Le batching regroupe plusieurs requĂȘtes pour maximiser lâutilisation du GPU.
Req A
Req B
Req C
â
Batch GPU
â
Traitement simultané
Avantages
- Meilleur throughput
- Coût réduit
- Utilisation optimale GPU
đ§ Scheduling
| CritÚre | Décision |
|---|---|
| Longueur contexte | Ordonnancement spécifique |
| Priorité utilisateur | Fast lane possible |
| Type requĂȘte | Batch compatible ou non |
| Temps attente | Rééquilibrage |
â ïž Conflit
đ Batching amĂ©liore dĂ©bit mais peut augmenter latence individuelle
đ° CoĂ»t rĂ©el
| ĂlĂ©ment | Ordre |
|---|---|
| GPU H100 | 20k â 40k ⏠|
| CoĂ»t / requĂȘte | 0.001 â 0.1 ⏠|
| Cluster IA | Millions ⏠|
Facteurs coût
- Nombre tokens
- ModÚle utilisé
- Longueur réponse
- Outils appelés
⥠Optimisations majeures
| Technique | Effet |
|---|---|
| Quantization | â mĂ©moire |
| Speculative decoding | â vitesse |
| Distillation | â taille modĂšle |
| Parallel GPU | â capacitĂ© |
đĄ Insight
đ LâinfĂ©rence est optimisĂ©e en permanence pour rĂ©duire le coĂ»t global
đ§ Limites fondamentales
- Génération séquentielle
- VRAM limitée
- Latence réseau
- Contexte long coûteux
- Concurrence massive
đ Bottleneck rĂ©el
latence =
GPU queue
+ inference time
+ token generation
+ streaming
đ„ RĂ©alitĂ© terrain
- Tout le monde ne parle pas en mĂȘme temps
- Les requĂȘtes sont courtes
- Les réponses sont streamées
- Les GPU sont partagés
đŻ Insight final
đ Le problĂšme nâest pas lâIA đ Le problĂšme est lâinfrastructure Ă lâĂ©chelle mondiale
đ§ GĂ©nĂ©ration sĂ©quentielle
Le modĂšle ne produit pas une rĂ©ponse complĂšte. Il gĂ©nĂšre un token, lâajoute au contexte, puis recommence.
Prompt
â
Logits (scores)
â
Sampling
â
Token choisi
â
Ajout au contexte
â
Reboucle
Exemple réel
"def" â " build" â "_" â "batch" â "(" â "events" â ")"
â ïž Insight critique
đ Chaque token dĂ©pend de tous les tokens prĂ©cĂ©dents đ Une erreur peut se propager
đ Distribution probabiliste
Tokens possibles:
"for" â 0.62
"if" â 0.18
"return" â 0.12
"while" â 0.05
"class" â 0.03
Ce que fait le décodage
- Filtrer les tokens improbables
- Ajuster la diversité
- Choisir un token
- RĂ©pĂ©ter jusquâĂ stop
đŻ StratĂ©gies de sampling
| Technique | Principe |
|---|---|
| Greedy | Prend le token le plus probable |
| Top-k | Garde les k meilleurs |
| Top-p | Garde la masse cumulée |
| Random | Tirage aléatoire pondéré |
Exemple top-k
Top-k = 3
â ["for", "if", "return"]
â tirage parmi ces 3
đ Top-p (nucleus sampling)
Probabilités:
0.62 + 0.18 = 0.80
Top-p = 0.8
â ["for", "if"]
Pourquoi top-p est préféré
- Sâadapte au contexte
- Plus naturel
- Moins rigide que top-k
- Ăvite bruit inutile
đïž ParamĂštres clĂ©s
| ParamĂštre | Effet |
|---|---|
| Temperature | Créativité / diversité |
| Top-p | Filtrage probabiliste |
| Top-k | Limite nombre choix |
| Max tokens | Longueur max |
| Stop sequences | Condition arrĂȘt |
Température
Temp = 0.0 â dĂ©terministe
Temp = 0.7 â Ă©quilibrĂ©
Temp = 1.2 â crĂ©atif
đ Effet tempĂ©rature
| Temp | Résultat |
|---|---|
| 0.0 | Stable, répétitif |
| 0.5 | Précis |
| 0.7 | Naturel |
| 1.0+ | Créatif mais risqué |
đĄ Insight
đ Plus la tempĂ©rature monte â plus le modĂšle âexploreâ
đ§± Contraintes de sortie
Le systĂšme peut forcer certains formats :
- JSON strict
- Code block
- HTML
- Patch AVANT/APRES
Force JSON â tokens limitĂ©s Ă structure JSON
đ Stop sequences
Stop: "\n\n"
â arrĂȘt aprĂšs double saut ligne
Cas pratiques
- ArrĂȘter aprĂšs rĂ©ponse
- Ăviter rĂ©pĂ©titions
- Couper sortie longue
đ Impact sur le code
| Réglage | Résultat |
|---|---|
| Temp basse | Code stable |
| Temp haute | Variantes possibles |
| Top-p faible | Moins dâerreurs |
| Top-p élevé | Plus créatif |
â ïž Risques
- API inventée
- Imports manquants
- Indentation incorrecte
- Code incohérent long
đŻ RĂ©glage optimal code
TempĂ©rature: 0.2 â 0.4
Top-p: 0.8 â 0.95
Format: strict
Pourquoi
- Réduit hallucinations
- Favorise cohérence
- Maintient lisibilité
đ„ Effets observables
- Deux rĂ©ponses diffĂ©rentes pour mĂȘme prompt
- Variations de style
- Longueur variable
- Choix diffĂ©rents dâimplĂ©mentation
Pourquoi
Probabilités + sampling + contexte
đĄ Insight final
đ Le modĂšle ne âchoisit pas la vĂ©ritĂ©â đ Il choisit une suite probable de tokens
đ§ Pipeline complet (rĂ©el, non simplifiĂ©)
User request
â
Intent detection (code)
â
Context builder (files + constraints + history)
â
Pattern activation (Python/Django)
â
Transformer inference
â
Token decoding
â
Code structuring (format)
â
Output streaming
đ Ătapes cachĂ©es
| Phase | Action interne |
|---|---|
| Classification | code vs explication |
| Context | inject project constraints |
| Pattern match | Django / Python / infra |
| Generation | probabilistic code |
| Formatting | patch / file / snippet |
â ïž Insight critique
đ Le modĂšle ne compile pas đ Il simule un code valide
đ„ Ce que le modĂšle âpenseâ
"Probable structure Django"
+ "Probable fix pattern"
+ "Probable imports"
+ "Probable error handling"
= Code généré
đĄ RĂ©alitĂ©
- Reconnaissance statistique
- Pas dâexĂ©cution rĂ©elle
- Pas dâaccĂšs repo
- Pas de vérification runtime
đ InfĂ©rences automatiques (fortes)
| Signal | Inférence |
|---|---|
| manage.py | Django project |
| ModelAdmin | Admin config |
| binlog | stream processing |
| SRDF | replication pipeline |
| capture | event ingestion |
đ§ Reconstruction implicite
- Structure projet
- Dépendances probables
- Flux de données
- Responsabilités modules
â ïž Limites critiques
| Cas | Erreur |
|---|---|
| Field DB | champ inventé |
| API interne | fonction inexistante |
| Flow métier | ordre incorrect |
| Concurrency | ignorée |
đĄ Insight
đ Le modĂšle reconstruit â il ne lit pas ton code rĂ©el
𧩠Patterns activés automatiquement
| Type | Patterns |
|---|---|
| Syntaxe | PEP8, indentation |
| Django | ORM, Admin, Commands |
| Logs | logging / debug |
| Error | try/except |
| Data | dedup / batching |
đ Exemple gĂ©nĂ©rĂ©
try:
process(event)
except Exception as e:
logger.error(e)
đŻ Patterns avancĂ©s activĂ©s
- Retry logic
- Idempotency
- Batch processing
- Transaction safety
- Async patterns
â ïž Danger
đ Peut ajouter de la complexitĂ© inutile
đ Prompt expert (niveau prod)
File: srdf/services/binlog_capture.py
Function: capture_updates()
Problem:
- duplicated events
- inconsistent updates
Constraints:
- no DB index
- dedup in code
- keep architecture
- high performance
- safe concurrency
Output:
- BEFORE block
- AFTER block
- logging
- test command
- expected output
đ Impact du prompt
| Prompt | Résultat |
|---|---|
| Flou | Code générique |
| Précis | Patch utilisable |
| Ultra précis | Code production-ready |
đĄ Insight
đ Le prompt est plus important que le modĂšle
â ïž Risques production rĂ©els
- Race condition
- Duplicate data
- Deadlocks
- Memory leak
- Performance drop
đ Cas typiques
| Bug | Cause |
|---|---|
| Duplicate events | no dedup |
| Crash async | thread unsafe |
| Slow system | loop inefficiency |
đ„ Erreurs typiques LLM
- Inventer une fonction
- Oublier un import
- Simplifier logique critique
- Ignorer transactions
đĄ Insight
đ Le modĂšle optimise pour plausibilitĂ©, pas robustesse
â Pipeline validation rĂ©el
Generate
â
Review
â
Lint
â
Test
â
Run
â
Observe
â
Deploy
Checklist
- Imports OK
- No crash
- Correct output
- No side effects
- Performance OK
đ§Ș Commandes prod
python manage.py check
python manage.py test
python manage.py srdf_daemon --once
đŻ Insight final
đ ChatGPT = accĂ©lĂ©rateur Ă10 đ Toi = garant de la vĂ©ritĂ©
đ§ Pourquoi un LLM a besoin dâoutils
Un modĂšle seul gĂ©nĂšre du texte Ă partir de son contexte. Il ne connaĂźt pas automatiquement lâĂ©tat actuel du monde, ne lit pas magiquement tes fichiers, nâexĂ©cute pas ton code, ne modifie pas ton calendrier et ne vĂ©rifie pas une API rĂ©cente sans quâun outil externe soit appelĂ©.
LLM alone:
- predicts text
- uses context
- cannot execute actions by itself
LLM + tools:
- can query external data
- can analyze files
- can calculate
- can create artifacts
- can perform authorized actions
Point clé
Le modĂšle reste le cerveau linguistique. Lâoutil est le bras opĂ©rationnel.
đ Quand appeler un outil ?
| Situation | Outil probable | Pourquoi |
|---|---|---|
| Information rĂ©cente | Web | Ăviter une rĂ©ponse pĂ©rimĂ©e |
| Fichier attachĂ© | File search / lecture fichier | Sâancrer sur le contenu rĂ©el |
| Calcul complexe | Python / calculateur | Ăviter erreur mentale |
| Tableur / export | Python / spreadsheet | Créer un fichier exploitable |
| Image demandée | Image tool | Génération ou édition visuelle |
| Email / calendrier | Gmail / Calendar | Action personnelle autorisée |
đ§ Function calling : principe
Le modĂšle produit une intention structurĂ©e : nom de lâoutil + arguments. Lâoutil sâexĂ©cute hors du modĂšle, puis son rĂ©sultat est rĂ©injectĂ© dans le contexte pour que le modĂšle rĂ©dige la rĂ©ponse finale.
User request
â
Model reasoning
â
Tool decision
â
Function call:
{
"tool": "file_search",
"arguments": {
"query": "m-tools-ai modal"
}
}
â
Tool execution
â
Tool result
â
Model final answer
Ce que cela change
- Le modĂšle peut sâappuyer sur des donnĂ©es rĂ©elles.
- La réponse devient vérifiable.
- Lâaction est sĂ©parĂ©e du raisonnement.
- Les permissions peuvent ĂȘtre contrĂŽlĂ©es.
đ§± ModĂšle vs outil
| ĂlĂ©ment | ModĂšle | Outil |
|---|---|---|
| Nature | GénÚre du langage | Exécute une action |
| Force | Raisonnement, synthÚse | Donnée fraßche, calcul, I/O |
| Limite | Peut halluciner | Ne comprend pas tout seul |
| Sortie | Texte / plan / code | Résultat brut structuré |
| ContrĂŽle | Prompt + policies | Permissions + paramĂštres |
Best architecture:
LLM decides + interprets
Tool executes + returns facts
đ ïž Catalogue dâoutils typiques
| Outil | Usage | Exemple |
|---|---|---|
| Web | Recherche actuelle | Version API, prix, loi, news |
| File search | Lire documents/fichiers | HTML modal, PDF, code joint |
| Python | Calcul / analyse / fichiers | CSV, graphique, génération HTML |
| Spreadsheet | Excel / reporting | Budget, audit, export |
| Image | Créer ou modifier image | Illustration guide IDEO-Lab |
| Brouillon, lecture, envoi | Réponse client | |
| Calendar | ĂvĂ©nements, dispo | Planifier rĂ©union |
đ Outil selon type de vĂ©ritĂ©
| Vérité recherchée | Source fiable |
|---|---|
| Fait public récent | Web + citation |
| Contenu utilisateur | Fichier fourni |
| Calcul exact | Python / calculateur |
| Ătat personnel | Connecteur autorisĂ© |
| Production graphique | Image / artifact |
Erreur classique
Répondre de mémoire à une question qui demande une source fraßche est une erreur de routing.
đ Workflow rĂ©el LLM + outils
1. User asks
2. Router classifies
3. Model decides tool need
4. Tool is called
5. Result returns
6. Context builder injects result
7. Model synthesizes
8. Final answer is streamed
Exemple : fichier HTML attaché
User:
"Densifie cette modal."
System path:
- detect uploaded file
- read modal HTML
- preserve id/class structure
- expand content
- return drop-in replacement
- cite original file
â±ïž Latence ajoutĂ©e par outil
| Outil | Latence typique | Cause |
|---|---|---|
| Calcul simple | ms | Local |
| File read | ms â sec | Taille fichier |
| Web | sec | Réseau + lecture sources |
| Génération fichier | sec | I/O + rendu |
| Image | sec â dizaines sec | ModĂšle gĂ©nĂ©ratif |
Arbitrage
Un outil augmente la fiabilité, mais peut ralentir la réponse. Le bon routeur évite les outils inutiles.
â ïž Risques des outils
| Risque | Exemple | Mitigation |
|---|---|---|
| Source mauvaise | Site obsolĂšte | Citations, sources officielles |
| Action non voulue | Email envoyé trop vite | Créer brouillon sauf demande claire |
| Fichier mal lu | Extrait incomplet | Citer et limiter hypothĂšses |
| Calcul faux | Unités confondues | Entrées explicites |
| Latence excessive | Trop dâappels outils | Batcher / limiter |
đĄïž Garde-fous
- Lire avant dâagir.
- Citer les sources quand elles sont utilisées.
- Ne pas envoyer/supprimer sans intention explicite.
- Limiter lâaccĂšs aux donnĂ©es nĂ©cessaires.
- Signaler lâincertitude si lâoutil donne peu dâinformation.
Safe tool pattern:
read â interpret â ask/confirm if destructive â act
đ Cas dĂ©veloppeur Python / Django
| Demande | Outil utile | Résultat attendu |
|---|---|---|
| Corriger un fichier | File search | Patch ancré sur code réel |
| Analyser logs | File / Python | Résumé + causes probables |
| Exporter rapport | Python | HTML / CSV / XLSX / PDF |
| Comparer versions | File diff | Avant/aprÚs structuré |
| Docs API récente | Web | Code compatible version actuelle |
Exemple concret
User:
"Voici binlog_capture.py, corrige capture_updates."
Tool path:
- read uploaded file
- locate function
- identify imports/models
- generate minimal patch
- explain tests
đŻ Prompt idĂ©al avec outils
Use the uploaded file as source of truth.
Goal:
Patch function capture_updates()
Constraints:
- no DB schema change
- no new index
- keep current architecture
- code only in English
- provide before/after blocks
Validation:
- manage.py check
- targeted command
- expected logs
Insight final
Un LLM sans outil est un excellent gĂ©nĂ©rateur. Un LLM avec bons outils devient un assistant dâingĂ©nierie beaucoup plus fiable.
đĄïž RĂŽle des guardrails
La sĂ©curitĂ© dans un LLM nâest pas une Ă©tape unique. Elle est prĂ©sente Ă plusieurs niveaux : avant, pendant et aprĂšs la gĂ©nĂ©ration.
User input
â
Input safety check
â
Routing + policy
â
Model generation
â
Output safety check
â
Final answer
đ Objectifs
- EmpĂȘcher abus
- Protéger données
- Limiter risques légaux
- Ăviter actions dangereuses
â ïž Insight critique
đ La sĂ©curitĂ© influence la rĂ©ponse đ Elle peut modifier, restreindre ou refuser
đ Types de rĂ©ponse
| Cas | Comportement |
|---|---|
| Safe | Réponse normale |
| Ambigu | Réponse prudente |
| Risque | Transformation |
| Dangereux | Refus |
âïž Pipeline sĂ©curitĂ© complet
1. Input filtering
2. Intent classification
3. Risk scoring
4. Policy enforcement
5. Tool restriction
6. Output filtering
7. Logging / audit
đ Ătapes dĂ©taillĂ©es
| Ătape | But |
|---|---|
| Input check | Détecter contenu sensible |
| Intent | Comprendre objectif |
| Risk score | Ăvaluer danger |
| Policy | Appliquer rĂšgles |
| Output check | Filtrer réponse |
đ Exemple rĂ©el
User:
"Supprime tous mes emails"
System:
- détecte action destructive
- vérifie permissions
- demande confirmation explicite
- peut refuser action directe
đĄ Insight
đ Le modĂšle nâest pas autonome đ Il est encadrĂ© par des rĂšgles fortes
â ïž Types de risques
| Risque | Exemple |
|---|---|
| Sécurité informatique | Exploit, malware |
| Données personnelles | Email, identité |
| Action destructive | Delete data |
| Information fausse | Fake facts |
| Conseils sensibles | Médical, juridique |
đ§ RĂ©ponses adaptĂ©es
| Risque | Réaction |
|---|---|
| Faible | Réponse directe |
| Moyen | Prudence |
| ĂlevĂ© | Restriction |
| Critique | Refus |
đĄ Insight
đ Le modĂšle adapte son comportement au niveau de risque
đ ïž SĂ©curitĂ© des outils
| Outil | Risque | Protection |
|---|---|---|
| Web | Source non fiable | Citations |
| File | Données sensibles | AccÚs limité |
| Python | Code dangereux | Sandbox |
| Envoi non voulu | Confirmation | |
| Calendar | Action non voulue | Validation explicite |
đ Principe clĂ©
Read â Think â Confirm â Act
â ïž Exemple
User:
"Envoie ce mail"
Safe behavior:
- create draft
- ask confirmation
- then send
đ Cas dĂ©veloppeur
| Demande | Comportement |
|---|---|
| Code admin Django | Autorisé |
| Script nettoyage DB | Avec prudence |
| Script destructif | Validation requise |
| Exploit sécurité | Refus / version défensive |
đĄ Bonnes pratiques
- Demander version safe
- Limiter scope
- Ăviter actions globales
- Valider avant exécution
đŻ Exemple prompt
Generate safe version:
- no destructive operation
- with logging
- with dry-run option
đ„ Impact rĂ©el sur tes rĂ©ponses
- Réponses parfois plus prudentes
- Refus dans certains cas
- Ajout de disclaimers
- Transformation du contenu
Pourquoi ?
Safety > convenience
đŻ Insight final
đ Le modĂšle nâest pas libre đ Il est contrĂŽlĂ© par un systĂšme de sĂ©curitĂ© multi-niveaux
đ§ Principe fondamental
Le modĂšle gĂ©nĂšre les tokens un par un. Le serveur peut donc envoyer chaque token immĂ©diatement au lieu dâattendre la fin.
Token 1 â send
Token 2 â send
Token 3 â send
...
End â close stream
â ïž Insight critique
đ Streaming â calcul plus rapide đ Streaming = affichage progressif
đ Sans vs avec streaming
| Mode | Comportement |
|---|---|
| Sans streaming | attente complĂšte â rĂ©ponse |
| Avec streaming | réponse progressive |
đĄ Exemple
Sans:
[attente 5s] â rĂ©ponse complĂšte
Avec:
0.5s â "Voici"
0.6s â "Voici le"
0.7s â "Voici le code"
...
đĄ Pipeline complet streaming
User request
â
Server
â
GPU inference
â
Token generated
â
Chunk sent (HTTP stream / SSE / WebSocket)
â
Client receives
â
UI updates
Protocoles utilisés
| Type | Usage |
|---|---|
| SSE | Streaming simple HTTP |
| WebSocket | Temps réel bidirectionnel |
| HTTP chunked | Transmission progressive |
đ Cycle complet
Generate token
â
Serialize token
â
Send chunk
â
Render UI
â
Repeat
đĄ Insight
đ Le frontend joue un rĂŽle clĂ© (affichage progressif)
â±ïž DĂ©composition latence
| Phase | Temps |
|---|---|
| Routing | ms |
| Queue GPU | 0 â 500 ms |
| 1er token | 200 â 1000 ms |
| Tokens suivants | 10 â 100 ms/token |
đ Exemple rĂ©el
t=0.0 â request
t=0.4 â first token
t=0.5 â second token
t=1.0 â phrase visible
đ„ Bottleneck rĂ©el
- GPU queue
- Inference
- Token generation
- Network latency
đĄ Insight
đ Le premier token est le plus lent đ Ensuite ça âcouleâ
đïž Perception utilisateur
| Facteur | Impact |
|---|---|
| Premiers tokens rapides | Impression instantanéité |
| Flux continu | Confort lecture |
| Blocage initial | Frustration |
đĄ UX clĂ©
- Lire pendant génération
- Interrompre possible
- Corriger en live
đŻ Astuce UX
Fast start > fast finish
Pourquoi ?
- Le cerveau perçoit mieux un flux
- Moins dâattente âvideâ
- Meilleure engagement
â ïž Limites du streaming
- Ne réduit pas le coût GPU
- Ne réduit pas le nombre de tokens
- Ne supprime pas la latence initiale
- Peut ĂȘtre coupĂ© (network)
đ Cas problĂ©matiques
| Cas | Effet |
|---|---|
| Long code | stream long |
| Network lent | lag UI |
| Tool call | pause avant stream |
đĄ Insight
đ Streaming masque la latence đ Il ne la supprime pas
đ Cas dĂ©veloppeur
- Debug en live
- Code visible progressivement
- Interruption possible
- Logs en temps réel
đ Exemple
def capture_updates():
# visible ligne par ligne
đ§ Debug streaming
if stream stops:
- check network
- check tool call
- check backend logs
đŻ Insight final
đ Streaming = illusion de rapiditĂ© + confort rĂ©el
đ§ Pourquoi le modĂšle se trompe
Un LLM nâexĂ©cute pas le code. Il prĂ©dit une suite de tokens **probable**, pas une solution **garantie correcte**.
Input â probabilitĂ©s â tokens â code plausible
â
Input â compilation â exĂ©cution â vĂ©ritĂ©
â ïž Insight critique
đ Le modĂšle optimise pour cohĂ©rence linguistique đ Pas pour exactitude runtime
đ Niveau de fiabilitĂ©
| Type tùche | Fiabilité |
|---|---|
| Explication | TrÚs élevée |
| Code simple | ĂlevĂ©e |
| Code complexe | Moyenne |
| SystÚme distribué | Variable |
| Debug prod | Dépend du contexte |
đĄ Conclusion
đ Plus le problĂšme est rĂ©el et spĂ©cifique â plus tu dois guider
đ Causes profondes
| Cause | Mécanisme |
|---|---|
| Contexte incomplet | Le modĂšle devine |
| Ambiguïté | Choix probabiliste |
| Tokenisation | Perte de structure fine |
| Décodage | Variabilité aléatoire |
| Compression | Info perdue |
đ Exemple rĂ©el
Missing:
- model field
- import
- DB constraint
â hallucination probable
â ïž Causes invisibles
- Historique tronqué
- Conflits instructions
- Fichier partiel
- Prompt imprécis
đĄ Insight
đ Le modĂšle remplit les trous â parfois mal
đ§© Types dâerreurs
| Type | Exemple |
|---|---|
| Syntaxe | Indentation incorrecte |
| Import | Module oublié |
| API | Fonction inexistante |
| Logique | ordre faux |
| Perf | loop inefficace |
| Concurrency | race condition |
đ GravitĂ©
| Erreur | Impact |
|---|---|
| Syntaxe | Crash immédiat |
| Import | Crash runtime |
| Logique | Bug silencieux |
| Concurrency | Bug intermittent |
| Perf | Slow system |
đĄ Insight
đ Les bugs les plus dangereux sont silencieux
đ„ Hallucinations
Une hallucination = information inventée mais plausible.
User: "field status2"
Model: "self.status2" (nâexiste pas)
đ Cas typiques
- Champ DB inexistant
- API inventée
- ParamĂštre faux
- Structure incorrecte
Pourquoi ça arrive
Probabilité > Vérité
- Pattern appris
- Contexte incomplet
- Décodage aléatoire
đĄ Insight
đ Le modĂšle prĂ©fĂšre rĂ©pondre que dire "je ne sais pas"
đ ïž RĂ©duction des risques
| Action | Effet |
|---|---|
| Fichier exact | moins dâhallucination |
| Scope réduit | plus précis |
| Format strict | moins de bruit |
| Test demandé | validation implicite |
| HypothÚses demandées | transparence |
đŻ Prompt idĂ©al
Give:
- file
- function
- error
- constraints
Ask:
- patch only
- no refactor
- show assumptions
- include test
đĄ Insight
đ Tu dois guider le modĂšle comme un junior dev
đ§ Mental model correct
LLM = assistant probabiliste
â
compiler / runtime
đ RĂŽle rĂ©el
| LLM | Toi |
|---|---|
| Propose | Valide |
| AccélÚre | Corrige |
| SuggĂšre | Teste |
| Optimise | Décide |
đŻ Insight final
đ ChatGPT = accĂ©lĂ©rateur đ Toi = garant de la vĂ©ritĂ©
đ Le vrai problĂšme
Servir un LLM Ă grande Ă©chelle = problĂšme dâinfrastructure mondiale, pas juste dâIA.
Millions users
â
Millions requests
â
GPU clusters
â
Scheduling
â
Responses
đ Variables de charge
- Utilisateurs simultanés
- Taille contexte
- Longueur réponse
- ModÚle utilisé
- Outils appelés
â ïž Insight critique
đ Le GPU est la ressource rare đ Tout tourne autour de son optimisation
đ Facteurs critiques
| Facteur | Impact |
|---|---|
| Tokens input | â latence |
| Tokens output | â coĂ»t |
| Concurrence | â queue |
| ModĂšle large | ââ ressources |
đïž Architecture simplifiĂ©e
Client
â
API Gateway
â
Load balancer
â
Request router
â
Queue system
â
GPU cluster
â
Response stream
đĄ RĂ©partition
- Multi-datacenter
- Multi-région
- Failover automatique
- Load balancing global
đ§ RĂŽle des composants
| Composant | RĂŽle |
|---|---|
| Gateway | auth + validation |
| Router | choix modĂšle |
| Queue | gestion flux |
| GPU cluster | inférence |
| Streamer | envoi tokens |
đĄ Insight
đ Câest un systĂšme distribuĂ© complexe, pas un simple serveur
đŠ Queues & scheduling
Requests arrive
â
Queue
â
Scheduler
â
GPU assignment
đ StratĂ©gies
| Stratégie | But |
|---|---|
| FIFO | simple |
| Priority queue | VIP users |
| Batch scheduling | efficacité GPU |
| Dynamic routing | répartition charge |
â ïž Conflits
| Objectif | Opposition |
|---|---|
| Latency faible | Batching faible |
| Coût faible | Batching élevé |
đĄ Insight
đ Il faut arbitrer en permanence entre latence et coĂ»t
⥠Optimisations clés
| Technique | Effet |
|---|---|
| Batching | â throughput |
| KV cache | â compute |
| Prompt caching | â coĂ»t |
| Model routing | â ressources |
| Streaming | â UX |
đ Optimisations avancĂ©es
- Speculative decoding
- Quantization
- Distillation
- GPU parallelism
- Memory sharding
đĄ Insight
đ 90% du travail = optimisation infra
đ° CoĂ»t rĂ©el
| ĂlĂ©ment | Ordre |
|---|---|
| GPU H100 | 20k â 40k ⏠|
| Cluster IA | Millions ⏠|
| Inference cost | variable/token |
Facteurs coût
- Tokens
- ModĂšle
- Durée session
- Outils
â ïž Contraintes physiques
- VRAM limitée
- Puissance électrique
- Refroidissement
- Réseau
đĄ Insight
đ Le scaling est aussi un problĂšme matĂ©riel
đ€ Impact utilisateur
- Temps de réponse variable
- Différence heure/jour
- Priorité selon plan
- Qualité dépend modÚle
đ Creux horaires
Europe matin â souvent plus fluide Europe soir + US â plus chargĂ©
đŻ Insight final
đ ChatGPT nâest pas lent đ Il est partagĂ© Ă lâĂ©chelle mondiale
đ§ Pipeline complet (rĂ©el)
1. User prompt
2. Tokenization
3. Context builder
4. Router / tools
5. Transformer
6. Inference GPU
7. Decoding
8. Safety layer
9. Streaming
đ Version simplifiĂ©e mentale
Input â Context â Predict â Filter â Stream
đĄ Insight
đ 80% des erreurs viennent du CONTEXTE, pas du modĂšle
⥠OĂč agir pour amĂ©liorer
| Ătape | Levier |
|---|---|
| Prompt | précision |
| Contexte | fichier réel |
| Routing | bon outil |
| Decoding | température basse |
| Validation | tests |
đ Concepts clĂ©s
| Terme | Explication |
|---|---|
| Token | Unité texte |
| Context window | mémoire visible |
| Embedding | vecteur numérique |
| Attention | liaison tokens |
| KV cache | accélération |
| Logits | scores tokens |
| Decoding | choix token |
âïž Concepts infra
| Terme | RĂŽle |
|---|---|
| Batching | optimise GPU |
| Queue | gĂšre flux |
| Streaming | UX rapide |
| Routing | choix modĂšle |
| Tools | actions externes |
| Guardrails | sécurité |
đ Prompt parfait (prod)
Context:
- framework + version
- file exact
- function target
- real error
Constraints:
- no refactor
- keep architecture
- performance safe
Output:
- BEFORE
- AFTER
- explanation
- test command
- expected output
đ Niveaux de prompt
| Type | Résultat |
|---|---|
| Vague | inutile |
| Moyen | correct |
| Précis | bon |
| Ultra précis | production-ready |
đĄ RĂšgle dâor
đ Ăcrire comme un ticket Jira senior
đ ïž Diagnostic rapide
- Code faux â manque contexte
- API inventĂ©e â hallucination
- Bug â logique approximĂ©e
- RĂ©ponse floue â prompt vague
đ Checklist debug
- file fourni ?
- fonction claire ?
- erreur réelle ?
- contraintes définies ?
đŻ Fix immĂ©diat
- réduire scope
- donner code réel
- demander patch minimal
- ajouter tests
đĄ Insight
đ Debug ChatGPT = debug CONTEXTE
â ïž Erreurs frĂ©quentes
| Erreur | Cause |
|---|---|
| Champ inexistant | hallucination |
| Import manquant | approximation |
| Bug logique | simplification |
| Perf faible | pattern générique |
| Race condition | ignorée |
đ„ Erreurs dangereuses
- bugs silencieux
- data corruption
- duplication
- latence cachée
đĄ Insight
đ Plus câest subtil â plus câest dangereux
đ§ Mental model correct
LLM = assistant probabiliste
â
engine d'exécution
đ RĂŽle rĂ©el
| LLM | Toi |
|---|---|
| propose | valide |
| accélÚre | corrige |
| suggestion | décision |
| approxime | garantit |
đŻ RĂ©sumĂ© ultime
Good prompt â good context â good code
Bad prompt â hallucination
