# Messages(Anthropic 协议)

> POST /v1/messages 的请求字段与响应结构,以及用 Anthropic 协议调用任意厂商模型时的行为。

```
POST https://api.tokrouter.dev/v1/messages
x-api-key: sk-…
anthropic-version: 2023-06-01
Content-Type: application/json
```

## 请求字段

| 字段 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| `model` | string | 是 | 模型 id;可以是任意厂商的模型 |
| `max_tokens` | integer | **是** | Anthropic 协议要求必填 |
| `messages` | array | 是 | `role` 为 `user` / `assistant`,内容可以是字符串或内容块数组 |
| `system` | string / array | 否 | 系统提示词(与 OpenAI 的 `messages[0].role=system` 等价) |
| `stream` | boolean | 否 | SSE 流式 |
| `temperature` | number | 否 | |
| `tools` | array | 否 | Anthropic 形态的工具定义 |
| `stop_sequences` | array | 否 | |

```bash
curl https://api.tokrouter.dev/v1/messages \
  -H "x-api-key: $TOKROUTER_API_KEY" \
  -H "anthropic-version: 2023-06-01" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "claude-opus-5-5",
    "max_tokens": 512,
    "system": "你是一个简洁的助手",
    "messages": [{"role": "user", "content": "你好"}]
  }'
```

## 响应

```json
{
  "id": "msg_...",
  "type": "message",
  "role": "assistant",
  "model": "claude-opus-5-5",
  "content": [{"type": "text", "text": "你好"}],
  "stop_reason": "end_turn",
  "usage": {"input_tokens": 14, "output_tokens": 3}
}
```

## 与 OpenAI 协议的差异

| 差异点 | Anthropic | OpenAI |
| --- | --- | --- |
| 系统提示词 | 顶层 `system` | `messages` 里的 `system` 角色 |
| 输出上限 | `max_tokens` **必填** | 可选 |
| 响应文本位置 | `content[0].text` | `choices[0].message.content` |
| 鉴权头 | `x-api-key` | `Authorization: Bearer` |

用 Anthropic 协议调用非 Anthropic 模型时,响应仍然是 Anthropic 结构 —— 客户端不需要按厂商分支。
