文本生成/Anthropic Messages API

Anthropic Messages 端点,支持 extended thinking 与 prompt caching 等 Claude 特有能力。

Anthropic Messages API

通过 UniGateway 调用 Anthropic Messages API,使用 Claude 的原生扩展能力。

前置条件

  • 已获取 UniGateway API Key,保存在环境变量 UNIGATEWAY_API_KEY
  • 已通过 GET /v1/models 确认目标 Claude 模型在当前账号中可用

概述

  • 端点:POST /v1/messages
  • Base URL:https://api.unigateway.ai/v1
  • 请求头:
    • Authorization: Bearer <YOUR_UNIGATEWAY_API_KEY>
    • Content-Type: application/json
    • anthropic-version: 2023-06-01

UniGateway 在 POST /v1/messages 上代理 Anthropic Messages 协议。以下 Claude 特有扩展能力通过该接口可用:

  • thinking 扩展推理块
  • cache_control 提示缓存
  • 细粒度的 stop_reason
  • PDF / 图像 / 引用 / 工具调用

请求

基本请求

curl https://api.unigateway.ai/v1/messages \
  -H "Authorization: Bearer $UNIGATEWAY_API_KEY" \
  -H "Content-Type: application/json" \
  -H "anthropic-version: 2023-06-01" \
  -d '{
    "model": "claude-sonnet-4-6",
    "max_tokens": 1024,
    "messages": [
      {"role": "user", "content": "用一段话解释量子计算。"}
    ]
  }'

参数

字段类型必填说明
modelstring使用 GET /v1/models 返回的精确模型 ID
messagesarray消息数组,每条消息包含 rolecontent
max_tokensnumber最大输出 token 数
systemstring / array系统提示;数组形式支持 cache_control
toolsarray可用工具列表
tool_choiceobject / stringautoanynone 或指定工具
thinkingobject扩展推理配置
temperaturenumber输出随机性,范围 0–1
top_pnumber核采样
top_knumberTop-K 采样
stop_sequencesarray停止字符串数组
streamboolean是否启用 SSE 流式输出
metadataobject自定义元数据

Messages 格式

单条文本消息:

{
  "role": "user",
  "content": "用一段话解释量子计算。"
}

多模态 content 使用数组:

{
  "role": "user",
  "content": [
    {"type": "text", "text": "描述这张图片。"},
    {
      "type": "image",
      "source": {
        "type": "base64",
        "media_type": "image/jpeg",
        "data": "/9j/4AAQSkZJRg..."
      }
    }
  ]
}

支持的 content source 类型:

类型说明
base64base64 编码数据,需指定 media_type
url公开可访问的图片 URL

PDF 通过 document 类型传入:

{
  "type": "document",
  "source": {
    "type": "base64",
    "media_type": "application/pdf",
    "data": "JVBERi0xLjQK..."
  }
}

扩展推理(Thinking)

启用 Claude 的扩展推理:

{
  "model": "claude-sonnet-4-6",
  "max_tokens": 4096,
  "thinking": {
    "type": "enabled",
    "budget_tokens": 2048
  },
  "messages": [
    {"role": "user", "content": "证明 sqrt(2) 是无理数。"}
  ]
}
字段类型说明
typestringenabledadaptive
budget_tokensnumber为推理过程分配的 token 预算

启用 thinking 后,响应中包含 thinking content block。max_tokens 必须大于 budget_tokens

提示缓存(Prompt Caching)

在消息或工具定义上添加 cache_control 以减少重复输入成本:

{
  "role": "user",
  "content": [
    {
      "type": "text",
      "text": "长文档或系统提示内容...",
      "cache_control": {"type": "ephemeral"}
    }
  ]
}

cache_control.type 当前仅支持 ephemeral。命中缓存会在响应 usage 中显示 cache_read_input_tokenscache_creation_input_tokens

工具调用

定义工具:

{
  "tools": [
    {
      "name": "get_weather",
      "description": "获取某地当前天气",
      "input_schema": {
        "type": "object",
        "properties": {
          "location": {
            "type": "string",
            "description": "城市名称"
          }
        },
        "required": ["location"]
      }
    }
  ]
}

工具选择策略:

{
  "tool_choice": {"type": "auto"}
}
策略说明
auto模型自行决定是否调用工具
any模型必须调用至少一个工具
none禁止调用工具
tool指定调用某一工具(需传 name

返回工具结果时,在 messages 中添加 role: usertool_result 块:

{
  "role": "user",
  "content": [
    {
      "type": "tool_result",
      "tool_use_id": "toolu_01T1x1fJ34qAmk2tNTrN7Up6",
      "content": "22°C, 晴"
    }
  ]
}

响应

{
  "id": "msg_01XgYfV9UTi2PJN",
  "type": "message",
  "role": "assistant",
  "model": "claude-sonnet-4-6",
  "content": [
    {
      "type": "text",
      "text": "量子计算利用叠加态..."
    }
  ],
  "stop_reason": "end_turn",
  "usage": {
    "input_tokens": 14,
    "output_tokens": 128
  }
}

响应字段

字段说明
id消息 ID
type固定为 message
role固定为 assistant
contentcontent block 数组(textthinkingtool_use
stop_reasonend_turnmax_tokensstop_sequencetool_use
usage.input_tokens输入消耗的 token 数
usage.output_tokens模型生成的 token 数

流式输出

设置 stream: true 开启 SSE:

curl https://api.unigateway.ai/v1/messages \
  -H "Authorization: Bearer $UNIGATEWAY_API_KEY" \
  -H "Content-Type: application/json" \
  -H "anthropic-version: 2023-06-01" \
  -d '{
    "model": "claude-sonnet-4-6",
    "max_tokens": 1024,
    "messages": [{"role": "user", "content": "你好"}],
    "stream": true
  }'

SSE 事件类型包括 message_startcontent_block_startcontent_block_deltacontent_block_stopmessage_deltamessage_stop

错误处理

状态码原因处理方式
400请求参数错误检查 JSON 结构和参数类型
401API Key 无效或缺失检查 Authorization 请求头
404模型 ID 不存在重新确认 GET /v1/models
429触发限流增加退避并重试
529模型过载指数退避重试

Example request

Run it in your stack

Pick the SDK style that matches your app and copy the snippet directly into your project.

import requests

api_key = "<YOUR_UNIGATEWAY_API_KEY>"
resp = requests.post(
    "https://api.unigateway.ai/v1/messages",
    headers={
        "Authorization": f"Bearer {api_key}",
        "Content-Type": "application/json",
        "Anthropic-Version": "2023-06-01",
    },
    json={
        "model": "claude-sonnet-4-6",
        "max_tokens": 1024,
        "messages": [{"role": "user", "content": "Explain quantum computing in one sentence."}],
    },
)
print(resp.json()["content"][0]["text"])