Python OpenAI
openai est une puissante bibliothèque Python permettant d'interagir avec la suite de modèles et de services d'OpenAI.
openai encapsule tous les appels d'API RESTful, permettant aux développeurs d'intégrer facilement de puissantes capacités d'IA — telles que le traitement du langage naturel, la génération d'images et la reconnaissance vocale — dans leurs applications Python.
Fonctionnalités clés :
- Génération de texte : utilisez des modèles tels que GPT-4 ou GPT-5 pour générer des articles, du code, des résumés, des conversations, et plus encore.
- Génération d'images : créez des images à partir de descriptions textuelles en utilisant les modèles DALL-E.
- Embeddings : convertissez du texte en représentations vectorielles, couramment utilisées pour des tâches telles que la recherche sémantique, la classification de texte et le clustering.
- Transcription audio : utilisez le modèle Whisper pour transcrire des fichiers audio en texte.
- Fine-tuning : Entraînez un modèle plus ciblé en fournissant votre propre jeu de données.
- API Assistants : Créez des applications complexes capables de comprendre le contexte, d’appeler des outils et de réaliser des interactions à long terme.
dépôt open source openai :https://github.com/openai/openai-python

Comment l’utiliser ?
Exigences :
- Version de Python : 3.9 ou supérieure.
- Dépendances : httpx (par défaut), aiohttp (en option), websockets (nécessaire pour l’API Realtime).
Tout d’abord, vous devez installer la bibliothèque openai avec pip :
pip install openai ou pip3 install openai
Ensuite, rendez-vous sur le site officiel d’OpenAIhttps://platform.openai.com/ pour créer un compte et générer une clé API sur la page des clés API.
Vérifiez la version installée :
import openai print(openai.__version__) # 输出当前 SDK 版本
Exemple
from openai import OpenAI
client = OpenAI(
# Ceci est la valeur par défaut et peut être omis
api_key="La clé API que vous avez demandée",
)
response = client.responses.create(
model="gpt-4o",
instructions="Vous êtes un assistant de codage qui parle comme un pirate.",
input="Comment vérifier si un objet Python est une instance d'une classe ?",
)
print(response.output_text)
Description du paramètre :
| Paramètre | Requis | Type | Description |
|---|---|---|---|
api_key |
Oui | str |
La clé OpenAI que vous avez demandée |
model |
Oui | str |
Spécifie le modèle OpenAI utilisé, déterminant la capacité, le niveau de raisonnement et le coût |
instructions |
non | str |
Prompt système, définissant l'identité du modèle, ses normes comportementales et son style d'expression, ayant la priorité surinput |
input |
Oui | str / list |
Contenu saisi par l'utilisateur, décrivant la question ou la tâche spécifique |
Modèles tiers
Accéder à OpenAI depuis la Chine reste quelque peu compliqué. De nombreux fournisseurs chinois prennent également en charge la compatibilité OpenAI, comme DeepSeek, Qwen et GLM.
DeepSeek
L'API DeepSeek est entièrement compatible avec le format d'API d'OpenAI. Il vous suffit de modifier quelques paramètres de configuration pour utiliser directement le SDK OpenAI ou des outils compatibles afin d'accéder à l'API DeepSeek.
| Paramètre | Valeur / Description |
|---|---|
| base_url | Requis, valeur fixe :https://api.deepseek.com(Vous pouvez également utiliserhttps://api.deepseek.com/v1, uniquement pour la compatibilité avec OpenAI ; v1 n'a aucun rapport avec les versions du modèle) |
| api_key | Requis. Vous devez d'abord demander une clé API dédiée sur le site officiel de DeepSeek (URL de demande :https://platform.deepseek.com/) |
| model | Requis. Le modèle à définir :
|
Exemple
from openai import OpenAI
client = OpenAI(
api_key=os.environ.get('DEEPSEEK_API_KEY'), # Il est recommandé de les configurer via des variables d'environnement ; vous pouvez aussi les coder en dur (non recommandé)
base_url="https://api.deepseek.com")
response = client.chat.completions.create(
model="deepseek-v4-flash",
messages=[
{"role": "system", "content": "Vous êtes un assistant serviable"},
{"role": "user", "content": "Bonjour"},
],
stream=False # stream=False non-streaming (renvoyé en une fois), stream=True streaming (renvoyé en temps réel)
)
print(response.choices[0].message.content)
Utilisation
Ensuite, nous utilisons le SDK OpenAI pour accéder aux modèles Qwen sur le service Bailian.
Exemple d'appel non-streaming
Exemple
import os
def get_response():
client = OpenAI(
api_key="sk-xxx", # Utilisez votre clé API Alibaba Cloud Bailian
base_url="https://dashscope.aliyuncs.com/compatible-mode/v1", # Remplissez le base_url du SDK DashScope
)
completion = client.chat.completions.create(
model="qwen-plus", # Ici, nous utilisons qwen-plus comme exemple ; vous pouvez modifier le nom du modèle selon vos besoins. Liste des modèles : https://help.aliyun.com/zh/model-studio/getting-started/models
messages=[{'role': 'system', 'content': 'Vous êtes un assistant serviable.'},
{'role': 'user', 'content': 'Qui êtes-vous ?'}]
)
# données JSON
#print(completion.model_dump_json())
print(completion.choices[0].message.content)
if __name__ == '__main__':
get_response()
L'exécution du code produit le résultat suivant :
I am Qwen, an ultra-large-scale language model independently developed by the Tongyi Laboratory under Alibaba Group. I can help you answer questions and create text, such as writing stories, official documents, emails, scripts, logical reasoning, programming, and more. I can also express opinions and play games. If you have any questions or need help, feel free to tell me at any time!
Exemple d'appel en streaming
Exemple
def get_response():
client = OpenAI(
api_key="sk-xxx",
base_url="https://dashscope.aliyuncs.com/compatible-mode/v1",
)
completion = client.chat.completions.create(
model="qwen-plus",
messages=[
{'role': 'system', 'content': 'Vous êtes un assistant serviable.'},
{'role': 'user', 'content': 'Qui êtes-vous ?'}
],
stream=True,
stream_options={"include_usage": True}
)
for chunk in completion:
# le chunk peut ne pas contenir choices ou delta
if hasattr(chunk, "choices") and len(chunk.choices) > 0:
choice = chunk.choices[0]
if hasattr(choice, "delta") and hasattr(choice.delta, "content"):
print(choice.delta.content, end='', flush=True)
if __name__ == '__main__':
get_response()
L'exécution du code produit le résultat suivant :
I am Qwen, an ultra-large-scale language model independently developed by the Tongyi Laboratory under Alibaba Group. I can help you answer questions and create text, such as writing stories, official documents, emails, scripts, logical reasoning, programming, and more. I can also express opinions and play games. If you have any questions or need help, feel free to tell me at any time!
Fonctionnalités phares
Capacité de vision
Prend en charge l'entrée d'images (URL ou encodage Base64) pour permettre une interaction multimodale.
Entrée d'URL d'image :
Exemple
img_url = "https://upload.wikimedia.org/wikipedia/commons/thumb/d/d5/2023_06_08_Raccoon1.jpg/1599px-2023_06_08_Raccoon1.jpg"
response = client.responses.create(
model="gpt-5.2",
input=[
{
"role": "user",
"content": [
{"type": "input_text", "text": prompt},
{"type": "input_image", "image_url": img_url},
],
}
],
)
print(response.output_text)
Entrée d'image encodée en Base64 :
Exemple
from openai import OpenAI
client = OpenAI()
prompt = "Que contient cette image ?"
# Lire une image locale et l'encoder en Base64
with open("path/to/image.png", "rb") as image_file:
b64_image = base64.b64encode(image_file.read()).decode("utf-8")
response = client.responses.create(
model="gpt-5.2",
input=[
{
"role": "user",
"content": [
{"type": "input_text", "text": prompt},
{"type": "input_image", "image_url": f"data:image/png;base64,{b64_image}"},
],
}
],
)
Utilisation asynchrone (usage asynchrone)
Remplacer OpenAI par AsyncOpenAI et appeler l'API avec await :
Exemple asynchrone de base :
Exemple
import asyncio
from openai import AsyncOpenAI
client = AsyncOpenAI(
api_key=os.environ.get("OPENAI_API_KEY"),
)
async def main() -> None:
response = await client.responses.create(
model="gpt-5.2",
input="Explique le disestablishmentarianisme à un enfant de cinq ans intelligent."
)
print(response.output_text)
asyncio.run(main())
Pour l'optimisation des scénarios asynchrones (backend aiohttp), installez la version étendue :
pip install openai[aiohttp]
Optimisation du backend aiohttp :
Exemple
import asyncio
from openai import DefaultAioHttpClient, AsyncOpenAI
async def main() -> None:
# Le gestionnaire de contexte garantit que les ressources sont libérées
async with AsyncOpenAI(
api_key=os.environ.get("OPENAI_API_KEY"),
http_client=DefaultAioHttpClient(), # Activer le backend aiohttp
) as client:
chat_completion = await client.chat.completions.create(
messages=[{"role": "user", "content": "Dites que ceci est un test"}],
model="gpt-5.2",
)
asyncio.run(main())
Réponses en streaming
Basé sur les événements côté serveur (SSE) pour obtenir des réponses en temps réel ; les interfaces synchrones et asynchrones sont cohérentes.
Exemple de streaming synchrone :
Exemple
client = OpenAI()
stream = client.responses.create(
model="gpt-5.2",
input="Écrivez une histoire du soir d'une phrase sur une licorne.",
stream=True, # Activer la sortie en streaming
)
for event in stream:
print(event) # Afficher la réponse segment par segment
Exemple de streaming asynchrone :
Exemple
from openai import AsyncOpenAI
client = AsyncOpenAI()
async def main():
stream = await client.responses.create(
model="gpt-5.2",
input="Écrivez une histoire du soir d'une phrase sur une licorne.",
stream=True,
)
async for event in stream:
print(event)
asyncio.run(main())
API temps réel
Conversation multimodale à faible latence (texte / audio), implémentée via WebSocket, nécessite la bibliothèque websockets.
Exemple de base pour le texte :
Exemple
from openai import AsyncOpenAI
async def main():
client = AsyncOpenAI()
# Établir une connexion en temps réel
async with client.realtime.connect(model="gpt-realtime") as connection:
# Mettre à jour la configuration de session (sortie texte uniquement)
await connection.session.update(
session={"type": "realtime", "output_modalities": ["text"]}
)
# Envoyer un message utilisateur
await connection.conversation.item.create(
item={
"type": "message",
"role": "user",
"content": [{"type": "input_text", "text": "Dites bonjour !"}],
}
)
# Déclencher la réponse du modèle
await connection.response.create()
# Écouter les événements en temps réel
async for event in connection:
if event.type == "response.output_text.delta":
print(event.delta, flush=True, end="") # Afficher les fragments de texte en temps réel
elif event.type == "response.output_text.done":
print() # Ajouter un saut de ligne lorsque la réponse se termine
elif event.type == "response.done":
break # Terminer l'écoute
asyncio.run(main())
Gestion des erreurs de l'API Realtime :
Exemple
from openai import AsyncOpenAI
client = AsyncOpenAI()
async def main():
async with client.realtime.connect(model="gpt-realtime") as connection:
async for event in connection:
if event.type == 'error':
# Intercepter et gérer les événements d'erreur (la connexion ne sera pas déconnectée)
print(f"Type d'erreur : {event.error.type}")
print(f"Code d'erreur : {event.error.code}")
print(f"Message d'erreur : {event.error.message}")
asyncio.run(main())
Manuel de référence
Le tableau suivant contient :
- Initialisation du cœur : pour une utilisation synchrone,
OpenAIpour une utilisation asynchrone,AsyncOpenAIpour une utilisation avec Azure,AzureOpenAIil est recommandé de configurer la clé API via des variables d'environnement. - Génération de texte : préférez la nouvelle version,
responses.create()pour les scénarios classiques, utilisezchat.completions.create()la sortie en streaming nécessite de définirstream=True。 - Capacités avancées : prise en charge du multimodal (entrée d'image), API temps réel, téléversement de fichiers/fine-tuning ; la gestion des erreurs doit intercepter
APIErrorles sous-classes, et le délai d'attente/la nouvelle tentative peut être configuré de manière flexible.
Installation et import
Installez le SDK officiel :
pip install --upgrade openai
Importez les classes principales :
from openai import OpenAI, AsyncOpenAI, AzureOpenAI
Création d’un client
Créez un client OpenAI standard :
from openai import OpenAI client = OpenAI(api_key="YOUR_API_KEY")
Créez un client via des variables d’environnement :
import os from openai import OpenAI os.environ["OPENAI_API_KEY"] = "YOUR_API_KEY" client = OpenAI()
Définissez le délai d’attente des requêtes et le nombre de tentatives :
client = OpenAI(
timeout=30,
max_retries=2
)
Génération de texte (API Responses)
La requête de génération de texte la plus basique :
response = client.responses.create(
model="gpt-5.2",
input="用一句话解释什么是 Python"
)
print(response.output_text)
Contraignez le comportement du modèle via des instructions :
response = client.responses.create(
model="gpt-5.2",
instructions="你是一个严谨的 Python 教程作者",
input="解释什么是列表推导式"
)
print(response.output_text)
Conversation multi-tours
Utilisez le tableau input pour construire une conversation contextuelle :
response = client.responses.create(
model="gpt-5.2",
input=[
{"role": "user", "content": "Python 是什么?"},
{"role": "assistant", "content": "Python 是一门高级编程语言。"},
{"role": "user", "content": "它适合做什么?"}
]
)
print(response.output_text)
Sortie structurée (JSON Schema)
Demandez au modèle de renvoyer des données JSON conformes au schéma :
response = client.responses.create(
model="gpt-5.2",
response_format={
"type": "json_schema",
"json_schema": {
"name": "tech_summary",
"schema": {
"type": "object",
"properties": {
"title": {"type": "string"},
"summary": {"type": "string"}
},
"required": ["title", "summary"]
}
}
},
input="介绍 asyncio"
)
print(response.output_parsed)
Appel d'outils (Function Calling)
Définissez des outils et laissez le modèle décider automatiquement s’il doit les appeler :
tools = [
{
"type": "function",
"function": {
"name": "get_weather",
"description": "获取城市天气",
"parameters": {
"type": "object",
"properties": {
"city": {"type": "string"}
},
"required": ["city"]
}
}
}
]
response = client.responses.create(
model="gpt-5.2",
tools=tools,
input="北京今天天气怎么样?"
)
print(response.output)
Sortie en streaming (Streaming)
Sortie de streaming synchrone :
with client.responses.stream(
model="gpt-5.2",
input="写一段 Python 示例代码"
) as stream:
for event in stream:
if event.type == "response.output_text.delta":
print(event.delta, end="")
Sortie de streaming asynchrone :
stream = await client.responses.create(
model="gpt-5.2",
input="解释什么是生成式 AI",
stream=True
)
async for event in stream:
print(event)
Appels asynchrones (AsyncOpenAI)
Utiliser le client asynchrone dans asyncio :
import asyncio
from openai import AsyncOpenAI
client = AsyncOpenAI()
async def main():
response = await client.responses.create(
model="gpt-5.2",
input="解释什么是事件循环"
)
print(response.output_text)
asyncio.run(main())
API Realtime (Realtime)
Utiliser WebSocket pour des conversations en temps réel à faible latence :
async with client.realtime.connect(model="gpt-realtime") as conn:
await conn.session.update(
session={"type": "realtime", "output_modalities": ["text"]}
)
await conn.conversation.item.create(
item={
"type": "message",
"role": "user",
"content": [{"type": "input_text", "text": "你好"}]
}
)
async for event in conn:
print(event)
Génération d'images
Générer une image à partir de texte :
image = client.images.generate(
model="gpt-image-1",
prompt="一只在写代码的猫",
size="1024x1024"
)
print(image.data[0].url)
Génération d'embeddings
Générer des embeddings vectoriels de texte :
embedding = client.embeddings.create(
model="text-embedding-3-small",
input="Hello world"
)
print(embedding.data[0].embedding)
Reconnaissance vocale
Convertir un fichier audio en texte :
audio_file = open("speech.mp3", "rb")
transcript = client.audio.transcriptions.create(
model="whisper-1",
file=audio_file
)
print(transcript.text)
Synthèse vocale
Convertir du texte en fichier audio :
speech = client.audio.speech.create(
model="gpt-4o-mini-tts",
voice="alloy",
input="你好,欢迎使用 OpenAI"
)
with open("output.mp3", "wb") as f:
f.write(speech)
Gestion des fichiers (Files API)
Téléverser un fichier :
from pathlib import Path
client.files.create(
file=Path("data.jsonl"),
purpose="fine-tune"
)
Lister les fichiers :
files = client.files.list()
for f in files:
print(f.id, f.filename)
Supprimer un fichier :
client.files.delete(file_id="file-xxx")
Affinage du modèle (Fine-tuning Jobs)
Créer une tâche d'affinage :
job = client.fine_tuning.jobs.create(
training_file="file-xxx",
model="gpt-3.5-turbo"
)
print(job.id, job.status)
Vérification du Webhook
Vérifier et analyser la requête Webhook :
event = client.webhooks.unwrap(request_body, request_headers)
Vérifier uniquement la signature :
client.webhooks.verify_signature(request_body, request_headers)
Gestion des erreurs
Intercepter les exceptions levées par le SDK :
import openai
try:
client.responses.create(
model="gpt-5.2",
input="test"
)
except openai.RateLimitError as e:
print("触发速率限制:", e)
except openai.APIConnectionError as e:
print("连接失败:", e)
Obtenir l'ID de requête d'une requête échouée :
try:
client.responses.create(model="gpt-5.2", input="test")
except openai.APIStatusError as exc:
print(exc.request_id)
Compatibilité avec Azure OpenAI
Initialiser le client Azure OpenAI :
from openai import AzureOpenAI
client = AzureOpenAI(
api_version="2023-07-01-preview",
azure_endpoint="https://xxx.openai.azure.com"
)
Versions et journal des modifications
Vérifier la version du SDK :
import openai print(openai.__version__)
Activer la journalisation de débogage du SDK :
export OPENAI_LOG=debug
Autres extensionsPlus de références API :https://github.com/openai/openai-python/blob/main/api.md