Appearance
Backend Client 管理 Codex 与 LLM 后端的连接,处理 API 调用、认证和流式响应解析。
为什么需要 Backend Client
Codex 需要与 LLM 后端进行高频的 API 调用,涉及认证、连接管理、请求构建、流式响应解析等复杂逻辑。Backend Client 将这些通用功能封装为可复用的客户端,支持 WebSocket(首选)和 HTTP SSE(降级)两种传输方式,并通过 ModelClient(会话级)和 ModelClientSession(turn 级)的两层设计实现连接复用。
核心原理
- 两层客户端:
ModelClient(会话生命周期)管理连接池和认证,ModelClientSession(turn 生命周期)处理单次 API 调用 - WebSocket 优先:优先使用 WebSocket 连接(支持增量 delta,减少重复数据传输),失败时降级到 HTTP SSE
- 流式响应:
ResponseStream以异步流方式返回ResponseEvent,支持增量处理 LLM 输出 - 请求优化:支持请求压缩(
enable_request_compression)、WebSocket 预热(prewarm_websocket)和缓存键覆盖
在源码中的实现
codex-rs/core/src/client.rs(2254 行)—ModelClient、ModelClientSession、ResponseStream、ModelClientStatecodex-rs/core/src/session/mod.rs— Session 通过ModelClient::new_session()创建 turn 级会话codex-rs/app-server/src/models/— 模型信息管理和提供商选择