Premiers pas
Commençons notre exploration très doucement : pas de chatbot, encore moins d'agent...
Nous allons simplement poser une question à un LLM (Google Gemini) et afficher sa réponse.
Commençons par importer les bibliothèques nécessaires :
from dotenv import load_dotenv
from openai import OpenAI
from IPython.display import Markdown, display
import os
load_dotenv()
load_dotenv
va nous permettre d'importer la clé d'API que nous avons mise dans le fichier .env
Bien que nous allons utiliser le LLM de Google, nous allons utiliser la bibliothèque fournie par OpenAI. Cette bibliothèque est aujourd'hui devenue un standard, la plupart des LLM utilisent cette bibliothèque (à l'exception des modèles proposés par Anthropic (Claude Opus, Claude Sonnet...)). Même si vous utilisez Ollama, la syntaxe restera la même.
Récupérons la clé d'API :
API_KEY = os.getenv('GOOGLE_API_KEY')
OpenAI
:
llm = OpenAI(api_key=API_KEY, base_url="https://generativelanguage.googleapis.com/v1beta/openai/")
base_url
changera en fonction du modèle utilisé. Si vous désirez utiliser un autre modèle, par exemple, Mistral, il faudra modifier le endpoint
(nous avons ici le endpoint
pour les modèles Gemini de Google).
puis nous créons notre message :
msg = [{'role':'user', 'content':'Que vaut 36+6 ?'}]
msg
est une liste de dictionnaire. Le message à proprement parlé est un dictionnaire qui contient 2 clés : une clé role
et une clé content
.
La clé role
peut prendre plusieurs valeurs : system
, user
, assistant
et tool
. Nous nous intéresserons ici uniquement à 2 valeurs :
- system
qui est utilisée pour définir le comportement et le contexte du modèle (à voir dans les prochains chapitres)
- user
qui correpond à l'utilisateur
content
correspond à la question (ou au message) envoyée au modèle.
Nous pouvons poser notre question au modèle :
response = llm.chat.completions.create(model = 'gemini-2.0-flash', messages = msg)
response
est une instance de la classe ChatCompletion
:
print(response)
ChatCompletion(id='W8VfaLq8IMXsld8PrfaIwQ8', choices=[Choice(finish_reason='stop', index=0, logprobs=None, message=ChatCompletionMessage(content='36 + 6 = 42\n', refusal=None, role='assistant', annotations=None, audio=None, function_call=None, tool_calls=None))], created=1751106907, model='gemini-2.0-flash', object='chat.completion', service_tier=None, system_fingerprint=None, usage=CompletionUsage(completion_tokens=10, prompt_tokens=8, total_tokens=18, completion_tokens_details=None, prompt_tokens_details=None))
Pour obtenir le texte généré par le modèle, il est nécessaire d'écrire :
answer = response.choices[0].message.content
print(answer)
36 + 6 = 42
Comme les réponses des LLM sont très souvent données au format markdown, il est possible d'écrire (utile uniquement dans un notebook jupyter) :
display(Markdown(answer))
36 + 6 = 42
Exercice : vous pouvez modifier la question dans la variable msg
.
Ce chapitre est terminé, vous pouvez passer au chapitre 3 qui est consacré à la notion de prompt
.
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/")
msg = [{'role':'user', 'content':'Que vaut 36+6 ?'}]
response = llm.chat.completions.create(model = 'gemini-2.0-flash', messages = msg)
answer = response.choices[0].message.content
display(Markdown(answer))