# Qu’est-ce que l’API Responses, et faut-il quitter Chat Completions?

Date: 2025-03-24 · Author: Robert Scales · https://guidetoartificialintelligence.com/fr/apprendre/api-responses-quitter-chat-completions/

**Answer:** L’API Responses est la nouvelle façon d’appeler les modèles d’OpenAI : un seul point de terminaison qui reçoit vos instructions et vos données d’entrée, peut conserver la conversation du côté d’OpenAI et peut utiliser des outils intégrés comme la recherche Web. Chat Completions reste pris en charge; passez donc à Responses si vous voulez ces outils ou un code plus simple pour les conversations à plusieurs tours, sinon rien ne presse.

Une **API** (interface de programmation d’applications) est la façon dont un programme, plutôt qu’une personne dans une fenêtre de clavardage, communique avec un modèle. Jusqu’ici, le point de terminaison le plus adopté d’OpenAI est **Chat Completions** : vous envoyez une liste de messages, chacun avec un rôle comme « system » ou « user », et vous recevez une réponse. Le 11 mars, OpenAI a ajouté l’**API Responses**, qu’elle présente comme la simplicité de Chat Completions jointe aux fonctions d’outils de son ancienne API Assistants.

La question que se posent beaucoup de développeurs ce mois-ci est pratique : dois-je réécrire mon code? Non. OpenAI a déclaré qu’elle restait engagée envers Chat Completions et qu’elle continuerait d’y ajouter les nouveaux modèles lorsqu’ils ne dépendent pas d’outils intégrés. Elle recommande l’API Responses pour les nouveaux projets, et le README de sa bibliothèque Python la présente maintenant comme la principale façon d’appeler les modèles.

## Ce qui change vraiment

Trois différences comptent pour le code de tous les jours.

| | Chat Completions | API Responses |
|---|---|---|
| Ce que vous envoyez | Une liste `messages` avec des rôles | `instructions` plus `input` (une chaîne ou une liste d’éléments) |
| Lire la réponse | `completion.choices[0].message.content` | `response.output_text` |
| Historique de la conversation | Vous renvoyez tous les messages précédents à chaque fois | Vous pouvez passer `previous_response_id`, et l’API retrouve le reste |
| Outils intégrés | Non offerts (vous écrivez vos propres fonctions) | Recherche Web, recherche de fichiers et utilisation de l’ordinateur, choisies par le modèle |

La troisième ligne est le plus grand changement. Les réponses sont **avec état** (*stateful*) : OpenAI conserve chaque réponse, si bien qu’un appel ultérieur peut renvoyer à une réponse antérieure par son identifiant. L’exemple du livre de recettes (*cookbook*) montre aussi qu’on peut bifurquer à partir de n’importe quelle réponse antérieure, ce qui est pratique quand un utilisateur veut essayer une autre direction.

## Une migration complète

Voici un petit script qui rédige une réponse au courriel d’un client, puis la raccourcit. C’est la version Chat Completions, écrite avec la bibliothèque Python `openai` (version 1.x).

```python
from openai import OpenAI
client = OpenAI()   # lit OPENAI_API_KEY dans l’environnement

email = "Bonjour, ma commande no 1042 est arrivée avec un couvercle fissuré. Pouvez-vous m'aider?"
messages = [
    {"role": "developer", "content": "Tu rédiges des réponses de service à la clientèle chaleureuses et brèves."},
    {"role": "user", "content": f"Rédige une réponse à ce courriel :\n{email}"},
]
first = client.chat.completions.create(model="gpt-4o", messages=messages)
draft = first.choices[0].message.content

messages.append({"role": "assistant", "content": draft})
messages.append({"role": "user", "content": "Raccourcis-la à trois phrases."})
second = client.chat.completions.create(model="gpt-4o", messages=messages)
print(second.choices[0].message.content)
```

Et voici la même tâche avec l’API Responses. Mettez d’abord la bibliothèque à jour (`pip install --upgrade openai`), puisque la prise en charge est arrivée avec la version du 11 mars.

