Aller au contenu

Le prompt

Voici la réponse donnée par chatGPT quand on lui demande ce qu'est un prompt :

Un prompt est l’instruction ou la question que tu poses à un LLM pour obtenir une réponse. Il joue un rôle central dans la qualité des résultats, et bien le formuler est une compétence essentielle en "prompt engineering".

Nous allons distinguer 2 parties dans le prompt : - une partie "système" qui va correpondre aux instructions générales données aux LLM (exemple : "Ton rôle est de répondre aux questions sur le réglement intérieur du lycée.") - une partie "utilisateur" qui peut correspondre à la demande de l'utilisateur

Dans ce chapitre nous allons écrire un prompt système afin de cadrer les réponses apportées à l'utilisateur : le modèle devra uniquement répondre aux questions concernant l'auteur science fiction Philip K Dick. Le reste du code sera identique que celui vu dans le chapitre précédent.

from dotenv import load_dotenv
from openai import OpenAI
from IPython.display import Markdown, display
import os
load_dotenv()

API_KEY = os.getenv('GOOGLE_API_KEY')
llm = OpenAI(api_key=API_KEY, base_url="https://generativelanguage.googleapis.com/v1beta/openai/")

prompt_system = """Tu dois uniquement parler de l'auteur de science Fiction Philip K Dick et uniquement de lui. 
Si l'utilisateur te pose une question sur un autre sujet, tu dois lui répondre que tu n'es pas autorisé à parler de ce sujet.
"""
msg_prompt_sys = [{'role' : 'system', 'content' : prompt_system}]
Rappel python : les 3 guillemets permettent de créer un chaîne de caractères sur plusieurs lignes.

Nous pouvons maintenant poser une première question au modèle :

msg_user_1 = [{'role' : 'user', 'content' : 'Quelle est la date de naissance de Philip K Dick ?'}]
Nous devons maintenant regrouper le prompt système et la question de l'utilisateur :

msg_1 = msg_prompt_sys + msg_user_1 #on rappelle que [a]+[b] = [a,b]
Et poser la question au modèle et afficher le résultat :

response = llm.chat.completions.create(model = 'gemini-2.0-flash', messages = msg_1)
answer = response.choices[0].message.content
display(Markdown(answer))
[Out]
Philip K. Dick est né le 16 décembre 1928.
Vous remarquerez que le modèle nous a donné la réponse à notre question. Il "connait" donc la naissance de Philip K Dick. Cela signifie qu'il a "croisé" cette information au cours de son entraînement. Nous verrons dans un prochain chapitre comment poser des questions sur un sujet que le modèle n'a pas "rencontré" durant son entraînement.

Essayons maintenant de lui poser une question qui n'a strictement rien à voir avec l'auteur américain :

msg_user_2 = [{'role' : 'user', 'content' : 'Quelle est la recette de la tarte aux pommes ?'}]
msg_2 = msg_prompt_sys + msg_user_2
response = llm.chat.completions.create(model = 'gemini-2.0-flash', messages = msg_2)
answer = response.choices[0].message.content
display(Markdown(answer))
[Out]
Je suis désolé, je ne suis autorisé qu'à parler de Philip K. Dick. Je ne peux pas te donner une recette de tarte aux pommes.

Vous pouvez constater que le modèle refuse de répondre à cette question. Le prompt a donc bien permis de "cadrer" les réponses du modèle.

Exercice : vous pouvez modifier le prompt et poser d'autres questions.

Ce chapitre est terminé, nous allons, dans le prochain chapitre, voir comment insérer un document dans le prompt afin de pouvoir poser des questions sur ce même document.

Code complet :

from dotenv import load_dotenv
from openai import OpenAI
from IPython.display import Markdown, display
import os
load_dotenv()

API_KEY = os.getenv('GOOGLE_API_KEY')
llm = OpenAI(api_key=API_KEY, base_url="https://generativelanguage.googleapis.com/v1beta/openai/")

prompt_system = """Tu dois uniquement parler de l'auteur de science Fiction Philip K Dick et uniquement de lui. 
Si l'utilisateur te pose une question sur un autre sujet, tu dois lui répondre que tu n'es pas autorisé à parler de ce sujet.
"""
msg_prompt_sys = [{'role' : 'system', 'content' : prompt_system}]

msg_user_1 = [{'role' : 'user', 'content' : 'Quelle est la date de naissance de Philip K Dick ?'}]
msg_1 = msg_prompt_sys + msg_user_1

response = llm.chat.completions.create(model = 'gemini-2.0-flash', messages = msg_1)
answer = response.choices[0].message.content
display(Markdown(answer))

msg_user_2 = [{'role' : 'user', 'content' : 'Quelle est la recette de la tarte aux pommes ?'}]
msg_2 = msg_prompt_sys + msg_user_2
response = llm.chat.completions.create(model = 'gemini-2.0-flash', messages = msg_2)
answer = response.choices[0].message.content
display(Markdown(answer))
[Out]
Philip K. Dick est né le 16 décembre 1928.
Je suis désolé, je ne suis pas autorisé à parler de ce sujet. Je peux seulement parler de Philip K. Dick.