Utiliser une IA avec Python
Comprendre comment interroger une IA, via une API REST, avec Python
Notions théoriques
Python, c'est quoi ?
- Python - Installation et découverte
- Python - conditions, boucles et fonctions
- Python - tuples, listes et dictionnaires
Une API, c'est quoi ?
API et intelligence artificielle
Une API (Application Programming Interface) est un ensemble de règles qui permet à 2 logiciels de communiquer entre eux.
L’IA utilisée ici est de type LLM (Large Language Model), un modèle de traitement du langage naturel entraîné à comprendre et générer du texte.
L’API permet d’envoyer une requête à un modèle d’IA et de recevoir une réponse générée automatiquement.
Quelle API utiliser ?

Nous allons utiliser OpenRouter, une alternative gratuite à OpenAI.
OpenRouter est une plateforme qui permet d’accéder à plusieurs modèles d'IA à travers une API unique :
- OpenRouter est gratuit dans sa version de base
- OpenRouter fonctionne avec une clé API que vous pouvez obtenir facilement
- OpenRouter permet d’accéder à des modèles de fournisseurs populaires tels que OpenAI, Google, Mistral, etc.
OpenRouter propose par exemple
Mistral 7B Instruct, qui est très performants et gratuits à utiliser.
Avec OpenRouter, vous n'avez pas besoin de créer un compte et une configuration spécifique pour chaque fournisseur d'IA.
OpenRouter joue un rôle d’intermédiaire entre les développeurs et les différents fournisseurs de modèles d’IA (comme OpenAI, Anthropic, Mistral, Cohere, etc.).
Comment fonctionne l’API OpenRouter ?

