Skip to content

Messages API (推荐) ​

通过 Anthropic 原生协议创建 Claude 对话。DouDi.ai 完全兼容 Anthropic Messages API,你可以直接使用官方 SDK。

推荐使用 Anthropic 原生协议调用 Claude 模型。 相比 OpenAI 兼容协议转发,原生协议具备以下优势:

  • 原生 Prompt Caching — system 指令独立传递,自动享受 Anthropic 原生缓存机制,多轮对话前缀命中率更高,可节省最高 90% 输入 token 费用
  • 完整特性支持 — 原生支持 Extended Thinking、Citations、PDF 输入等 Claude 独有能力,无协议转换损耗
  • 更低延迟 — 无需 OpenAI → Anthropic 协议转换,请求直达上游

端点 ​

http
POST https://doudi.ai/v1/messages

认证 ​

Anthropic 协议使用 x-api-key Header:

text
x-api-key: <你的 DOUDI_API_KEY>
anthropic-version: 2023-06-01

请求参数 ​

参数类型必填说明
modelstring✅模型标识,使用 模型广场/价格页面 或 Anthropic Models API 返回的当前可用 ID
max_tokensnumber✅最大生成 token 数
messagesarray✅消息数组
systemstring—系统提示词
temperaturenumber—采样温度 0-1
top_pnumber—核采样参数
top_knumber—Top-K 采样
streamboolean—是否启用流式响应
toolsarray—工具定义
tool_choiceobject—工具选择策略
thinkingobject—Claude 思考模式配置,不同模型版本的取值不同
output_configobject—Claude 4.6+ 自适应思考的输出配置,如 effort

Message 格式 ​

typescript
interface Message {
  role: 'user' | 'assistant'
  content: string | ContentBlock[]
}

type ContentBlock =
  | { type: 'text'; text: string }
  | { type: 'image'; source: { type: 'base64'; media_type: string; data: string } }
  | { type: 'tool_use'; id: string; name: string; input: object }
  | { type: 'tool_result'; tool_use_id: string; content: string }

Claude 思考模式 ​

Claude-family 模型的思考参数会随上游版本变化。请先在 模型广场/价格页面 或 Anthropic Models API 确认当前模型能力,再选择 enabled + budget_tokens 或 adaptive。不要把两类参数混用到同一个请求里。

budget_tokens 必须小于 max_tokens。思考过程会消耗并计入输出 token;如果只需要最终答案,可按上游支持情况使用 display: "omitted" 减少思考内容返回。

手动思考 ​

适用于支持显式 budget_tokens 的模型:

json
{
  "model": "<ANTHROPIC_MODEL_ID>",
  "max_tokens": 16000,
  "thinking": {
    "type": "enabled",
    "budget_tokens": 10000
  },
  "messages": [
    {
      "role": "user",
      "content": "请深入分析这个复杂问题..."
    }
  ]
}

自适应思考 ​

适用于支持 adaptive 的模型。output_config.effort 可按任务复杂度设置为 low、medium 或 high。

json
{
  "model": "<ANTHROPIC_MODEL_ID>",
  "max_tokens": 16000,
  "thinking": {
    "type": "adaptive"
  },
  "output_config": {
    "effort": "medium"
  },
  "messages": [
    {
      "role": "user",
      "content": "请深入分析这个复杂问题..."
    }
  ]
}

如果模型只支持 adaptive,不要发送手动 budget_tokens,否则上游可能返回参数错误。

请求示例 ​

cURL ​

bash
curl https://doudi.ai/v1/messages \
  -H "x-api-key: $DOUDI_API_KEY" \
  -H "anthropic-version: 2023-06-01" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "<ANTHROPIC_MODEL_ID>",
    "max_tokens": 1024,
    "system": "你是一个专业的编程助手。",
    "messages": [
      {"role": "user", "content": "用 Python 写一个快速排序"}
    ]
  }'

Python ​

python
import anthropic

client = anthropic.Anthropic(
    base_url="https://doudi.ai/v1",
    api_key="<你的 DOUDI_API_KEY>"
)

message = client.messages.create(
    model="<ANTHROPIC_MODEL_ID>",
    max_tokens=1024,
    system="你是一个专业的编程助手。",
    messages=[
        {"role": "user", "content": "用 Python 写一个快速排序"}
    ]
)

print(message.content[0].text)

TypeScript ​

typescript
import Anthropic from '@anthropic-ai/sdk'

const client = new Anthropic({
  baseURL: 'https://doudi.ai/v1',
  apiKey: '<你的 DOUDI_API_KEY>'
})

const message = await client.messages.create({
  model: '<ANTHROPIC_MODEL_ID>',
  max_tokens: 1024,
  system: '你是一个专业的编程助手。',
  messages: [
    { role: 'user', content: '用 Python 写一个快速排序' }
  ]
})

console.log(message.content[0].text)

响应格式 ​

json
{
  "id": "msg_abc123",
  "type": "message",
  "role": "assistant",
  "content": [
    {
      "type": "text",
      "text": "以下是 Python 快速排序的实现..."
    }
  ],
  "model": "<ANTHROPIC_MODEL_ID>",
  "stop_reason": "end_turn",
  "usage": {
    "input_tokens": 25,
    "output_tokens": 200
  }
}

流式响应 ​

Python ​

python
with client.messages.stream(
    model="<ANTHROPIC_MODEL_ID>",
    max_tokens=1024,
    messages=[{"role": "user", "content": "讲一个故事"}]
) as stream:
    for text in stream.text_stream:
        print(text, end="", flush=True)

TypeScript ​

typescript
const stream = client.messages.stream({
  model: '<ANTHROPIC_MODEL_ID>',
  max_tokens: 1024,
  messages: [{ role: 'user', content: '讲一个故事' }]
})

for await (const event of stream) {
  if (event.type === 'content_block_delta' && event.delta.type === 'text_delta') {
    process.stdout.write(event.delta.text)
  }
}

DouDi.ai 的 Anthropic 协议支持 Vision、Tool Use、Prompt Caching、Extended Thinking 等原生能力;具体能力以当前模型元数据、上游支持和账号权限为准。