Messages(Anthropic) — Markdown 源文
以下为可直接复制或提供给 AI Agent 的 Markdown 原文。
> **AI Agents**: 索引 `/api/llms.txt` | 英文全文 `/api/llms-full-en.txt` | 中文全文 `/api/llms-full-zh.txt` | OpenAPI `/api/openapi.yaml`
> Base URL: `<BASE_URL>/v1`
# Messages(Anthropic 兼容)
使用 **Anthropic Messages API** 格式创建模型回复,与 [OpenRouter `/v1/messages`](https://openrouter.ai/docs/api/api-reference/anthropic-messages/create-messages) 类似。
```
POST <BASE_URL>/v1/messages
```
适用于 **Anthropic SDK**、**Claude Code** 等期望原生 Anthropic 请求/响应形态的客户端。也可调用非 Anthropic 上游模型(网关转 OpenAI Chat Completions)。发图到 Claude 请用本接口。
## 认证
必需:`Authorization: Bearer <API_KEY>`(与 `/v1/chat/completions` 使用同一 SupaNexus API Key)。
## 请求头
| 头 | 必需 | 说明 |
|----|------|------|
| `Authorization` | 是 | Bearer API Key |
| `Content-Type` | 是 | `application/json` |
| `Idempotency-Key` | 否 | 24 小时内按 Key 去重 |
| `Accept-Language` / `X-Locale` | 否 | 部分错误文案本地化 |
## 请求体
SupaNexus 接受标准 Anthropic Messages JSON,识别 `model` 与 `stream` 参数。
```json
{
"model": "anthropic/claude-3-5-sonnet",
"max_tokens": 1024,
"messages": [
{"role": "user", "content": "你好!"}
],
"stream": false
}
```
| 字段 | 必需 | 说明 |
|------|------|------|
| `model` | 是 | `GET /v1/models` 返回的模型 id |
| `messages` | 是 | Anthropic 消息数组 |
| `max_tokens` | 是 | 最大输出 token(Anthropic 必填) |
| `system` | 否 | 系统提示(字符串或 content blocks) |
| `stream` | 否 | `true` 时返回 Anthropic SSE 事件流 |
| `temperature`、`top_p`、`stop_sequences` | 否 | 支持时透传 |
| `tools`、`tool_choice`、`thinking`、`metadata` | 否 | 按 Anthropic 兼容方式透传(如模型支持) |
## 多模态输入(图片)
当模型 `architecture.input_modalities` 包含 `"image"` 时,`messages[].content` 可为 **content block 数组**,同时携带文本与图片。
### Base64 图片示例
```json
{
"model": "anthropic/claude-sonnet-5",
"max_tokens": 1024,
"messages": [
{
"role": "user",
"content": [
{
"type": "image",
"source": {
"type": "base64",
"media_type": "image/jpeg",
"data": "/9j/4AAQSkZJRg..."
}
},
{"type": "text", "text": "请描述这张图片"}
]
}
]
}
```
### URL 图片示例
```json
{
"type": "image",
"source": {
"type": "url",
"url": "https://example.com/photo.jpg"
}
}
```
### 限制:OpenAI 协议上游模型
若目标模型的上游为 **OpenAI Chat Completions** 协议(非 `anthropic/*`),Anthropic image block **不会**被转换成 `image_url`,上游通常会拒绝请求。此时请改用 [`POST /v1/chat/completions`](./chat-completions.md) 与 OpenAI `image_url` 格式,详见 [参数 → 多模态输入](./parameters.md)。
**建议**:要发图片时,客户端协议须与模型上游协议一致——`anthropic/*` 用本端点,其余模型用 `/v1/chat/completions`。
## 非流式响应
Anthropic 形态 JSON:
```json
{
"id": "msg_...",
"type": "message",
"role": "assistant",
"model": "claude-3-5-sonnet-20241022",
"content": [{"type": "text", "text": "你好!有什么可以帮你的?"}],
"stop_reason": "end_turn",
"usage": {"input_tokens": 12, "output_tokens": 8}
}
```
## 流式
`stream: true` 时返回 Anthropic 事件流(`message_start`、`content_block_delta`、`message_delta`、`message_stop`)。通用 SSE 说明见 [流式响应](./streaming.md)。
## 响应头(SupaNexus)
与 Chat Completions 相同:`X-SNX-Trace-ID`、`X-SNX-Model`、`X-SNX-Provider`。
## 错误格式
`/v1/messages` 返回 **Anthropic 形态**错误(非 OpenRouter 数字 `error.code`):
```json
{
"type": "error",
"error": {
"type": "invalid_request_error",
"message": "you must provide a model parameter"
}
}
```
| HTTP | 典型 `error.type` |
|------|-------------------|
| 400 | `invalid_request_error` |
| 401 | `authentication_error` |
| 402 | `billing_error` |
| 404 | `not_found_error` |
| 429 | `rate_limit_error` |
| 503 | `overloaded_error` |
若需要 OpenRouter 形态错误体,请使用 [`POST /v1/chat/completions`](./chat-completions.md)。
## OpenAI 与 Anthropic 端点对照
| 客户端 | 端点 | 错误体 |
|--------|------|--------|
| OpenAI SDK | `POST /v1/chat/completions` | OpenRouter `{error:{code,message}}` |
| Anthropic SDK / Claude Code | `POST /v1/messages` | Anthropic `{type,error:{type,message}}` |
两者共用 **同一 SupaNexus API Key**,路由、配额与计费逻辑一致。
## 相关
- [Anthropic SDK 集成](./anthropic-sdk-integration.md)
- [Chat Completions](./chat-completions.md)
- [认证](./authentication.md)
- [错误处理](./errors.md)