openclaw-vainplex/docs/zh-CN/experiments/plans/openresponses-gateway.md
Josh Palmer 5676a6b38d Docs: normalize zh-CN terminology + tone
What: switch to 你/你的 tone; standardize Skills/Gateway网关/local loopback/私信 wording
Why: align zh-CN docs with issue 6995 feedback + idiomatic tech style
Tests: pnpm docs:build
2026-02-02 16:38:25 +01:00

121 lines
5.3 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
last_updated: "2026-01-19"
owner: openclaw
status: 草稿
summary: 计划:添加 OpenResponses /v1/responses 端点并平稳废弃 Chat Completions
title: OpenResponses Gateway网关计划
x-i18n:
generated_at: "2026-02-01T20:25:20Z"
model: claude-opus-4-5
provider: pi
source_hash: 71a22c48397507d1648b40766a3153e420c54f2a2d5186d07e51eb3d12e4636a
source_path: experiments/plans/openresponses-gateway.md
workflow: 14
---
# OpenResponses Gateway网关集成计划
## 背景
OpenClaw Gateway网关当前在 `/v1/chat/completions` 暴露了一个最小化的 OpenAI 兼容 Chat Completions 端点(参见 [OpenAI Chat Completions](/gateway/openai-http-api))。
Open Responses 是一个基于 OpenAI Responses API 的开放推理标准。它专为智能体工作流设计使用基于项目的输入和语义化流式事件。OpenResponses 规范定义的是 `/v1/responses`,而非 `/v1/chat/completions`
## 目标
- 添加一个遵循 OpenResponses 语义的 `/v1/responses` 端点。
- 将 Chat Completions 保留为兼容层,便于禁用并最终移除。
- 使用隔离的、可复用的 schema 标准化验证和解析。
## 非目标
- 第一阶段不追求完整的 OpenResponses 功能对等(图片、文件、托管工具)。
- 不替换内部智能体执行逻辑或工具编排。
- 第一阶段不改变现有 `/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_output`
- `reasoning`
- `item_reference`
- 成功响应返回一个 `ResponseResource`,包含 `object: "response"`、`status` 和 `output` 项。
- 流式传输使用语义化事件,例如:
- `response.created`、`response.in_progress`、`response.completed`、`response.failed`
- `response.output_item.added`、`response.output_item.done`
- `response.content_part.added`、`response.content_part.done`
- `response.output_text.delta`、`response.output_text.done`
- 规范要求:
- `Content-Type: text/event-stream`
- `event:` 必须与 JSON 的 `type` 字段匹配
- 终止事件必须是字面量 `[DONE]`
- 推理项可以暴露 `content`、`encrypted_content` 和 `summary`
- HF 示例在请求中包含 `OpenResponses-Version: latest`(可选头部)。
## 建议架构
- 添加 `src/gateway/open-responses.schema.ts`,仅包含 Zod schema不引入 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` 独立;允许两个端点分别切换。
- 当 Chat Completions 启用时,在启动时发出警告以提示其旧版状态。
## Chat Completions 废弃路径
- 维护严格的模块边界Responses 和 Chat Completions 之间不共享 schema 类型。
- 通过配置使 Chat Completions 变为可选启用,这样无需修改代码即可禁用。
-`/v1/responses` 稳定后,更新文档将 Chat Completions 标记为旧版。
- 可选的未来步骤:将 Chat Completions 请求映射到 Responses 处理器,以简化移除路径。
## 第一阶段支持子集
- 接受 `input` 为字符串或包含消息角色和 `function_call_output``ItemParam[]`
- 将 system 和 developer 消息提取到 `extraSystemPrompt` 中。
- 使用最近的 `user``function_call_output` 作为智能体运行的当前消息。
- 对不支持的内容部分(图片/文件)返回 `invalid_request_error` 拒绝。
- 返回包含 `output_text` 内容的单条助手消息。
- 返回 `usage`,在接入令牌计量之前使用零值。
## 验证策略(无 SDK
- 为以下支持的子集实现 Zod schema
- `CreateResponseBody`
- `ItemParam` + 消息内容部分联合类型
- `ResponseResource`
- Gateway网关使用的流式事件结构
- 将 schema 保存在单个隔离模块中,以避免漂移并支持未来的代码生成。
## 流式实现(第一阶段)
- SSE 行同时包含 `event:``data:`
- 必需的序列(最小可行方案):
- `response.created`
- `response.output_item.added`
- `response.content_part.added`
- `response.output_text.delta`(按需重复)
- `response.output_text.done`
- `response.content_part.done`
- `response.completed`
- `[DONE]`
## 测试和验证计划
-`/v1/responses` 添加端到端测试覆盖:
- 需要认证
- 非流式响应结构
- 流式事件顺序和 `[DONE]`
- 使用头部和 `user` 的会话路由
- 保持 `src/gateway/openai-http.e2e.test.ts` 不变。
- 手动测试:使用 curl 请求 `/v1/responses`,设置 `stream: true`,验证事件顺序和终止 `[DONE]`
## 文档更新(后续)
-`/v1/responses` 的用法和示例添加新的文档页面。
-`/gateway/openai-http-api` 中添加旧版说明并指向 `/v1/responses`