Exercices Prompt Engineering Gerer un historique de conversation
🎉

Bravo!

Intermédiaire 🧠 Fondamentaux 20 XP 0 personnes ont réussi

Gerer un historique de conversation

Si tu as deja construit un chatbot, tu sais que l'API OpenAI ne se souvient de rien entre les appels. Elle est stateless. Si tu veux que le modele sache ce qui s'est dit avant, c'est a toi de renvoyer tout l'historique a chaque requete. C'est la base de tout chatbot qui fonctionne.

Concretement, tu maintiens une liste de messages et tu l'enrichis a chaque echange :

historique = [
{'role': 'system', 'content': 'Tu es un assistant.'},
{'role': 'user', 'content': 'Je m appelle Alice.'},
{'role': 'assistant', 'content': 'Bonjour Alice!'},
{'role': 'user', 'content': 'Comment je m appelle ?'},
]

En renvoyant tout ca a l'API, le modèle voit l'historique et peut repondre 'Tu t appelles Alice.'.

Écris une classe Conversation qui gere cet historique :
- __init__(self, system_prompt) : initialise l'historique avec le message system
- ajouter_user(self, message) : ajoute un message user a l'historique
- ajouter_assistant(self, message) : ajoute un message assistant a l'historique
- get_messages(self) : retourne la liste complete des messages
- nb_messages(self) : retourne le nombre total de messages (system inclus)

Exemple :
conv = Conversation('Tu es un assistant.')
conv.ajouter_user('Bonjour')
conv.ajouter_assistant('Salut!')
conv.nb_messages() retourne 3
conv.get_messages() retourne la liste des 3 messages

Tests (1/1)

Tests
conv = Conversation('Tu es un assistant.')
assert conv.nb_messages() == 1, 'Apres init, il doit y avoir 1 message (system)'
assert conv.get_messages()[0] == {'role': 'system', 'content': 'Tu es un assistant.'}, 'Le premier message doit etre le system prompt'

conv.ajouter_user('Bonjour')
assert conv.nb_messages() == 2, 'Apres ajouter_user, il doit y avoir 2 messages'
assert conv.get_messages()[-1] == {'role': 'user', 'content': 'Bonjour'}, 'Le dernier message doit etre celui de user'

conv.ajouter_assistant('Salut!')
assert conv.nb_messages() == 3, 'Apres ajouter_assistant, il doit y avoir 3 messages'
assert conv.get_messages()[-1]['role'] == 'assistant', 'Le dernier role doit etre assistant'

conv.ajouter_user('Ca va ?')
conv.ajouter_assistant('Oui, merci!')
assert conv.nb_messages() == 5, 'Apres 2 echanges, il doit y avoir 5 messages'
msgs = conv.get_messages()
roles = [m['role'] for m in msgs]
assert roles == ['system', 'user', 'assistant', 'user', 'assistant'], 'Les roles doivent alterner correctement'

Indices (3 disponibles)

solution.py
Non stockée