docs: clarify Anthropic Messages support and client setup

Co-authored-by: Codex <noreply@openai.com>
This commit is contained in:
Zyy
2026-11-11 01:33:14 +08:00
co-authored by Codex
parent e3befd862a
commit a4e60c3d57
4 changed files with 23 additions and 23 deletions
+5 -5
View File
@@ -17,7 +17,7 @@
</div>
> [!NOTE]
> 本项目提供 Responses API 和 Chat Completions API;Chat Completions 请求通过 Responses 链路执行,支持范围见 [API 参考](docs/api.md#chat-completions-请求)
> 生成请求支持 [OpenAI Responses](docs/api.md#responses-请求与传输)、[Chat Completions](docs/api.md#chat-completions-请求) 和 [Anthropic Messages](docs/api.md#messages-请求) 三种协议
## 快速预览
@@ -100,12 +100,12 @@ API Key 持有者可在登录页切换身份,查看自己的用量与额度,
完整步骤、生图配置与排障见[客户端配置](deploy/README.md#客户端配置)
**其他 Responses / Chat Completions API 客户端**:填写以下信息:
**其他 API 客户端**:API Key 填写管理端创建的客户端密钥。按客户端自动追加的请求路径填写 Base URL;远程接入时将本机地址换成服务器的 HTTPS 地址
| 配置 | 值 |
| 客户端自动追加的路径 | Base URL(本机部署) |
| --- | --- |
| Base URL | `http://127.0.0.1:8080/v1`;远程接入使用服务器的 HTTPS 地址 |
| API Key | 管理端创建的客户端密钥 |
| OpenAI Responses:`/responses`;Chat Completions:`/chat/completions` | `http://127.0.0.1:8080/v1` |
| Anthropic Messages:`/v1/messages` | `http://127.0.0.1:8080` |
查询该密钥可见的模型目录:
+7 -7
View File
@@ -477,9 +477,9 @@ Compose 默认只绑定 `127.0.0.1`。从其他设备访问时,在应用前配
HTTP 传输不加密,公网部署仍建议使用 HTTPS。
会话 Cookie 合同见 [管理接口鉴权](../docs/api.md#管理接口)
反向代理需要保留 `Authorization`,支持 `/v1/responses` 的 WebSocket Upgrade,
并关闭 SSE 响应缓冲。读取超时应覆盖长时间生成任务。
客户端使用部署地址下的 `/v1`,协议与部署一致,不要使用前端开发服务的 `5173/dev/v1`。
反向代理应保留客户端发送的 `Authorization`、`x-api-key`、`anthropic-version` 和 `anthropic-beta` 请求头,
支持 `/v1/responses` 的 WebSocket Upgrade,并关闭 SSE 响应缓冲。读取超时应覆盖长时间生成任务。
客户端连接网关的部署地址,不要使用前端开发服务的 `5173/dev/v1`。
当前应用只支持单副本,不能通过复制容器扩容
Responses 流式请求完成准入后,每 15 秒无输出会发送一次 SSE 注释保活,覆盖首个业务事件前的等待,
@@ -523,7 +523,10 @@ SSE 注释保活用于防止传输链路空闲断开,不会重置 Codex 等待
## 客户端配置
在管理端创建客户端密钥,打开「使用密钥」,按操作系统复制 `config.toml`。
在管理端创建客户端密钥。Responses、Chat Completions 和 Anthropic Messages 客户端的 Base URL 见[客户端接入](../README.md#客户端接入);
直接发送 HTTP 请求可参考 [Messages 示例](../docs/api.md#messages-请求)
使用 Codex 时,打开「使用密钥」,按操作系统复制 `config.toml`。
已有配置先备份,合并后完全退出并重启 Codex。代理密钥由 Provider 配置提供,
不需要另写 `auth.json`,已有官方登录文件可以保留
@@ -662,9 +665,6 @@ metrics_exporter = "none"
- 地址包含 `5173/dev/v1`:这是开发代理地址,依赖 Vite 服务。日常使用改成后端或 HTTPS 地址;
验证 WebSocket 时直接连接后端,当前 Vite 代理未显式开启 WebSocket 转发
其他客户端使用 Responses API、`/v1` Base URL 和代理密钥即可,不需要 Actor 标记。
路由与请求格式见 [API 参考](../docs/api.md#3-模型数据面与模型目录)
## 停止与重启
管理端重启、SIGTERM 和 SIGINT 使用同一关闭策略:停止接收新连接,不等待现有 HTTP、SSE、
+10 -10
View File
@@ -29,7 +29,7 @@ Authorization: Bearer sk_...
自动生成的 Key 保持 `sk_` 格式;迁入的自定义 Key 使用保存时的原值,不限制前缀或固定长度。
无论格式如何,只有已保存且启用的 Client Key 能通过鉴权
`/v1/messages` 与 `/v1/messages/count_tokens` 也接受 `x-api-key: <Client Key>`。
`/v1/messages`、`/v1/messages/count_tokens`、`/v1/models` 和 `/v1/models/{model_id}` 也接受 `x-api-key: <Client Key>`。
同时提供两个认证头时优先使用 `Authorization`;客户端提交的是网关 Client Key,上游密钥由选中的账号提供
启用[入口认证插件](../backend/crates/gateway-plugin/sdk/docs/capabilities.md#数据面入口认证)时,
@@ -226,8 +226,8 @@ WebSocket message 和 frame 不设置网关私有长度上限;请求字段与
| `POST` | `/v1/alpha/search` | Codex standalone web search;JSON 请求与响应正文原样转发 |
| `POST` | `/v1/images/generations` | 通过 OpenAI Provider 发起图像生成;JSON 请求与响应正文原样转发 |
| `POST` | `/v1/images/edits` | 通过 OpenAI Provider 发起图像编辑;JSON 原样转发,multipart 上传转为原生 Images JSON |
| `GET` | `/v1/models` | 返回当前 Client Key 账号范围内各 Provider 的可用公开模型并集;有两种响应形态,见下 |
| `GET` | `/v1/models/{model_id}` | 返回 OpenAI 兼容的单模型详情 |
| `GET` | `/v1/models` | 返回当前 Client Key 可见的模型;OpenAI、Codex 和 Messages 三种响应格式见[模型目录](#模型目录) |
| `GET` | `/v1/models/{model_id}` | 返回当前 Client Key 可见的单个模型,支持 OpenAI 和 Messages 格式 |
| `POST` | `/v1/providers/{provider}/models/{model}/count_tokens` | 调用指定 Provider/model 声明的 Token 计数;请求和响应均为 JSON,计数方式由 Provider 决定 |
| `GET` / `POST` | `/v1/providers/{provider}/http/{endpoint}` | 调用指定 Provider 预先声明的固定 HTTP 操作;不是任意 URL 代理 |
| `GET` | `/v1/usage` | 查询当前 Client Key 的日与周额度,仅使用网关已结算的 USD 账本 |
@@ -653,7 +653,7 @@ OAuth 的大 connection-local WS 续接,以及 HTTP `store=false` 成功后标
此规则适用于所有客户端。下一步请求应在新连接上发送完整输入,省略 `previous_response_id`。
已接收的后续请求按序处理,若增量先到,仍按上述 400 合同恢复。启用 WS 帧中间件时保留连接
已建立模型执行的 Responses、Images 和 Search HTTP 响应按以下规则返回关联 ID:
已建立模型执行的 HTTP 响应(生成请求、Messages 输入计数、Images 和 Search)按以下规则返回关联 ID:
`x-gateway-request-id` 为模型执行 ID;`x-request-id` 保留有效上游值,只有上游
`x-oai-request-id` 时复用其值,没有上游 ID 时使用模型执行 ID。`x-oai-request-id` 不是必需字段,
也不要求客户端识别它;OpenAI 与 xAI 路由使用相同规则。失败响应的关联 ID 不采用会话 opening ID,
@@ -1124,7 +1124,7 @@ call 与账号的绑定保存在网关进程内,未连接时一小时过期;
依赖不可用时返回 503,不返回已认证或假装未登录。预算耗尽不妨碍登录
密钥会话访问管理接口返回 403,不清除仍然有效的会话。
浏览器会话不能替代 `/v1/*` 的 Bearer Key,数据面 Key 也不能替代浏览器会话
浏览器会话不能替代 `/v1/*` 的 Client Key,Client Key 也不能替代浏览器会话
所有 `/api/auth/*` 响应带 `Cache-Control: no-store`;未知路径和错误 method 返回 JSON,不落入 SPA。
两种登录共享来源桶和全局桶,分别为每 60 秒 10 次 / 200 次;来源取连接 IP,不信任任意转发头。
@@ -1380,8 +1380,8 @@ OpenAI 只使用该账号当前凭据和套餐对应、最近 30 分钟内同步
批量接口的调度、分组、模型与代理字段均可省略;省略的字段保持各账号原值。
提供 `groupIds` 时替换完整分组集合,提供 `concurrencyLimit: null` 时恢复继承运行参数
限制适用于 Responses HTTP、WebSocket 及其带压缩触发的请求,以及 Images 生图、编辑与独立 Search 选号,包括重试、亲和和换号;没有合规账号时沿用
无可用账号错误,不会回退到被禁止的账号。已开始请求使用冻结的政策,新请求使用已发布的新配置。
限制适用于 Responses(含 WebSocket 和上下文压缩)、Chat Completions、Messages 生成与输入计数,以及 Images 生图、编辑与独立 Search。
重试、亲和和换号同样遵守限制;没有合规账号时返回无可用账号错误。已开始请求使用冻结的政策,新请求使用已发布的新配置。
Images 和 Search 按原始请求正文的模型 ID 检查,不依赖模型目录或全局模型映射;可手动添加目录未列出的模型 ID。
模型缺失、重复或无法识别时,仅使用模型政策为 `all` 的账号,不推测上游默认模型。
Search 的选号限制不约束插件在选号后主动改写正文。
@@ -2192,7 +2192,7 @@ HTTP 返回 `429`,`error.code` 为 `key_daily_budget_exceeded` 或 `key_weekly
### 隐私策略
`codexPrivacyPolicy` 为必填对象,默认 `{ enabled: false, onError: "skip_rule", rules: [] }`。
只处理经网关发送的 OpenAI Responses HTTP/WebSocket 和独立 JSON 端点请求,不控制客户端直接发送的遥测。
策略作用于 OpenAI Provider 发往上游的 Responses、Messages 和独立 JSON 端点请求,不控制客户端直接发送的遥测。
规则按列表顺序执行,关闭策略或单条规则会保留配置。没有字段保护名单,认证、会话、工具等字段也可配置;改写后对上游行为的影响由配置者承担
每条规则包含唯一 `id`、`name`、`enabled` 和非空 `steps` 数组。步骤按顺序执行,后续步骤读取前序步骤的结果,
@@ -2312,7 +2312,7 @@ Chat Completions 和 Responses 通过原生 OpenAI Provider 选号时,缺少
### 请求解压上限
`responsesMaxDecompressedBodyBytes` 限制压缩 Responses HTTP 请求的解压输出,以及插件受管 HTTP
`responsesMaxDecompressedBodyBytes` 限制[生成与 Messages 输入计数请求的解压输出](#请求解压),以及插件受管 HTTP
的实际出站正文(包括账号上游请求,无论是否压缩),单位字节,默认 67108864(64 MiB)。
必须为正整数,且可表示为进程平台的 `isize`;管理端以整数 MiB 编辑。
插件模型调用从同一设置派生内部请求编码预算,具体边界见 [SDK 模型请求](../backend/crates/gateway-plugin/sdk/docs/capabilities.md#key模型与模型调用)
@@ -3285,7 +3285,7 @@ GitHub 的 `location` 使用 `kind: "github"`、`repository: "owner/repo"`、`ta
`http`、`websocket` 和 `service` 不使用 Key、分组、Provider 或模型范围,这些数组必须为空;插件在处理器内匹配路径、消息或服务操作。
`request` 与 `routing` 支持 Key、分组和公开模型范围,Provider 范围必须为空;`attempt`、`outbound`、`upstream`、`scheduling`、`retry` 与 `observation` 可使用 Provider 范围
`outbound` 准备原生 Provider 交给 transport 的请求,覆盖 OpenAI Responses HTTP / WS、Images、Search、Live 创建及 xAI 生成与压缩。
`outbound` 准备原生 Provider 交给 transport 的请求,覆盖 OpenAI Provider 的 Responses HTTP / WS、Messages 生成与原生输入计数、Images、Search、Live 创建,以及 xAI 生成与压缩。
它使用最终上游模型匹配范围,下一层返回准备后的请求,不执行发送;字节、headers、HTTP 方法和目标的合同见 [SDK 出站请求准备](../backend/crates/gateway-plugin/sdk/docs/capabilities.md#上游出站准备)。
该阶段不包括 OAuth、额度刷新等后台请求,也不包括由 `upstream_adapter` 自行执行的发送
+1 -1
View File
@@ -832,7 +832,7 @@ OpenAI 固定归属请求直接读取目标账号,其余请求按冻结的账
Store 只保存带版本的绑定事实,Provider 在取得租约后、发送前原子认领、续期或按模式迁移;快照冲突释放租约并重新选择。
首次认领不依赖根线程先发请求,独立后台任务也使用自身会话绑定。
无显式会话的 OpenAI 生成请求可按客户端缓存键或对话开头形成账号亲和,复用所选模式的准入、等待、迁移与过期机制。
OpenAI Provider 对无显式会话的 Responses 和 Chat Completions 入站请求,可按客户端缓存键或对话开头形成账号亲和。Messages 入站请求不按对话内容绑定账号。
亲和键按 Client Key 隔离,与会话键使用不同命名空间,不建立轮次关联或原生续接归属。
内容亲和存储不可用时,优先模式按普通调度继续选号,严格模式停止发送。
响应完成不写回账号,迁移前已准入的请求可以完成,不能把绑定改回旧账号。显式会话的绑定存储不可用时不绕过绑定发送