本文档涵盖了所有 OpenAI API 交互底层的 HTTP 客户端基础架构。HTTP 客户端基础提供了核心的请求/响应处理、重试逻辑、身份验证、流式传输支持和错误管理,为同步和异步 API 操作提供支持。
有关在此基础上构建的更高级客户端接口的信息,请参阅核心客户端类。有关流式传输和实时通信协议的详细信息,请参阅流式传输和实时 API。
HTTP 客户端基础是所有与 OpenAI API 进行 HTTP 通信的基础层。它抽象了 HTTP 传输、连接管理、重试逻辑和响应处理的复杂性,同时为同步和异步操作提供了统一的接口。该基础能够实现所有 OpenAI 服务之间可靠、弹性的 API 交互。
HTTP 客户端基础围绕分层的类结构构建,将通用 HTTP 处理与 OpenAI 特定的客户端实现区分开来
来源: src/openai/_base_client.py361-777
The BaseClient 类作为通用基类,提供了基础的 HTTP 客户端功能
| 组件 | 目的 | 关键方法 |
|---|---|---|
| 请求构建 | 构建包含正确标头、身份验证和参数的 HTTP 请求 | _build_request(), _prepare_url(), _build_headers() |
| 响应处理 | 处理响应解析、验证和类型转换 | _process_response_data(), _maybe_override_cast_to() |
| 重试逻辑 | 实现带指数退避的智能重试策略 | _should_retry(), _calculate_retry_timeout() |
| 错误处理 | 将 HTTP 错误转换为相应的 API 异常 | _make_status_error_from_response() |
| 配置 | 管理超时、连接限制和客户端设置 | timeout, max_retries, _strict_response_validation |
来源: src/openai/_base_client.py361-777
这些具体实现扩展了 BaseClient,以提供同步和异步 HTTP 操作
来源: src/openai/_base_client.py810-1091 src/openai/_base_client.py1092-1418
HTTP 客户端基础遵循结构化的请求/响应流程,处理身份验证、重试和错误恢复
来源: src/openai/_base_client.py931-1039 src/openai/_base_client.py475-548 src/openai/_base_client.py600-622
该基础实现了复杂的重试逻辑,具有指数退避功能并遵循服务器提供的重试指导
_should_retry() 方法根据以下因素决定是否重试
| 条件 | 操作 | 状态码 |
|---|---|---|
| 服务器指令 | 如果存在 x-should-retry 标头,则遵循其指令 | 任意 |
| 请求超时 | 始终重试 | 408 |
| 锁超时 | 始终重试 | 409 |
| 速率限制 | 始终重试 | 429 |
| 服务器错误 | 始终重试 | ≥ 500 |
| 客户端错误 | 从不重试 | 4xx (408、409、429 除外) |
来源: src/openai/_base_client.py740-773
_calculate_retry_timeout() 方法实现了智能退避
retry-after 和 retry-after-ms 标头INITIAL_RETRY_DELAY * pow(2.0, nb_retries) 上限为 MAX_RETRY_DELAY来源: src/openai/_base_client.py716-738 src/openai/_constants.py13-14
该基础通过服务器发送事件 (SSE) 提供全面的流式传输支持
流式传输系统处理各种事件类型和错误条件
event: completion, event: pingresponse. 或 transcript. 开头的事件event: error 事件[DONE] 表示流终止来源: src/openai/_streaming.py22-122 src/openai/_streaming.py266-369
HTTP 客户端基础提供了具有特定异常类型的全面错误处理
| 异常类型 | 触发器 | 目的 |
|---|---|---|
| APITimeoutError | httpx.TimeoutException | 请求超时处理 |
| APIConnectionError | 连接失败 | 网络连接问题 |
| APIStatusError | HTTP 4xx/5xx 响应 | 服务器端 API 错误 |
| APIResponseValidationError | 无效的响应数据 | 响应解析失败 |
来源: src/openai/_base_client.py977-1004 src/openai/_exceptions.py
该基础使用集中式配置以实现可靠运行
| 设置 | 值 | 目的 |
|---|---|---|
| DEFAULT_TIMEOUT | httpx.Timeout(timeout=600, connect=5.0) | 10 分钟总超时,5 秒连接超时 |
| DEFAULT_MAX_RETRIES | 2 | 适用于大多数操作的合理重试限制 |
| DEFAULT_CONNECTION_LIMITS | max_connections=1000, max_keepalive_connections=100 | 连接池限制 |
| INITIAL_RETRY_DELAY | 0.5 秒 | 指数退避的起点 |
| MAX_RETRY_DELAY | 8.0 秒 | 最大重试延迟上限 |
该基础自动添加操作标头
Authorization: Bearer {api_key}{ClientName}/Python {version}x-stainless-retry-count: {retries_taken}x-stainless-read-timeout: {timeout}application/json(默认)来源: src/openai/_constants.py8-14 src/openai/_base_client.py433-457 src/openai/_base_client.py637-651