Skip to Content
APIProtocole compatible OpenAIResponses (Recommandé)

Responses API (Recommandé)

Créez des réponses de modèle. Prend en charge l’entrée de texte et d’images, génère une sortie texte ou JSON. Prend en charge l’appel de fonctions (Tool Calling), les réponses en streaming et les conversations multi-tours.

Recommandé pour les nouveaux projets. Il s’agit de la nouvelle génération d’API publiée par OpenAI. Comparée à Chat Completions, elle présente les avantages suivants :

  • Prompt Caching natifinstructions et input sont séparés, les instructions système servent automatiquement de préfixe de cache, le taux de hit du cache est plus élevé pour la partie préfixe inchangée lors des conversations multi-tours, permettant d’économiser jusqu’à 50 % des frais de tokens d’entrée tout en réduisant la latence
  • Mode item structuré — Formats d’entrée/sortie plus clairs, prise en charge native du flux d’appel d’outils
  • Événements de streaming plus riches — Types d’événements SSE granulaires, facilitant le rendu UI en temps réel

Endpoint

POST https://api.ofox.ai/v1/responses

Paramètres de requête

ParamètreTypeObligatoireDescription
modelstringIdentifiant du modèle, ex. openai/gpt-5.4-mini
inputstring | arrayContenu d’entrée, soit une chaîne de texte simple, soit un tableau de messages structurés
instructionsstringInstructions système (indépendantes de input, bénéficient automatiquement du Prompt Caching)
streambooleanActiver la réponse en streaming SSE, par défaut false
max_output_tokensnumberNombre maximum de tokens à générer
temperaturenumberTempérature d’échantillonnage 0-2, par défaut 1
top_pnumberParamètre d’échantillonnage nucleus
toolsarrayDéfinition des outils disponibles (Function Calling)
tool_choicestring | objectStratégie de sélection d’outils : auto, none ou outil spécifié
truncationstringStratégie de troncature : auto troncature automatique / disabled erreur en cas de dépassement (par défaut)
textobjectConfiguration du format de génération de texte
storebooleanStocker la réponse (par défaut true)
metadataobjectPaires clé-valeur de métadonnées personnalisées
providerobjectExtension OfoxAI : configuration de routage et repli

Format Input

input prend en charge deux formats :

1. Chaîne simple — Passez directement le texte

{ "input": "Bonjour, présentez-vous brièvement" }

2. Tableau de messages structurés — Conversations multi-tours et entrée multimodale

