GET /v1/responses 进行 WebSocket 升级。先确认模型、上游和渠道支持 Responses WebSocket,管理员需开启渠道 ResponsesWebSocketEnabled。普通 HTTP Responses 可用不能证明双向连接也可用。
可运行的两轮文本示例
按连接与运行环境安装依赖、设置环境变量。运行:websocket-client.mjs。
历史、增量与完成
示例显式重放 user 消息和全部原始 output,包括推理密文、消息 phase 和额外元数据;每轮重新发送 instructions。模型必须支持reasoning.encrypted_content,不支持时应按目标协议调整,而不是丢弃返回的推理状态。
接收器先取得 response.created 的 ID,按 output_index / content_index / item_id 关联文本。Responses 文本增量不保证带 response_id;出现该字段时才额外核对。最终完成对象必须与当前响应匹配,其文本必须与已收增量一致。示例拒绝空输出、拒答、工具调用及未完成消息,不把它们当作文本答案。
需要使用 previous_response_id 时,发送新输入并确认上游连接状态仍有效;重连后不能假设缓存保留。无状态恢复可重放完整历史或压缩窗口,但应由应用决定是否重发。官方协议背景见 WebSocket mode。
当前网关与上游能力不同
项目每连接只允许一个活动生成,并锁定已建立连接的模型和渠道。不能照搬官方最新文档的多 stream_id 并发、排队和分叉承诺。切换模型请新建连接;增量续接是否可用需真实渠道验证。握手和每次 create 都可能因权限、限流或渠道配置变化失败。generate: false 预热和额外供应商字段不在示例范围。stream、background 不作为 WebSocket create 的传输开关。客户端函数工具需要单独处理工具参数、执行结果和恢复策略;本示例主动拒绝工具输出。
取消和恢复
API 接受活动生成的response.cancel 控制事件,但成功取决于上游响应。控制错误与生成错误需分别关联;不要只根据发出 cancel 就确认取消。示例未自动发送取消,超时后关闭连接并非保证退款或中止上游。
握手、字段和事件参考 · 排障
Read in English