首页 / 开源热榜 / openai-python / 使用教程

openai-python 3.17 教程:默认重试和超时要主动改

更新于 2026-09-23 · NGJOO AI 实验室 · 约 11 分钟

openai-python 是 OpenAI 官方 Python 3.10+ SDK。它由 OpenAPI 规范生成类型,通过 HTTPX2 提供同步、异步、SSE 流式、Realtime、文件上传、webhook 校验和统一错误处理。

最新公开 release 是 v3.17.0(2026-09-22);main 的 pyproject 已写 3.18.0。本文固定 3.17.0,main 只用来观察下一版状态。

1. 安装与最小 Responses 请求

python -m venv .venv
source .venv/bin/activate
pip install 'openai==3.17.0'
export OPENAI_API_KEY='从密钥管理系统注入'
from openai import OpenAI

client = OpenAI(timeout=20.0, max_retries=1)
response = client.responses.create(
    model="你的可用模型",
    input="Reply with OK"
)
print(response.output_text)
print(response._request_id)

不要把 key 写入 Python 文件。官方建议用环境变量或不入库的 .env;Kubernetes、Azure 和 GCP 的自动化环境还可评估短期 workload identity。

2. 默认重试会影响成本和副作用

连接错误、408、409、429 和 5xx 默认重试 2 次,并采用短指数退避。纯生成请求通常可以接受,但模型随后调用支付、发信或写数据库工具时,应用必须提供幂等键和业务状态检查。

官方当前默认超时是 10 分钟,超时仍可能触发重试。面向在线用户时应显式配置整体、连接、读取和写入超时,并记录 _request_id;失败请求从 APIStatusError.request_id 取得 ID。

3. 异步、流式与 Realtime

AsyncOpenAI 和同步客户端使用同一资源结构。SSE 流在已经交付部分输出后不会自动重放,以免重复内容;应用需要处理断流后的半完成状态。Realtime 则通过 WebSocket 持续接收事件,连接生命周期和取消逻辑要单独测试。

文件上传会把内容发送到远端 API。传 PathLike 时异步客户端会异步读取文件;音频等接口应提供带扩展名的文件名,避免 multipart 使用无法判断格式的通用名称。

4. webhook 先验签再解析

client.webhooks.unwrap() 可以同时验签和解析,verify_signature() 只验签;二者都需要服务器收到的原始 JSON 字符串。先把 body 解析、重排或重新编码,可能导致签名验证失败。

该仓库是 Apache-2.0 官方 SDK,调用远端 API 使用用户自己的账户。README 没有额度转售、订阅分发或项目内充值流程,因此不命中严重商业隔离规则;

验证边界:本轮只核对 OpenAI 官方 README、pyproject、版本策略、API 文档入口和 Releases。没有安装 SDK、读取 key、发送 API/文件/Realtime/webhook 请求,也没有产生费用;本文属于 docs-only。

5. 与 Anthropic Python SDK 对比

Anthropic 官方 Python SDK同样提供同步/异步客户端、流式与错误处理,但资源、模型名和认证面向 Anthropic API。openai-python 提供 OpenAI Responses、Realtime、webhook 与 workload identity。

按实际服务端 API 选择 SDK。自定义 base URL 不代表两个平台的请求结构、事件和错误语义自动兼容。

这里仅补原教程没有展开的事实和边界。安装命令与操作步骤仍以前文为准。

先判断这个项目是否适合你

适合谁用

适合从 Python 调用 OpenAI 的文本、视觉、音频、文件、工具、流式和 Realtime API,也适合云上用短期 workload identity。它只是客户端库,不负责业务授权、提示注入防护、预算上限或应用级幂等。

采用建议

保留。它是官方开源 SDK,不包含额度转售或项目内充值漏斗;页面应聚焦版本固定、密钥管理、数据外发、默认重试和超时,而不是泛泛罗列 API。

原教程未展开的系统信息

架构与数据流

库由 OpenAPI 规范生成 Pydantic 请求/响应类型,通过 HTTPX2 提供同步和异步传输。OpenAI/AsyncOpenAI 客户端持有认证、base URL、重试、超时与资源命名空间;流式与 Realtime 返回事件迭代器,webhook helper 在解析前校验原始请求体签名。

技术栈和运行条件

语言

Python >=3.10

框架

OpenAPI 生成客户端 + HTTPX2 + Pydantic

关键依赖

  • httpx2 >=2.12,<3
  • pydantic >=1.10.13,<3(排除 2.0–2.3)
  • anyio >=4.10,<5
  • typing-extensions
  • jiter >=0.16,<1

运行环境

默认访问 OpenAI API;凭据可用环境变量或 workload identity,Realtime 使用 WebSocket,文件接口会上传内容

官方与对比资料

以下链接用于核对版本、安装方式、功能边界和同类差异。

常见问题

openai-python 3.17.0 需要哪个 Python 版本?

官方 README 和 pyproject.toml 要求 Python 3.10+。本轮核对的最新公开 release 是 3.17.0;main 已写 3.18.0,若要复现应固定 PyPI/release 版本。

OPENAI_API_KEY 应该写进 Python 文件吗?

不应该。官方建议从环境变量或 .env 加载,并确保 .env 不进入版本控制;生产环境可评估短期 workload identity,减少长期静态 key 的暴露。

openai-python 为什么可能重复一次请求?

连接错误、408、409、429 和 5xx 默认会重试 2 次。对有外部副作用的工具或业务操作,要设置应用级幂等键、记录 request ID,并按需要调整 max_retries。

openai-python 默认超时是多少?

官方 README 当前写的是 10 分钟,超时请求还可能按默认策略重试。在线服务通常应显式设置更短的整体、连接和读取超时。

webhook 可以先解析 JSON 再验签吗?

不建议。client.webhooks.unwrap 和 verify_signature 需要原始 JSON 字符串;先解析或改写 body 可能破坏签名验证,应先保留原始请求体并完成校验。