```python
from openai import OpenAI
client = OpenAI()

email = "Bonjour, ma commande no 1042 est arrivée avec un couvercle fissuré. Pouvez-vous m'aider?"
first = client.responses.create(
    model="gpt-4o",
    instructions="Tu rédiges des réponses de service à la clientèle chaleureuses et brèves.",
    input=f"Rédige une réponse à ce courriel :\n{email}",
)
print(first.output_text)

second = client.responses.create(
    model="gpt-4o",
    instructions="Tu rédiges des réponses de service à la clientèle chaleureuses et brèves.",
    input="Raccourcis-la à trois phrases.",
    previous_response_id=first.id,
)
print(second.output_text)
```

Le deuxième appel ne reconstruit plus la liste des messages; `previous_response_id` indique à l’API quelle conversation poursuivre. Les consignes de type système passent dans `instructions`. Tout le reste, y compris le nom du modèle et votre clé d’API, reste pareil.

> **À essayer :** prenez un script que vous exécutez déjà avec Chat Completions, remplacez seulement le premier appel par `client.responses.create` et affichez `output_text`. Quand les deux versions vous donnent des réponses comparables, faites passer les tours suivants à `previous_response_id`.

## Faut-il changer?

Une règle simple :

- **Restez sur Chat Completions** si votre application fonctionne, envoie des questions isolées ou gère son propre historique, et n’a besoin d’aucun outil intégré. Restez-y aussi si vous utilisez d’autres fournisseurs qui reprennent le format de Chat Completions, puisque votre code fonctionne alors d’un service à l’autre.
- **Passez à Responses** pour les nouveaux projets, pour les assistants à plusieurs tours où renvoyer l’historique est une corvée, ou si vous voulez la recherche Web ou la recherche de fichiers sans les construire vous-même.
- **Planifiez une migration si vous utilisez l’API Assistants.** OpenAI compte la déprécier une fois que Responses offrira les mêmes fonctions, avec une fermeture visée vers le milieu de 2026.

Une mise en garde pour les projets soucieux de la vie privée : les conversations avec état signifient que le contenu est stocké sur les serveurs d’OpenAI. OpenAI affirme ne pas entraîner ses modèles sur les données des entreprises par défaut, mais vérifiez que ce stockage respecte vos propres règles avant d’y faire passer les courriels de vos clients.

## Qu’apportent les outils intégrés comme la recherche Web?

Avec Chat Completions, un outil est quelque chose que vous construisez : vous décrivez une fonction, le modèle la demande, votre code l’exécute et renvoie le résultat. C’est l’**appel de fonctions** (*function calling*), et il fonctionne toujours dans les deux API. Les outils intégrés sont différents : c’est OpenAI qui les exécute. Vous les énumérez dans la requête et le modèle décide s’il les utilise, le tout en un seul appel.

Ajouter la recherche Web au deuxième script prend une ligne : `tools=[{"type": "web_search_preview"}]` dans `client.responses.create`. Le modèle peut alors chercher de l’information à jour et renvoyer une réponse avec des sources citées, en utilisant les mêmes modèles de recherche que la recherche de ChatGPT. OpenAI annonce la recherche Web à 30 $ US par millier de requêtes avec GPT-4o et à 25 $ US avec GPT-4o mini, en plus du coût normal des jetons; faites donc d’abord l’essai avec quelques requêtes.

Les autres outils intégrés suivent le même principe. La **recherche de fichiers** parcourt les documents que vous avez téléversés dans un magasin de vecteurs (*vector store*, une base de données qui trouve les passages par leur sens), et l’**utilisation de l’ordinateur** (*computer use*), un aperçu de recherche (*research preview*) offert à certains comptes, permet à un modèle de faire fonctionner un navigateur ou un bureau. L’avantage : moins de pièces mobiles dans votre code; la contrepartie : moins de contrôle sur la façon exacte dont la recherche est faite, alors continuez de vérifier les sources que cite le modèle.

## Sources

- New tools for building agents: https://openai.com/index/new-tools-for-building-agents/
- OpenAI Python API library (README): https://github.com/openai/openai-python/blob/2954945ecc185259cfd7cd33c8cbc818a88e4e1b/README.md
- Web Search and States with Responses API: https://github.com/openai/openai-cookbook/blob/a7967b280eaa96d540adcfc4cdf500e469dbe9af/examples/responses_api/responses_example.ipynb