interface InputItem { type: 'message' role: 'user' | 'assistant' content: ContentPart[] id?: string // Obligatoire pour les messages assistant status?: 'completed' // Obligatoire pour les messages assistant } type ContentPart = | { type: 'input_text'; text: string } // Entrée texte utilisateur | { type: 'input_image'; image_url: string } // Entrée image | { type: 'output_text'; text: string; annotations?: any[] } // Sortie texte assistant

Lorsque vous incluez des messages avec le rôle assistant dans une conversation multi-tours, les champs id et status sont obligatoires. Responses API est conçue sans état, chaque requête doit transporter l’historique complet de la conversation.

Exemple de requête

Terminal
curl https://api.ofox.ai/v1/responses \ -H "Authorization: Bearer $OFOX_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "model": "openai/gpt-5.4-mini", "input": "Expliquez ce qu'est un API Gateway", "instructions": "Vous êtes un assistant technique utile, répondez en français.", "max_output_tokens": 1024 }'

Format de réponse

{ "id": "resp_abc123", "object": "response", "created_at": 1703123456, "model": "openai/gpt-5.4-mini", "status": "completed", "output": [ { "type": "message", "id": "msg_def456", "status": "completed", "role": "assistant", "content": [ { "type": "output_text", "text": "Un API Gateway (passerelle d'API) est un...", "annotations": [] } ] } ], "usage": { "input_tokens": 25, "output_tokens": 150, "total_tokens": 175 } }

Description des champs de réponse

ChampTypeDescription
idstringIdentifiant unique de la réponse, commençant par resp_
objectstringValeur fixe "response"
created_atnumberHorodatage de création (Unix en secondes)
modelstringID du modèle réellement utilisé
statusstringStatut de la réponse : completed, failed, in_progress, cancelled
outputarrayTableau d’items de sortie, contenant messages et appels d’outils
usageobjectStatistiques d’utilisation des tokens

Entrée de messages structurés

Utilisez un tableau de messages structurés pour les conversations multi-tours :

multi_turn.py
response = client.responses.create( model="openai/gpt-5.4-mini", input=[ { "type": "message", "role": "user", "content": [ {"type": "input_text", "text": "Quelle est la capitale de la France ?"} ] }, { "type": "message", "role": "assistant", "id": "msg_abc123", "status": "completed", "content": [ {"type": "output_text", "text": "La capitale de la France est Paris.", "annotations": []} ] }, { "type": "message", "role": "user", "content": [ {"type": "input_text", "text": "Combien d'habitants y vivent ?"} ] } ] ) print(response.output_text)

Réponse en streaming

Définissez stream: true pour activer la réponse en streaming SSE :

stream.py
stream = client.responses.create( model="openai/gpt-5.4-mini", input="Racontez-moi une blague sur la programmation", stream=True ) for event in stream: if event.type == "response.output_text.delta": print(event.delta, end="", flush=True)

Types d’événements en streaming

La réponse en streaming envoie les événements suivants via SSE :

data: {"type":"response.created","response":{"id":"resp_abc123","object":"response","status":"in_progress"}} data: {"type":"response.output_item.added","output_index":0,"item":{"type":"message","id":"msg_def456","role":"assistant","status":"in_progress","content":[]}} data: {"type":"response.content_part.added","output_index":0,"content_index":0,"part":{"type":"output_text","text":""}} data: {"type":"response.output_text.delta","output_index":0,"content_index":0,"delta":"Bon"} data: {"type":"response.output_text.delta","output_index":0,"content_index":0,"delta":"jour"} data: {"type":"response.output_item.done","output_index":0,"item":{"type":"message","id":"msg_def456","role":"assistant","status":"completed","content":[{"type":"output_text","text":"Bonjour..."}]}} data: {"type":"response.completed","response":{"id":"resp_abc123","object":"response","status":"completed","usage":{"input_tokens":12,"output_tokens":45,"total_tokens":57}}} data: [DONE]
Type d’événementDescription
response.createdObjet réponse créé
response.output_item.addedNouvel item de sortie ajouté
response.content_part.addedNouveau fragment de contenu ajouté
response.output_text.deltaIncrément de texte (sortie token par token)
response.output_item.doneItem de sortie terminé
response.completedRéponse entièrement terminée
response.function_call_arguments.deltaIncrément des arguments d’appel de fonction
response.function_call_arguments.doneArguments d’appel de fonction terminés

Function Calling

Responses API prend en charge nativement l’appel d’outils :

tools.py
response = client.responses.create( model="openai/gpt-5.4-mini", input="Quel temps fait-il aujourd'hui à Paris ?", tools=[ { "type": "function", "name": "get_weather", "description": "Obtenir la météo actuelle d'une ville donnée", "parameters": { "type": "object", "properties": { "location": { "type": "string", "description": "Nom de la ville, ex. Paris" }, "unit": { "type": "string", "enum": ["celsius", "fahrenheit"] } }, "required": ["location"] } } ], tool_choice="auto" ) # Traiter les appels d'outils for item in response.output: if item.type == "function_call": print(f"Appel de fonction : {item.name}") print(f"Arguments : {item.arguments}")

Format de réponse d’appel d’outil

Lorsque le modèle appelle un outil, output contient un item de type function_call :

{ "id": "resp_abc123", "object": "response", "status": "completed", "output": [ { "type": "function_call", "id": "fc_abc123", "call_id": "call_xyz789", "name": "get_weather", "arguments": "{\"location\":\"Paris\",\"unit\":\"celsius\"}" } ], "usage": { "input_tokens": 45, "output_tokens": 25, "total_tokens": 70 } }

Soumettre les résultats d’outils

Renvoyez les résultats d’exécution des outils au modèle, en incluant la chaîne d’appel complète dans input :

# Deuxième requête : soumettre les résultats d'outils response = client.responses.create( model="openai/gpt-5.4-mini", input=[ { "type": "message", "role": "user", "content": [{"type": "input_text", "text": "Quel temps fait-il aujourd'hui à Paris ?"}] }, { "type": "function_call", "id": "fc_abc123", "call_id": "call_xyz789", "name": "get_weather", "arguments": "{\"location\":\"Paris\",\"unit\":\"celsius\"}" }, { "type": "function_call_output", "id": "fco_abc123", "call_id": "call_xyz789", "output": "{\"temperature\":\"22°C\",\"condition\":\"ensoleillé\"}" } ] ) print(response.output_text) # => "Il fait beau aujourd'hui à Paris, avec une température de 22°C, idéal pour les activités en plein air."

Options Tool Choice

ValeurDescription
"auto"Le modèle décide lui-même s’il appelle un outil (par défaut)
"none"Interdire les appels d’outils
{"type": "function", "name": "tool_name"}Forcer l’appel d’un outil spécifié

Comparaison avec Chat Completions

CaractéristiqueChat CompletionsResponses API
Endpoint/v1/chat/completions/v1/responses
Format d’entréeTableau messagesChaîne input ou tableau d’items structurés
Instructions systèmeMessage role: "system"Paramètre instructions (cache indépendant)
Prompt CachingInstructions système mélangées dans messages, préfixe de cache instableinstructions passées indépendamment, cache automatique, taux de hit plus élevé
Format de sortiechoices[0].message.contentoutput[0].content[0].text ou output_text
Appel d’outilstool_calls dans messageItem de sortie function_call indépendant
Résultat d’outilMessage role: "tool"Item d’entrée function_call_output
Événements de streamingchat.completion.chunkTypes d’événements structurés (response.*)
Champs de tokensprompt_tokens / completion_tokensinput_tokens / output_tokens

Les deux API sont utilisables en production. Si vous avez déjà une intégration Chat Completions, aucune migration n’est nécessaire. Responses API est recommandée pour les nouveaux projets, surtout pour les scénarios nécessitant des flux d’appel d’outils complexes ou des appels à haute fréquence (qui peuvent pleinement tirer parti du cache pour réduire les coûts). Voir le guide d’appel de fonctions.

Last updated on