# 协议互转

> 四种入站协议(OpenAI / Anthropic / Gemini / DashScope)在同一 base URL 上互通,以及跨协议时的字段映射边界。

网关接受四种入站协议,并按请求体里的 `model` 选择上游厂商。入站协议与目标厂商**互相独立** ——
这是「用 Anthropic SDK 调 Claude」「用 Anthropic SDK 调 GPT」「用 OpenAI SDK 调 Gemini」都能成立的原因。

## 端点速查

| 协议 | 端点 | 典型客户端 |
| --- | --- | --- |
| OpenAI Chat Completions | `POST /v1/chat/completions` | OpenAI SDK、绝大多数第三方客户端 |
| OpenAI Responses | `POST /v1/responses` | OpenAI Responses API |
| Anthropic Messages | `POST /v1/messages` | `@anthropic-ai/sdk`、Claude Code |
| Gemini | `POST /v1beta/models/{model}:generateContent` | `google-genai` |
| DashScope | `POST /v1/services/aigc/text-generation/generation` | 阿里云 DashScope SDK(去掉 `/api` 前缀) |

## 映射的三条规则

1. **消息结构按入站协议解释**。Anthropic 的 `system` 顶层字段、Gemini 的 `contents[].parts`、
   OpenAI 的 `messages[]` 各自解析,不要求你改写请求体。
2. **能力按目标模型判定**。目标模型不支持工具调用时,即使入站协议里带了 `tools`,也返回错误,
   不会静默丢弃工具定义。
3. **响应按入站协议返回**。用 Anthropic 协议调用 GPT 模型,拿到的是 Anthropic Messages 结构的响应;
   客户端不需要按上游厂商分支。

## 已知边界

| 场景 | 行为 |
| --- | --- |
| 流式 | 四种协议都支持 SSE;`/v1/systemone` 不支持 |
| 工具调用 | 取决于目标模型是否支持 |
| 视觉输入 | 取决于目标模型;不同协议的图片字段形态不同,网关负责换算 |
| 音频 / 实时双向 | 当前不在文档承诺范围内 |

<Callout type="warn" title="不要依赖未文档化的字段透传">
跨协议时,厂商独占字段(例如 OpenAI 的 `logprobs`、Anthropic 的 `cache_control`)不保证在映射后仍然生效。
需要这些能力时,用目标厂商的原生协议入口。
</Callout>

## System One 不属于互转体系

`/v1/systemone` 是 Jev 决策模型的**同协议透传**:请求体是 `{state, questions}`,
响应是带概率的类型化决策(`choice` / `score` / `noul`)。它没有 `messages` 概念,
不支持流式,也不参与上面四种协议的互转。
