这可能会破坏缺少系统CA证书的最小容器镜像、使用企业TLS检查代理的环境,以及依赖自定义或修改过的certifi bundle的部署中的证书验证。请在操作系统信任库中安装所需的CA证书,或配置显式证书捆绑包:
export SSL_CERT_FILE=/path/to/ca-bundle.pem
或者,配置一个包含受信任CA证书的目录:
export SSL_CERT_DIR=/path/to/ca-directory
当trust_env=True时(默认值),这些环境变量会被识别。要在自定义客户端上显式控制信任,请通过verify传入ssl.SSLContext:
import ssl from openai import OpenAI, DefaultHttpx2Client
ssl_context = ssl.create_default_context(cafile="/path/to/ca-bundle.pem") client = OpenAI(http_client=DefaultHttpx2Client(verify=ssl_context))
对于等效的异步配置,请使用DefaultAsyncHttpx2Client(verify=ssl_context)。SDK的aiohttp传输使用相同的HTTPX2 TLS设置。
使用HTTPX2客户端和HTTPX2配置对象。SDK提供了辅助函数,保留其推荐的超时、连接池和重定向默认值:
import httpx2 from openai import OpenAI, AsyncOpenAI, DefaultHttpx2Client, DefaultAsyncHttpx2Client
proxy_client = OpenAI(http_client=DefaultHttpx2Client(proxy=“http://proxy.example.com:8080”))
transport_client = OpenAI( http_client=DefaultHttpx2Client( transport=httpx2.HTTPTransport(local_address=“0.0.0.0”), timeout=httpx2.Timeout(30.0, connect=5.0), ) )
async_client = AsyncOpenAI(http_client=DefaultAsyncHttpx2Client(timeout=httpx2.Timeout(30.0)))
直接构造的httpx2.Client和httpx2.AsyncClient实例也受支持。当您直接构造客户端时,除非您自行配置,否则将应用其自身的HTTPX2默认值。
现有的DefaultHttpxClient和DefaultAsyncHttpxClient名称仍可使用,但现在会构造HTTPX2客户端。在需要明确指定HTTP客户端系列时,请优先使用DefaultHttpx2Client和DefaultAsyncHttpx2Client。
模块级配置遵循相同规则:
import openai
openai.http_client = openai.DefaultHttpx2Client()
超时、URL、传输和连接设置
将HTTPX专用对象替换为对应的HTTPX2对象:
例如,粒度化的SDK超时变为:
import httpx2 from openai import OpenAI
client = OpenAI(timeout=httpx2.Timeout(60.0, connect=5.0, read=20.0))
数值型超时值不变。现有字符串URL不变。自定义传输子类、挂载的传输、代理集成和连接池检测必须面向HTTPX2的传输接口。
身份验证处理器和钩子会接收HTTPX2的请求和响应对象。请相应更新自定义认证类和注解:
import httpx2 from openai import OpenAI, DefaultHttpx2Client
def log_request(request: httpx2.Request) -> None: print(request.method, request.url)
client = OpenAI(http_client=DefaultHttpx2Client(event_hooks={“request”: [log_request]}))
如果您要子类化HTTP身份验证或传输接口,请子类化匹配的httpx2类。第三方检测、追踪中间件和认证集成必须显式支持HTTPX2。
解析后的SDK响应模型不变。使用原生HTTPX2客户端时,面向传输的对象属于HTTPX2:
import httpx2 from openai import OpenAI
client = OpenAI() response = client.models.with_raw_response.list()
assert isinstance(response.http_response, httpx2.Response) assert isinstance(response.http_request, httpx2.Request)
使用原生客户端时,在请求未解析的HTTP响应时使用cast_to=httpx2.Response。流式响应包装器也暴露HTTPX2响应对象。应用程序代码通常应捕获openai.APITimeoutError和openai.APIConnectionError等SDK异常;使用原生客户端时,异常的基础传输原因是一个HTTPX2异常。
这些类型保证仅适用于原生HTTPX2客户端。注入旧版HTTPX客户端会产生httpx.Request、httpx.Response和HTTPX传输异常,即使提供了cast_to=httpx2.Response也是如此。
受支持的aiohttp额外配置使用HTTPX2原生传输。它不会安装旧版HTTPX或外部httpx-aiohttp适配器:
pip install ‘openai[aiohttp]’
from openai import AsyncOpenAI, DefaultAioHttpClient
client = AsyncOpenAI(http_client=DefaultAioHttpClient())
DefaultAioHttpClient()是一个httpx2.AsyncClient。使用此辅助函数的应用程序无需直接构造或导入传输。
模拟必须拦截HTTPX2请求并返回HTTPX2响应。例如:
import httpx2 from openai import OpenAI
def handler(request: httpx2.Request) -> httpx2.Response: return httpx2.Response( 200, request=request, json={“object”: “list”, “data”: []}, )
client = OpenAI(http_client=httpx2.Client(transport=httpx2.MockTransport(handler))) assert client.models.list().data == []
如果您的测试套件使用RESPX,请更新到兼容HTTPX2的RESPX版本或进行分叉。仅修补旧版HTTPX的RESPX版本无法拦截SDK的默认HTTPX2客户端。如果您无法立即迁移该集成,下面的临时旧版客户端逃生舱可让现有仅HTTPX的RESPX设置继续工作,同时进行迁移。