Utiliser une IA avec Python
Comprendre comment interroger une IA, via une API REST, avec Python
Notions théoriques
Une API, c'est quoi ?
Python, c'est quoi ?
- Python - Installation et découverte
- Python - conditions, boucles et fonctions
- Python - tuples, listes et dictionnaires
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.
Test de mémorisation/compréhension
TP pour réfléchir et résoudre des problèmes
Préparation
- Créer un compte sur OpenRouter : https://openrouter.ai/
- Obtenir une clé API (token) depuis la page des paramètres : https://openrouter.ai/settings/keys

- Installer Python 3.x sur votre machine si ce n’est pas déjà fait : https://www.python.org/downloads/
- Installer un éditeur de code (par exemple : VSCode)
- Installer les bibliothèques Python nécessaires :
requestsetpython-dotenv
pip install requests python-dotenv
Étape 1 : Créer un environnement de travail propre
- Dans le dossier
Documents, créer un nouveau dossier nommétp_openrouter. - Initialiser un projet Python dans ce dossier.
- Créer un fichier
main.py. - Créer un fichier
.envpour stocker la clé API. - Installer les bibliothèques nécessaires (
requestsetpython-dotenv).
Une solution
Vous devez être connecté pour voir le contenu.
Étape 2 : Charger la clé API depuis le fichier .env
- Modifier le fichier
main.pypour lire la clé API depuis le fichier.envà l’aide depython-dotenv.
Une solution
Vous devez être connecté pour voir le contenu.
Exécuter le script pour vérifier que la clé est bien chargée :
python main.py
Étape 3 : Construire le corps de la requête à envoyer à l’API
- Créer un dictionnaire Python nommé
datacontenant :- le modèle
arcee-ai/trinity-mini:freeounvidia/nemotron-3-nano-30b-a3b:freeougoogle/gemma-3n-e2b-it:free - un message de type
useravec une question libre (ex. : "Quelle différence majeure existe entre un virus et un cheval de Troie ?") - une température de 0.7
- le modèle
Une solution
Vous devez être connecté pour voir le contenu.
Étape 4 : Préparer les en-têtes HTTP de la requête
- Créer un dictionnaire
headerscontenant :- l’en-tête
Authorizationavec la clé API - l’en-tête
Content-Typeavec la valeurapplication/json
- l’en-tête
Une solution
Vous devez être connecté pour voir le contenu.
Étape 5 : Envoyer la requête POST à l’API OpenRouter
- Envoyer une requête HTTP POST à l’URL
https://openrouter.ai/api/v1/chat/completions - Utiliser la bibliothèque
requestspour envoyer cette requête avec les en-têtes et le corps JSON - Stocker la réponse dans une variable
response
Une solution
Vous devez être connecté pour voir le contenu.
Étape 6 : Analyser la réponse de l’API
- Vérifier que le code de réponse HTTP est 200
- Extraire le contenu généré par l’IA
- Afficher ce contenu dans la console
Une solution
Vous devez être connecté pour voir le contenu.
Exécuter le script pour vérifier que tout fonctionne toujours et afficher la réponse de l’IA :
python main.py
Étape 7 : Tester avec plusieurs questions
- Modifier le contenu du message pour poser trois questions différentes à l’IA
- Exécuter le programme à chaque fois et observer les réponses
Une solution
Vous devez être connecté pour voir le contenu.
Exécuter le script pour vérifier que tout fonctionne toujours et poser chaque question :
python main.py
Étape 8 : Ajouter une saisie utilisateur pour interagir avec l’IA
- Modifier le script pour que l’utilisateur puisse taper sa question dans le terminal
- Utiliser
input()pour lire la question - Injecter cette question dans
data["messages"]
Une solution
Vous devez être connecté pour voir le contenu.
Exécuter le script pour vérifier que tout fonctionne toujours et poser une question personnalisée :
python main.py
Étape 9 : Ajouter une boucle pour poser plusieurs questions à la suite
- Ajouter une boucle
whilequi permet à l’utilisateur de poser plusieurs questions - Quitter la boucle si l’utilisateur tape
exitouquit
Une solution
Vous devez être connecté pour voir le contenu.
Exécuter le script pour vérifier que tout fonctionne toujours et poser plusieurs questions :
python main.py
Étape 10 : Enregistrer les échanges dans un fichier texte
- Ajouter une fonctionnalité pour sauvegarder chaque question et réponse dans un fichier
log.md - Ajouter un horodatage pour chaque échange
Une solution
Vous devez être connecté pour voir le contenu.
Exécuter le script pour vérifier que tout fonctionne toujours et enregistrer les échanges :
python main.py
TP Bonus : Résumer un texte avec l’IA
- Modifier le script pour lire un texte depuis un fichier
input.txt - Envoyer ce texte à l’IA en demandant un résumé
Une solution
Vous devez être connecté pour voir le contenu.
Exécuter le script pour vérifier que tout fonctionne toujours bien et obtenir le résumé :
python main.py