L’API d’OpenRouter fonctionne comme celle d’OpenAI :
- Vous envoyez un prompt (texte d’instruction)
- Vous recevez une réponse générée par l’IA
Voici la liste des modèles de génération de textes, gratuits, à faibles latences, disponibles sur OpenRouter :
Quelques exemples de modèles gratuits er rapides disponibles :
arcee-ai/trinity-mini:freenvidia/nemotron-3-nano-30b-a3b:freegoogle/gemma-3n-e2b-it:free
Pourquoi utiliser Python ?
Python est un langage simple, lisible, et très utilisé dans le domaine de l’IA.
Python permet d’envoyer des requêtes HTTP facilement, de traiter les réponses, et de construire rapidement des scripts pour interagir avec des modèles d’IA.
Fonctionnement général
Voici les grandes étapes pour utiliser OpenRouter avec Python :
- S’inscrire sur https://openrouter.ai pour obtenir une clé API (token ou jeton en français).
- Choisir un modèle (par exemple :
openai/gpt-3.5-turbo,mistralai/mistral-7b-instruct…). - Envoyer une requête POST en JSON (avec le token et la question) à l’URL de l’API.
- Lire la réponse et l’utiliser dans le programme.
OpenRouter est compatible avec la spécification de l’API d’OpenAI (https://platform.openai.com/docs/api-reference).
Format d’une requête à l’API
L’URL de l’API est :
https://openrouter.ai/api/v1/chat/completions
Le corps de la requête est un objet JSON contenant :
model: le nom du modèle à utilisermessages: une liste de messages simulant une conversation (avec les rôlessystem,user,assistant)temperature: un paramètre pour ajuster la créativité de la réponse
Exemple de corps JSON :
{
"model": "openai/gpt-3.5",
"messages": [
{"role": "user", "content": "Quelle différence majeure existe entre un virus et un cheval de Troie ?"}
],
"temperature": 0.7
}
Gestion de la clé API
La clé API est une chaîne secrète qui doit être transmise dans l’en-tête HTTP Authorization :
Authorization: Bearer VOTRE_CLE_API
Ne jamais publier une clé API sur Internet ou dans un dépôt public.
Avantages de l’API OpenRouter
- Accès unifié à plusieurs modèles
- Facilité d’utilisation avec Python
- Gratuit ou coût réduit selon le modèle choisi
- Documentation claire et rapide à prendre en main
Exemple pratique
Il est possible de créer un petit script Python qui envoie une question à un modèle d’IA via OpenRouter et affiche la réponse.
Voici un exemple complet :
import requests
import json
# Clé API personnelle (à remplacer par la vôtre)
API_KEY = "sk-xxxxxxxxxxxxxxxxxxxxxxxx"
# En-têtes HTTP
headers = {
"Authorization": f"Bearer {API_KEY}",
"Content-Type": "application/json"
}
# Corps de la requête
data = {
"model": "openai/gpt-3.5",
"messages": [
{"role": "user", "content": "Quelle différence majeure existe entre un virus et un cheval de Troie ?"}
],
"temperature": 0.7
}
# Envoi de la requête
response = requests.post(
"https://openrouter.ai/api/v1/chat/completions",
headers=headers,
data=json.dumps(data)
)
# Affichage de la réponse
if response.status_code == 200:
result = response.json()
print("Réponse de l'IA :")
print(result["choices"][0]["message"]["content"])
else:
print("Erreur :", response.status_code)
print(response.text)
Ce script permet :
- d’envoyer une question à l’IA
- de recevoir une réponse textuelle
- de comprendre comment structurer les requêtes
Explications détaillées du code
1. Importation des bibliothèques
import requests
import json
import requests: Cette ligne importe la bibliothèque externerequests. C'est un outil très populaire en Python pour effectuer des requêtes HTTP (demander des informations à un serveur web, comme on le fait avec un navigateur, mais ici de manière programmatique).import json: Cette ligne importe la bibliothèque standardjson. Elle sert à convertir des objets Python (comme des dictionnaires) en format texte JSON (que les API comprennent) et inversement.
2. Configuration de l'authentification
# Clé API personnelle (à remplacer par la vôtre)
API_KEY = "sk-xxxxxxxxxxxxxxxxxxxxxxxx"
API_KEY = ...: On définit une variable qui contient la "clé API". C'est un mot de passe technique qui prouve au serveur que vous êtes autorisé à utiliser le service.- Note : La valeur
"sk-..."est une fausse clé. Pour que le code fonctionne réellement, il faut la remplacer par une vraie clé valide.
- Note : La valeur
3. En-têtes HTTP (Headers)
# En-têtes HTTP
headers = {
"Authorization": f"Bearer {API_KEY}",
"Content-Type": "application/json"
}
headers = {...}: On crée un dictionnaire Python pour contenir les métadonnées de la requête."Authorization": f"Bearer {API_KEY}": Cette ligne dit au serveur "C'est moi et voici ma preuve".f"...": C'est une f-string (chaîne formatée pour l'interpolation) en Python, qui permet d'insérer la variableAPI_KEYdirectement à l'intérieur du texte.Bearer: Un standard de sécurité qui indique que la clé qui suit est un jeton d'accès (Bearerse traduit parPorteuren français).
"Content-Type": "application/json": On informe le serveur que les données qu'on lui envoie (le corps de la requête) sont au format JSON.
4. Préparation des données (Payload)
# Corps de la requête
data = {
"model": "openai/gpt-3.5",
"messages": [
{"role": "user", "content": "Quelle différence majeure existe entre un virus et un cheval de Troie ?"}
],
"temperature": 0.7
}
data = {...}: Ce dictionnaire contient les instructions et le contenu de ce qu'on envoie à l'IA."model": "openai/gpt-3.5": On précise quel model d'IA utiliser. Ici, on demande au serveur OpenRouter de nous connecter au modèle GPT-3.5 d'OpenAI."messages": [...]: C'est la liste des messages de la conversation."role": "user": Indique que c'est l'utilisateur humain qui parle."content": "...": C'est la question ou la consigne texte.
"temperature": 0.7: Ce paramètre contrôle la "créativité" de l'IA.- 0.0 = Réponses très rigides et déterministes.
- 1.0 = Réponses très aléatoires et créatives.
- 0.7 est un bon équilibre pour du texte naturel.
5. Envoi de la requête
# Envoi de la requête
response = requests.post(
"https://openrouter.ai/api/v1/chat/completions",
headers=headers,
data=json.dumps(data)
)
requests.post(...): Le verbePOSTest utilisé en HTTP pour envoyer des données complexes au serveur dans le corps de la requête (lepayload), contrairement au verbeGETqui peut envoyer des paramètres simples mais sert principalement à récupérer des ressources avec des paramètres qui transitent de manière visible dans l'URL."https://...": L'URL (adresse web) du point de terminaison (endpoint) de l'API. C'est la "boîte aux lettres" où on dépose notre demande.headers=headers: On attache les en-têtes (authentification, format) définis plus haut.data=json.dumps(data):data(notre dictionnaire Python) ne peut pas être envoyé tel quel sur le réseau.json.dumps(data)transforme ce dictionnaire en une chaîne de caractères texte au format JSON.- Le résultat est stocké dans la variable
response, qui contiendra la réponse du serveur.
6. Traitement de la réponse
# Affichage de la réponse
if response.status_code == 200:
response.status_code: Tout serveur HTTP renvoie un code numérique pour dire si ça a marché.- 200 signifie "OK" (Succès).
- 401 signifie "Non autorisé" (Mauvaise clé API).
- 500 signifie "Erreur serveur".
- Cette ligne vérifie donc : "Si tout s'est bien passé...".
result = response.json()
print("Réponse de l'IA :")
print(result["choices"][0]["message"]["content"])
result = response.json(): Le serveur nous a renvoyé du texte JSON. Cette fonction le convertit à nouveau en dictionnaire Python exploitable.print("Réponse de l'IA :"): Affiche simplement une légende dans la console.result["choices"][0]["message"]["content"]: C'est ici qu'on va chercher le texte précis généré par l'IA. Les réponses des API modernes sont structurées ainsi :choices: Une liste de réponses possibles (généralement une seule).[0]: On prend le premier élément de la liste.message: L'objet contenant le message.content: Le texte brut de la réponse.
else:
print("Erreur :", response.status_code)
print(response.text)
else: Si le code de statut n'était pas 200 (donc qu'il y a une erreur).print(...): On affiche le code d'erreur.print(response.text): On affiche le contenu brut de la réponse du serveur, qui contient souvent un message explicatif sur l'origine du problème (ex: "Invalid API Key").
Il est recommandé d’utiliser une bibliothèque comme python-dotenv pour stocker la clé API dans un fichier .env et éviter de l’écrire en dur dans le code.