OpenResponses Gateway 集成计划
OpenResponses Gateway 集成计划
背景
Clawdbot Gateway 目前在 /v1/chat/completions 暴露了一个最小的 OpenAI 兼容聊天补全端点(见 OpenAI 聊天补全)。
Open Responses 是基于 OpenAI Responses API 的开放推理标准。它专为 agent 工作流设计,使用基于项的输入和语义流式事件。OpenResponses 规范定义 /v1/responses,而非 /v1/chat/completions。
目标
- 添加符合 OpenResponses 语义的
/v1/responses端点。 - 将聊天补全保留为易于禁用并最终移除的兼容层。
- 使用隔离的、可重用的架构标准化验证和解析。
非目标
- 在第一遍中实现完整的 OpenResponses 功能奇偶校验(图像、文件、托管工具)。
- 替换内部 agent 执行逻辑或工具编排。
- 在第一阶段更改现有的
/v1/chat/completions行为。
研究摘要
来源:OpenResponses OpenAPI、OpenResponses 规范站点和 Hugging Face 博客文章。
提取的关键点:
POST /v1/responses接受CreateResponseBody字段,如model、input(字符串或ItemParam[])、instructions、tools、tool_choice、stream、max_output_tokens和max_tool_calls。ItemParam是一个可区分联合:- 带有角色
system、developer、user、assistant的message项 function_call和function_call_outputreasoningitem_reference
- 带有角色
- 成功的响应返回带有
object: "response"、status和output项的ResponseResource。 - 流式使用语义事件,例如:
response.created、response.in_progress、response.completed、response.failedresponse.output_item.added、response.output_item.doneresponse.content_part.added、response.content_part.doneresponse.output_text.delta、response.output_text.done
- 规范要求:
Content-Type: text/event-streamevent:必须匹配 JSONtype字段- 终端事件必须是字面量
[DONE]
- 推理项可能暴露
content、encrypted_content和summary。 - HF 示例在请求中包含
OpenResponses-Version: latest(可选标头)。
建议的架构
- 添加
src/gateway/open-responses.schema.ts,仅包含 Zod 架构(无 gateway 导入)。 - 添加
src/gateway/openresponses-http.ts(或open-responses-http.ts)用于/v1/responses。 - 保持
src/gateway/openai-http.ts完整,作为传统兼容适配器。 - 添加配置
gateway.http.endpoints.responses.enabled(默认false)。 - 保持
gateway.http.endpoints.chatCompletions.enabled独立;允许两个端点分别切换。 - 当聊天补全启用时,发出启动警告以表示传统状态。
聊天补全的弃用路径
- 维护严格的模块边界:responses 和聊天补全之间没有共享的架构类型。
- 通过配置使聊天补全成为可选,以便无需代码更改即可禁用。
- 一旦
/v1/responses稳定,更新文档将聊天补全标记为传统。 - 可选的未来步骤:将聊天补全请求映射到 Responses 处理程序,以实现更简单的移除路径。
第 1 阶段支持子集
- 接受
input作为字符串或带有消息角色和function_call_output的ItemParam[]。 - 将系统和开发者消息提取到
extraSystemPrompt中。 - 使用最近的
user或function_call_output作为 agent 运行的当前消息。 - 使用
invalid_request_error拒绝不支持的内容部分(图像/文件)。 - 返回带有
output_text内容的单个助手消息。 - 返回带有零值的
usage,直到连接了令牌计算。
验证策略(无 SDK)
- 为支持的子集实现 Zod 架构:
CreateResponseBodyItemParam+ 消息内容部分联合ResponseResource- Gateway 使用的流式事件形状
- 将架构保存在单个隔离模块中,以避免漂移并允许未来的代码生成。
流式实现(第 1 阶段)
- 带有
event:和data:的 SSE 行。 - 所需序列(最小可行):
response.createdresponse.output_item.addedresponse.content_part.addedresponse.output_text.delta(根据需要重复)response.output_text.doneresponse.content_part.doneresponse.completed[DONE]
测试和验证计划
- 为
/v1/responses添加 e2e 覆盖:- 需要身份验证
- 非流式响应形状
- 流式事件排序和
[DONE] - 使用标头和
user的会话路由
- 保持
src/gateway/openai-http.e2e.test.ts不变。 - 手动:使用
stream: truecurl 到/v1/responses并验证事件排序和终端[DONE]。
文档更新(后续)
- 添加一个新的文档页面,用于
/v1/responses用法和示例。 - 使用传统说明更新
/gateway/openai-http-api并指向/v1/responses。