这是 OpenAI 官方为 Python(支持 Python 3.8 及以上)提供的 REST API 客户端,使用现代的 httpx 库实现同步与异步调用,并内置完整的类型定义 ([github.com][1])。
api.md
文件 ([github.com][1])。pip install openai
import os
from openai import OpenAI
client = OpenAI(api_key=os.environ.get("OPENAI_API_KEY"))
response = client.responses.create(
model="gpt-4o",
instructions="你是一个海盗风格的编程助手。",
input="如何判断一个 Python 对象是否是某个类的实例?",
)
print(response.output_text)
from openai import OpenAI
client = OpenAI()
completion = client.chat.completions.create(
model="gpt-4o",
messages=[
{"role": "developer", "content": "说话像海盗。"},
{"role": "user", "content": "怎么检查一个 Python 对象是否是某个类的实例?"},
],
)
print(completion.choices[0].message.content)
建议使用 python-dotenv
保持 OPENAI_API_KEY
不写进代码 ([github.com][1])。
示例如下:
使用图片 URL:
response = client.responses.create(
model="gpt-4o-mini",
input=[{
"role": "user",
"content": [
{"type": "input_text", "text": "这张图片里有什么?"},
{"type": "input_image", "image_url": img_url},
],
}],
)
使用 Base64 图像字符串:
b64 = base64.b64encode(open(...).read()).decode()
client.responses.create(
model="gpt-4o-mini",
input=[{"role":"user","content":[{"type":"input_text","text":"图片内容?"},{"type":"input_image","image_url":f"data:image/png;base64,{b64}"}]}],
)
使用 AsyncOpenAI
客户端并在协程中 await
调用:
import asyncio
from openai import AsyncOpenAI
client = AsyncOpenAI(api_key=os.environ.get("OPENAI_API_KEY"))
async def main():
resp = await client.responses.create(model="gpt-4o", input="向五岁儿童解释‘反设教主义’")
print(resp.output_text)
asyncio.run(main())
功能与同步版基本一致 ([github.com][1])。
pip install openai[aiohttp]
然后:
from openai import AsyncOpenAI, DefaultAioHttpClient
async with AsyncOpenAI(http_client=DefaultAioHttpClient()) as client:
# ...
适合对并发性能有要求的场景 。
开启 stream=True
可逐行读取模型生成的响应:
for event in client.responses.create(model="gpt-4o", input="写一句独角兽童话", stream=True):
print(event)
异步端同理 ([github.com][1])。
支持通过 WebSocket 进行包含文本、音频输入输出和函数调用的低延迟对话。
示例略,但已在 README 中提供 ([github.com][1])。
TypedDict
;.to_json()
/ .to_dict()
,并为 IDE 提供类型提示 ([github.com][1])。库提供自动分页迭代器,便于获取大型列表(如 fine-tuning 任务):
for job in client.fine_tuning.jobs.list(limit=20):
print(job.id)
异步版本同理 ([github.com][1])。
支持上传本地文件或 bytes、Pathlike:
client.files.create(file=Path("file.jsonl"), purpose="fine-tune")
异步客户端支持异步读取 ([github.com][1])。
APIConnectionError
;RateLimitError
、APIStatusError
等);APIError
;try…except
捕获并获取 .status_code
或 .request_id
([github.com][1])。支持自动重试(默认 2 次),可配置 max_retries
和 timeout
([github.com][1])。
OPENAI_LOG=info
或 debug
;null
;.with_raw_response
;.with_streaming_response
获取流式原始响应;.close()
或使用 with
上下文管理;AzureOpenAI
类;azure_endpoint
, azure_deployment
, api_version
等参数;END