Comprendre l’interface de conversation
Découvrez le fonctionnement des interfaces de conversation LLM : rôles, tours et contexte de session.
Comprendre l’interface de conversation est une leçon AI Prompt Engineering gratuite sur CoddyKit. Ceci est la leçon 1 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage AI Prompt Engineering, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours AI Prompt Engineering comprend 4 leçons au total.
Les trois rôles
Toute conversation avec un LLM repose sur trois rôles : système, utilisateur et assistant.
Le rôle system définit les règles et la personnalité avant le début de la conversation. Le rôle user correspond aux messages que vous envoyez. Le rôle assistant correspond aux réponses du modèle.
import anthropic
client = anthropic.Anthropic(api_key='sk-ant-your-key-here')
message = client.messages.create(
model='claude-opus-4-5',
max_tokens=256,
system='You are a helpful cooking assistant.',
messages=[
{'role': 'user', 'content': 'What is mise en place?'}
]
)
print(message.content[0].text)Le message système
Le message système est le manuel d’instructions du modèle. Il s’exécute avant le premier tour de parole de l’utilisateur et reste actif pendant toute la session.
Utilisez-le pour définir la personnalité, le ton, les restrictions de domaine ou le format de sortie. Le modèle le considère comme son contexte directeur pendant toute la conversation.
import openai
client = openai.OpenAI(api_key='sk-your-key-here')
response = client.chat.completions.create(
model='gpt-4o',
messages=[
{
'role': 'system',
'content': 'You are a senior Python engineer. '
'Always include type hints and docstrings in your examples.'
},
{
'role': 'user',
'content': 'Show me a function that parses JSON safely.'
}
]
)
print(response.choices[0].message.content)Tours de parole et déroulement de la conversation
Une conversation est une suite de tours de parole. Chaque tour alterne : l’utilisateur parle, l’assistant répond, puis l’utilisateur reprend la parole.
À chaque requête, le modèle voit l’intégralité de l’historique des tours de parole. C’est ce qui donne l’impression d’un dialogue continu — mais, techniquement, chaque appel à l’interface de programmation est sans état et reçoit à chaque fois l’intégralité du contexte.
import openai
client = openai.OpenAI(api_key='sk-your-key-here')
# Each call sends the FULL conversation history
history = [
{'role': 'system', 'content': 'You are a geography tutor.'},
{'role': 'user', 'content': 'What is the capital of France?'},
{'role': 'assistant', 'content': 'The capital of France is Paris.'},
{'role': 'user', 'content': 'And its population?'} # follow-up turn
]
response = client.chat.completions.create(
model='gpt-4o',
messages=history
)
print(response.choices[0].message.content)Contexte de session
Le contexte de session est la mémoire évolutive de votre conversation. Chaque message de l’utilisateur et de l’assistant s’accumule dans le tableau d’historique.
Le modèle ne dispose d’aucun espace mémoire distinct : il raisonne uniquement à partir de ce qu’il voit dans la fenêtre de contexte actuelle. Si vous commencez une nouvelle session, le modèle ne garde aucun souvenir des sessions précédentes, sauf si vous réinjectez ces informations.
import anthropic
client = anthropic.Anthropic(api_key='sk-ant-your-key-here')
# Simulating 3-turn session context
conversation = [
{'role': 'user', 'content': 'My name is Alex.'},
{'role': 'assistant', 'content': 'Nice to meet you, Alex!'},
{'role': 'user', 'content': 'What is 5 times 7?'},
{'role': 'assistant', 'content': '5 times 7 is 35.'},
{'role': 'user', 'content': 'Can you repeat my name?'} # uses session context
]
response = client.messages.create(
model='claude-opus-4-5',
max_tokens=128,
messages=conversation
)
print(response.content[0].text) # expects: Your name is Alex.Structure de l’historique des messages
L’historique des messages est simplement une liste de dictionnaires, dont chacun contient une clé role et une clé content.
Vous gérez vous-même cette liste dans le code. Après chaque réponse de l’assistant, vous utilisez append pour ajouter sa réponse, puis vous utilisez append pour ajouter le message utilisateur suivant — et vous renvoyez toute la liste lors de l’appel suivant.
import openai
client = openai.OpenAI(api_key='sk-your-key-here')
def chat(history, user_message):
history.append({'role': 'user', 'content': user_message})
response = client.chat.completions.create(
model='gpt-4o',
messages=history
)
reply = response.choices[0].message.content
history.append({'role': 'assistant', 'content': reply})
return reply, history
history = [{'role': 'system', 'content': 'You are a math tutor.'}]
reply, history = chat(history, 'What is a prime number?')
print(reply)
print('History length:', len(history))Explication des limites de jetons
Chaque modèle possède une fenêtre de contexte mesurée en jetons. Un jeton représente environ 4 caractères ou 0,75 mot en anglais.
Votre entrée (système + historique complet) et la sortie du modèle comptent toutes deux dans cette limite. GPT-4o prend en charge 128 k jetons ; Claude Opus 4.5 en prend en charge 200 k. Lorsque la limite est atteinte, les anciens messages doivent être supprimés ou résumés.
import tiktoken
# Count tokens before sending to avoid exceeding the limit
encoding = tiktoken.encoding_for_model('gpt-4o')
messages = [
{'role': 'system', 'content': 'You are a helpful assistant.'},
{'role': 'user', 'content': 'Explain quantum entanglement in simple terms.'}
]
total_tokens = 0
for msg in messages:
total_tokens += len(encoding.encode(msg['content']))
total_tokens += 4 # overhead per message
print(f'Estimated input tokens: {total_tokens}')
print(f'GPT-4o limit: 128,000 tokens')
print(f'Budget remaining: {128000 - total_tokens:,} tokens')Ce qui se passe à la limite de jetons
Lorsque l'historique de la conversation dépasse la fenêtre de contexte, trois options s'offrent à vous :
- Tronquer — supprimer les messages les plus anciens
- Résumer — demander au modèle de condenser les échanges précédents en un bref résumé
- Fenêtre glissante — ne conserver que les N derniers messages
Choisir la mauvaise stratégie peut amener le modèle à perdre un contexte essentiel et à fournir des réponses incohérentes.
def trim_history(history, max_messages=10, keep_system=True):
'''Keep the system message and the last N non-system messages.'''
system_msgs = [m for m in history if m['role'] == 'system']
non_system = [m for m in history if m['role'] != 'system']
if len(non_system) > max_messages:
non_system = non_system[-max_messages:]
print(f'Trimmed to last {max_messages} messages.')
return system_msgs + non_system if keep_system else non_system
history = [{'role': 'system', 'content': 'You are a tutor.'}]
for i in range(15):
history.append({'role': 'user', 'content': f'Question {i}'})
history.append({'role': 'assistant', 'content': f'Answer {i}'})
trimmed = trim_history(history, max_messages=6)
print('Trimmed history length:', len(trimmed))Le contexte multi-tours en pratique
Voyons le contexte en action. Dans une conversation à plusieurs tours, le modèle utilise chaque message précédent pour répondre correctement aux questions de suivi.
C'est pourquoi vous pouvez dire « expliquez cela plus simplement » sans répéter ce que désignait « cela » : le modèle voit l'historique complet et sait à quoi vous faites référence.
import openai
client = openai.OpenAI(api_key='sk-your-key-here')
history = [{'role': 'system', 'content': 'You are a science teacher.'}]
# Turn 1
history.append({'role': 'user', 'content': 'What is photosynthesis?'})
r1 = client.chat.completions.create(model='gpt-4o', messages=history)
reply1 = r1.choices[0].message.content
history.append({'role': 'assistant', 'content': reply1})
# Turn 2 — refers to prior answer without repeating it
history.append({'role': 'user', 'content': 'Can you explain that using only 3 bullet points?'})
r2 = client.chat.completions.create(model='gpt-4o', messages=history)
print(r2.choices[0].message.content)API sans état, expérience utilisateur avec état
Voici une idée essentielle : l'API est totalement sans état. Le serveur ne conserve rien entre deux appels.
Les produits de conversation comme ChatGPT donnent l'illusion d'une mémoire en stockant l'historique des conversations dans leur propre base de données et en le réinjectant dans chaque appel d'API. Vous pouvez créer vous-même le même mécanisme.
# Illustration: two isolated API calls vs one with history
import openai
client = openai.OpenAI(api_key='sk-your-key-here')
# ❌ WITHOUT history — model has no memory
r1 = client.chat.completions.create(
model='gpt-4o',
messages=[{'role': 'user', 'content': 'My dog is named Biscuit.'}]
)
r2 = client.chat.completions.create(
model='gpt-4o',
messages=[{'role': 'user', 'content': "What's my dog's name?"}]
)
print('Without history:', r2.choices[0].message.content) # will not know
# ✅ WITH history injected
r3 = client.chat.completions.create(
model='gpt-4o',
messages=[
{'role': 'user', 'content': 'My dog is named Biscuit.'},
{'role': 'assistant', 'content': 'Got it, your dog is named Biscuit!'},
{'role': 'user', 'content': "What's my dog's name?"}
]
)
print('With history:', r3.choices[0].message.content)Conseils pratiques pour utiliser l'interface de conversation
Pour tirer le meilleur parti de l'interface de conversation :
- Placez les instructions persistantes dans le message système, plutôt que de les répéter à chaque tour de l'utilisateur
- Gardez les tours précédents concis — un historique verbeux consomme rapidement les jetons
- Commencez une nouvelle session lorsque vous changez de sujet afin d'éviter de polluer le contexte
- Lors de la reprise d'un long projet, ne réinjectez que le sous-ensemble pertinent du contexte passé
# Good practice: compact system message + focused history
import anthropic
client = anthropic.Anthropic(api_key='sk-ant-your-key-here')
system = (
'You are a concise Python code reviewer. '
'Reply with: 1) one-line verdict, 2) top 3 issues, 3) fixed snippet.'
)
response = client.messages.create(
model='claude-opus-4-5',
max_tokens=512,
system=system,
messages=[
{'role': 'user', 'content': 'def add(a,b): return a+b\nprint(add(1,2))'}
]
)
print(response.content[0].text)Récapitulatif : l'interface de conversation
Révisons les idées essentielles sur le fonctionnement de l'interface de conversation :
- Trois rôles : le système définit les règles, l'utilisateur envoie les invites et l'assistant répond
- L'historique complet est envoyé à chaque appel d'API — le serveur est sans état
- Les limites de jetons plafonnent le contexte total ; réduisez-le ou résumez-le lorsque vous vous en approchez
- Le contexte de session est simplement une liste que vous gérez dans votre propre code
- Commencez une nouvelle session lorsque vous changez de sujet afin de conserver un contexte propre
# Summary: minimal chat loop skeleton
import openai
client = openai.OpenAI(api_key='sk-your-key-here')
history = [{'role': 'system', 'content': 'You are a helpful assistant.'}]
def ask(question):
history.append({'role': 'user', 'content': question})
res = client.chat.completions.create(model='gpt-4o', messages=history)
answer = res.choices[0].message.content
history.append({'role': 'assistant', 'content': answer})
return answer
print(ask('Hello! What can you help me with?'))Vérification des connaissances
Évaluez votre compréhension des mécanismes de l'interface de conversation.
Un utilisateur commence une session entièrement nouvelle et demande à l'IA : « De quoi avons-nous discuté hier ? » L'IA n'a aucun souvenir de la session d'hier. Pourquoi ?
Ce que vous avez appris
Vous comprenez maintenant les fondements de toute interaction avec une IA conversationnelle :
- La structure des rôles système/utilisateur/assistant qui façonne chaque conversation
- La manière dont l'historique complet des messages est envoyé à chaque appel pour simuler une mémoire
- Pourquoi l'API est sans état et comment les produits de conversation construisent une mémoire par-dessus
- Comment les limites de jetons restreignent le contexte et comment les gérer
Ce modèle mental vous aidera à rédiger de meilleures invites et à créer des applications plus intelligentes reposant sur l'IA.
Questions Fréquemment Posées
La leçon « Comprendre l’interface de conversation » est-elle gratuite ?
Oui — le texte complet de « Comprendre l’interface de conversation » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours AI Prompt Engineering, passe à CoddyKit PRO. Le cours AI Prompt Engineering comprend 4 leçons au total.
Qu'est-ce que j'apprendrai dans « Comprendre l’interface de conversation » ?
Découvrez le fonctionnement des interfaces de conversation LLM : rôles, tours et contexte de session. Tu pratiques AI Prompt Engineering avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.
Dois-je avoir de l'expérience pour commencer AI Prompt Engineering ?
Aucune expérience préalable n'est requise. AI Prompt Engineering sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 1 sur 4.
Combien de temps prend la leçon « Comprendre l’interface de conversation » ?
La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.
Peux-tu écrire et exécuter du code dans cette leçon AI Prompt Engineering ?
Oui. Chaque leçon AI Prompt Engineering inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.
Toutes les leçons de ce cours
- Comprendre l’interface de conversation
- Types de requêtes que l’IA peut traiter
- Comment l’IA génère des réponses
- Ce que l’IA ne peut pas faire