OpenAI迁移至HTTPX:为何放弃requests库

引言:一次值得关注的技术迁移
近日,OpenAI宣布将其Python SDK的底层HTTP通信层迁移至HTTPX,这一话题在Hacker News上引发了技术社区的讨论(41点赞、15条评论)。虽然这看似只是一个基础设施层面的技术选型调整,但对于每天调用OpenAI API的数百万开发者而言,理解这一变化背后的技术逻辑,有助于我们更好地把握现代Python网络编程的发展趋势。
本文将从技术角度剖析HTTPX的优势、迁移的动因,以及这对开发者生态可能产生的影响。

HTTPX是什么:requests的现代继任者
HTTPX是一个现代化的Python HTTP客户端库,被广泛视为经典库requests的继任者。它由Encode团队开发(同一团队也维护了Starlette、Uvicorn等知名异步框架),在设计理念上更贴合当代Python应用的需求。
值得一提的是,Encode团队在Python异步Web生态中扮演着举足轻重的角色。Starlette是一个轻量级的ASGI(Asynchronous Server Gateway Interface)框架,为FastAPI等上层框架提供了底层支撑;Uvicorn则是目前最主流的ASGI服务器实现,基于uvloop和httptools构建,性能表现优异。HTTPX的诞生正是这个团队在构建完整异步Web生态过程中的自然延伸——既然服务端已经全面拥抱异步,客户端库也理应跟上这一步伐。这种从服务器到客户端的全栈异步思维,让HTTPX在设计之初就具备了更为前瞻的架构视野。
HTTPX的核心特性
HTTPX最引人注目的特性包括:
-
同步与异步双支持:这是它区别于
requests的最大亮点。HTTPX既提供了与requests几乎一致的同步API,又原生支持async/await异步编程模型,让开发者可以在不切换库的情况下满足不同场景需求。要理解这一特性的意义,需要回顾Python异步编程的演进历程。Python在3.4版本中引入了
asyncio标准库,在3.5版本中正式加入了async/await语法糖,从而将异步编程从此前基于回调函数或生成器的复杂模式,简化为接近同步代码的线性书写风格。然而,异步编程的一个核心挑战是"传染性"——一旦调用链中某个环节使用了异步,整个调用栈都需要是异步的,这意味着底层的HTTP客户端也必须提供异步接口。requests由于在设计之初完全基于同步阻塞模型,其内部深度依赖的urllib3连接池机制无法直接适配asyncio事件循环,因此无法通过简单的包装来支持异步调用。HTTPX从零开始设计时就将同步与异步作为一等公民对待,通过httpcore这一底层传输库同时提供同步和异步的传输实现,使得上层API的切换几乎无缝。 -
HTTP/2支持:相比只支持HTTP/1.1的
requests,HTTPX能够利用HTTP/2的多路复用等特性,在高并发场景下带来性能提升。HTTP/2(也称为h2)是HTTP协议的重大升级,由IETF于2015年标准化发布。相比HTTP/1.1,它引入了几项关键改进:多路复用(Multiplexing) 允许在单个TCP连接上同时发送和接收多个请求/响应,彻底解决了HTTP/1.1中的"队头阻塞"问题——在HTTP/1.1中,同一连接上的请求必须排队顺序处理,浏览器通常需要开启6-8个并行连接来提升并发度。此外,HTTP/2还支持头部压缩(HPACK),通过维护一张动态表来避免重复传输相同的请求头信息,这对于频繁调用API(每次请求都携带相似的认证头和内容类型头)的场景尤其有效。对于OpenAI API的典型使用模式——大量短小的JSON请求配合可能较长的流式响应——HTTP/2的多路复用可以显著减少TCP连接建立的开销,而头部压缩则能减少重复的认证信息传输带来的带宽浪费。
-
类型注解完善:现代Python项目日益重视类型安全,HTTPX提供了完整的类型提示,与
mypy等静态检查工具配合良好。 -
连接池与超时控制:提供了更精细、更符合直觉的连接管理和超时配置。
OpenAI为何选择从requests迁移到HTTPX
对于像OpenAI SDK这样需要服务海量开发者的基础库而言,HTTP客户端的选择直接影响到性能、可维护性和用户体验。
异步能力是关键驱动力
AI应用的一个典型特征是I/O密集——大量时间花在等待模型推理结果的网络请求上。传统的同步请求模型在处理并发调用时效率低下,而异步编程能够显著提升吞吐量。OpenAI官方SDK需要同时提供同步客户端(OpenAI)和异步客户端(AsyncOpenAI),HTTPX的双模式设计恰好完美契合这一需求,无需为两套接口维护两个不同的底层库。
减少依赖与统一维护
在此之前,若要同时支持同步和异步,开发者往往需要引入requests(同步)加上aiohttp(异步)两个库,这不仅增加了依赖复杂度,也导致代码逻辑难以统一。迁移到HTTPX后,OpenAI可以用单一库覆盖两种场景,降低了维护成本,也减少了用户环境中的依赖冲突风险。
这里有必要对requests和aiohttp各自的定位做更深入的说明。requests由Kenneth Reitz于2011年发布,其"HTTP for Humans"的设计哲学彻底改变了Python社区进行HTTP编程的方式。在requests出现之前,开发者需要直接使用标准库中的urllib/urllib2,接口繁琐且容易出错。requests凭借极其优雅的API设计,迅速成为Python生态中下载量最大的第三方库之一,至今每月仍有超过3亿次下载。然而,requests的架构根基——同步阻塞I/O模型——在Python异步编程兴起后逐渐成为瓶颈。aiohttp则是异步时代的产物,它基于asyncio构建,提供了高性能的异步HTTP客户端和服务端实现。但aiohttp的API风格与requests存在显著差异(例如需要显式管理session生命周期、不同的异常类型体系等),这使得同时维护同步和异步两套代码变得颇为痛苦。HTTPX的巧妙之处在于,它的同步API几乎与requests完全兼容(甚至设计了相似的Response对象属性和方法命名),同时其异步API也只需在方法调用前添加await关键字,两者共享同一套参数体系和行为语义,从而让SDK维护者可以用几乎相同的代码逻辑覆盖两种运行模式。
社区讨论:开发者怎么看这次迁移
在Hacker News的讨论中,开发者们对这次迁移表达了不同角度的看法。
稳定性与兼容性担忧
部分开发者关注迁移是否会引入破坏性变更。作为被广泛集成的SDK,任何底层库的更换都可能影响到现有应用的行为,比如异常类型、重试逻辑、代理配置等细节。这类基础设施迁移通常需要充分的向后兼容处理和详尽的迁移文档。
HTTPX的成熟度讨论
虽然HTTPX已经相当成熟并被众多项目采用,但相比拥有超过十年历史、久经考验的requests,一些保守派开发者仍对其在极端场景下的可靠性持观望态度。不过,随着FastAPI等主流框架生态对HTTPX的广泛使用,这种担忧正在逐渐消退。
FastAPI的崛起是理解这一生态变迁的重要背景。FastAPI由Sebastián Ramírez于2018年发布,它构建在Starlette(同为Encode团队作品)和Pydantic之上,凭借自动API文档生成、基于类型注解的数据验证、以及媲美Node.js和Go的异步性能表现,迅速成为Python Web框架领域增长最快的项目,GitHub星标数已超过75,000。FastAPI官方文档推荐使用HTTPX作为测试客户端(通过TestClient),其内置的httpx.AsyncClient也是进行异步集成测试的标准工具。这种深度绑定意味着,任何采用FastAPI构建后端服务的团队,实际上已经在日常开发和测试流程中依赖了HTTPX。当越来越多的AI应用后端选择FastAPI作为服务框架时(其异步特性特别适合处理大模型推理的长耗时请求),HTTPX同时作为SDK底层的HTTP客户端出现,就形成了一套高度一致且经过充分验证的技术栈。
对开发者的实际影响
对多数开发者透明无感
对绝大多数通过官方SDK调用OpenAI API的开发者来说,这一迁移是透明的——你无需修改任何业务代码,SDK会在内部处理好HTTP通信的细节。这正是良好抽象设计的价值所在。
高并发场景下的性能收益
对于高并发场景(例如批量处理请求、构建AI Agent系统),HTTPX带来的连接复用和HTTP/2支持可能带来实实在在的性能改善。使用AsyncOpenAI异步客户端配合asyncio,开发者可以更高效地并发处理大量API调用。
具体来说,在AI Agent系统中,一个典型的工作流可能涉及多轮对话、工具调用和并行的子任务分发。例如,一个ReAct(Reasoning + Acting)架构的Agent在单次推理循环中可能需要同时调用搜索API、数据库查询和多个LLM推理接口。在同步模式下,这些请求只能串行执行,总延迟等于所有请求延迟之和;而在异步模式下,借助asyncio.gather()或asyncio.TaskGroup,这些请求可以并行发出,总延迟仅取决于最慢的那个请求。配合HTTPX的HTTP/2多路复用,这些并行请求甚至可以在同一个TCP连接上完成,进一步减少了连接建立和TLS握手的开销。对于需要在秒级响应时间内完成复杂推理链路的生产级AI应用来说,这种性能优化的意义不容忽视。
技术选型的风向标意义
OpenAI作为行业标杆,其技术选型往往具有风向标意义。这次迁移也向社区传递了一个信号:在构建现代Python网络应用时,HTTPX正在成为默认的推荐选择。如果你正在设计需要同时支持同步与异步的库或服务,不妨参考这一实践。
事实上,OpenAI并非唯一做出这一选择的重量级项目。Anthropic的Python SDK同样基于HTTPX构建,LangChain、LlamaIndex等主流AI编排框架也在其HTTP调用层中广泛使用HTTPX。这种行业级别的集体迁移趋势,标志着Python网络编程正在经历一次类似于当年从urllib到requests的范式转移——只不过这一次,推动力来自异步编程的全面普及和AI应用对高并发I/O的刚性需求。
总结
OpenAI迁移至HTTPX虽然是一个底层技术决策,但它折射出Python生态的整体演进方向:异步优先、类型安全、统一抽象。HTTPX凭借其现代化的设计,正逐步取代requests成为新一代Python HTTP客户端的事实标准。
对于开发者而言,这提醒我们在技术选型时应当关注库的长期维护性和对未来编程范式的支持能力。而对于AI应用开发者,理解SDK底层的通信机制,也有助于在高并发、高性能场景中做出更优的架构决策。
核心要点
相关推荐

Qwen3去审查模型批量发布:MTP保留与GGUF全格式支持
开发者llmfan46批量发布多款Qwen3系列去审查模型,包括Qwen3.8-27B、Qwen3.5-122B-A10B、Qwen3-Coder-Next等,保留原生MTP能力,提供GGUF全格式量化支持,覆盖文本推理、代码生成和多模态场景,适合本地部署使用。

Reckon:用决策日志校准判断力的iOS量化自我工具
Reckon是一款iOS决策日志应用,通过记录预测、量化信心水平、阶段性检查和复盘机制,帮助用户对抗后见之明偏差,系统性提升判断力。支持iCloud同步,一次性买断,隐私友好。

Open Index开源项目:结构化上下文解决AI Agent四大痛点
Open Index是一个开源的结构化上下文管理工具,专为AI Agent开发者设计,解决Markdown上下文中的污染、矛盾、非确定性和导航困难四大问题,提升Agent的生产级可靠性。