Section 11.1.18 : Appeler une LLM API depuis Python
🎯 Objectif pédagogique
Intégrer l'IA générative dans votre code en appelant l'API d'un LLM (Large Language Model) depuis Python. Vous serez capable de faire appel à GPT-4, Claude ou un modèle open-source pour générer du texte, analyser des données et automatiser des tâches cognitives.
L'IA comme service — Le tournant
Marc a utilisé ChatGPT dans un navigateur. Pratique, mais limité. La vraie puissance vient quand on appelle l'IA depuis son code : automatiser l'analyse de 1 000 CV, générer des rapports personnalisés, créer un chatbot sur son site. C'est la différence entre utiliser l'IA et programmer l'IA.
Les principales APIs LLM
| Provider | Modèle | Prix (input/output) | Forces |
|---|---|---|---|
| OpenAI | GPT-4o | 2.50/10$ par 1M tokens | Le plus polyvalent |
| Anthropic | Claude 3.5 Sonnet | 3/15$ par 1M tokens | Raisonnement, sécurité |
| Gemini Pro | 1.25/5$ par 1M tokens | Multimodal | |
| Groq | Llama 3 70B | Gratuit (limité) | Ultra-rapide |
| Mistral | Mistral Large | 2/6$ par 1M tokens | Français, open-weight |
Appeler l'API OpenAI
pip install openai
from openai import OpenAI
import os
# Clé API depuis variable d'environnement (JAMAIS en dur !)
client = OpenAI(api_key=os.environ.get("OPENAI_API_KEY"))
response = client.chat.completions.create(
model="gpt-4o-mini",
messages=[
\{"role": "system", "content": "Tu es un assistant développeur expert."\},
\{"role": "user", "content": "Explique-moi async/await en JavaScript en 3 phrases."\}
],
max_tokens=200,
temperature=0.7
)
answer = response.choices[0].message.content
print(answer)
JAMAIS de clé API dans le code !
La clé API doit être dans un fichier .env (jamais committé sur Git). Marc a publié sa clé par erreur — 200$ de facture en 3 heures. Utilisez python-dotenv ou des variables d'environnement.
Utiliser un fichier .env
pip install python-dotenv
# .env (à la racine du projet, dans .gitignore !)
# OPENAI_API_KEY=sk-proj-votre-clé-ici
from dotenv import load_dotenv
import os
load_dotenv() # Charge le .env
api_key = os.getenv("OPENAI_API_KEY")
Les paramètres clés
| Paramètre | Rôle | Valeurs typiques |
|---|---|---|
model | Le modèle à utiliser | "gpt-4o-mini", "gpt-4o" |
messages | L'historique de conversation | Liste de {role, content} |
temperature | Créativité (0=déterministe, 2=chaos) | 0.3 analyse, 0.7 conversation, 1.0 créatif |
max_tokens | Longueur max de la réponse | 100-4000 |
system | Instructions de comportement | Le "prompt système" |
Roles dans la conversation
messages = [
# system : définit le comportement de l'IA
\{"role": "system", "content": "Tu es un analyste financier expert. Réponds en français."\},
# user : les messages de l'utilisateur
\{"role": "user", "content": "Analyse cette tendance : ventes +15% Q1, -3% Q2"\},
# assistant : les réponses précédentes de l'IA (pour le contexte)
\{"role": "assistant", "content": "La tendance montre un ralentissement..."\},
# user : nouveau message (avec le contexte précédent)
\{"role": "user", "content": "Quelles seraient tes recommandations ?"\}
]
Cas d'usage pratiques
1. Analyseur de code
def analyze_code(code_snippet):
response = client.chat.completions.create(
model="gpt-4o-mini",
messages=[
\{"role": "system", "content": "Tu es un code reviewer expert. Analyse le code et donne 3 suggestions d'amélioration. Sois concis."\},
\{"role": "user", "content": f"Analyse ce code :\n\n\{code_snippet\}"\}
],
temperature=0.3
)
return response.choices[0].message.content
review = analyze_code("""
def calc(x,y,op):
if op == '+': return x+y
if op == '-': return x-y
if op == '*': return x*y
if op == '/': return x/y
""")
print(review)
2. Générateur de contenu
def generate_blog_outline(topic, audience="développeurs débutants"):
response = client.chat.completions.create(
model="gpt-4o-mini",
messages=[
\{"role": "system", "content": f"Tu es un rédacteur tech. Crée un plan d'article pour \{audience\}."\},
\{"role": "user", "content": f"Crée un plan détaillé pour un article sur : \{topic\}"\}
],
temperature=0.7,
max_tokens=500
)
return response.choices[0].message.content
outline = generate_blog_outline("Comment débuter en Python en 2026")
print(outline)
Alternative gratuite : Groq (Llama 3)
from openai import OpenAI
# Groq utilise le même format que OpenAI !
client = OpenAI(
api_key=os.getenv("GROQ_API_KEY"),
base_url="https://api.groq.com/openai/v1"
)
response = client.chat.completions.create(
model="llama-3.3-70b-versatile",
messages=[
\{"role": "user", "content": "Bonjour ! Explique Docker en 2 phrases."\}
]
)
print(response.choices[0].message.content)
Le standard OpenAI
La plupart des providers (Groq, Together AI, Mistral, OpenRouter) utilisent le même format API que OpenAI. Changez juste base_url et api_key — le reste du code est identique. Apprenez le format OpenAI, vous connaissez tous les LLMs.
🏋️ Exercice pratique (25 minutes)
# Mini assistant de bootcamp
import os
from openai import OpenAI
# Utilisez Groq (gratuit) ou OpenAI
client = OpenAI(
api_key=os.getenv("GROQ_API_KEY"),
base_url="https://api.groq.com/openai/v1"
)
def ask_bootcamp_assistant(question, context=""):
system_prompt = """Tu es un assistant pédagogique pour un bootcamp Tech & IA.
Tu aides Marc, 34 ans, ex-analyste financier en reconversion.
Réponds de manière concise, avec des exemples pratiques.
Utilise des analogies financières quand c'est pertinent."""
messages = [\{"role": "system", "content": system_prompt\}]
if context:
messages.append(\{"role": "assistant", "content": context\})
messages.append(\{"role": "user", "content": question\})
response = client.chat.completions.create(
model="llama-3.3-70b-versatile",
messages=messages,
temperature=0.5,
max_tokens=300
)
return response.choices[0].message.content
# Test
print(ask_bootcamp_assistant("C'est quoi une API REST ? Explique comme si j'étais un trader."))
print("---")
print(ask_bootcamp_assistant("Quelle est la différence entre Python et JavaScript ?"))
Pourquoi stocker sa clé API dans un fichier .env plutôt que dans le code ?
Que contrôle le paramètre 'temperature' dans un appel LLM ?
Quel est l'avantage de la compatibilité API OpenAI de Groq ?