Claude 原生端点:/v1/messages 用法

使用 Anthropic 原生协议调用 Claude 全系列模型:messages 结构、system 参数、extended thinking、原生工具调用与多轮对话的完整示例。

端点:https://api.zaimod.com/v1/messages,与 Anthropic 官方 API 同构。官方 anthropic SDK 只需替换 base_url 和 key。

Python
import anthropic

client = anthropic.Anthropic(
    api_key="sk-your-zaimod-key",
    base_url="https://api.zaimod.com",
)

基础调用

Python
message = client.messages.create(
    model="claude-sonnet-5",
    max_tokens=4096,                      # 必填
    system="你是一个资深代码审查助手。",     # system 是顶层参数
    messages=[
        {"role": "user", "content": "审查这段函数的错误处理"}
    ],
)
print(message.content[0].text)
print(message.usage)  # input_tokens / output_tokens

与 OpenAI 协议的三个结构差异:

  1. max_tokens 必填
  2. system 提示词是独立参数,不在 messages 里
  3. 响应的 content 是块数组(text / thinking / tool_use)

多轮对话

Anthropic 协议没有「assistant 自动拼接」,每轮都要把历史完整传入:

Python
history = [{"role": "user", "content": "什么是幂等性?"}]
m1 = client.messages.create(model="claude-sonnet-5", max_tokens=1024, messages=history)
history.append({"role": "assistant", "content": m1.content[0].text})
history.append({"role": "user", "content": "给一个 RESTful 的例子"})
m2 = client.messages.create(model="claude-sonnet-5", max_tokens=1024, messages=history)

流式输出

Python
with client.messages.stream(
    model="claude-sonnet-5",
    max_tokens=2048,
    messages=[{"role": "user", "content": "解释一下 CAP 定理"}],
) as stream:
    for text in stream.text_stream:
        print(text, end="", flush=True)

Extended Thinking(思考模式)

thinking 模型(如 claude-sonnet-5-thinking)会先输出推理过程:

Python
resp = client.messages.create(
    model="claude-sonnet-5-thinking",
    max_tokens=16000,
    thinking={
        "type": "enabled",
        "budget_tokens": 8000,   # 思考 token 预算
    },
    messages=[{"role": "user", "content": "9.11 和 9.9 哪个大?"}],
)
for block in resp.content:
    if block.type == "thinking":
        print("[思考]", block.thinking[:200])
    elif block.type == "text":
        print("[回答]", block.text)

原生工具调用

Python
tools = [{
    "name": "get_order",
    "description": "按订单号查询订单状态",
    "input_schema": {
        "type": "object",
        "properties": {"order_id": {"type": "string"}},
        "required": ["order_id"],
    },
}]

resp = client.messages.create(
    model="claude-sonnet-5",
    max_tokens=2048,
    tools=tools,
    messages=[{"role": "user", "content": "查一下订单 A1024"}],
)
tool_use = next(b for b in resp.content if b.type == "tool_use")
print(tool_use.name, tool_use.input)

# 执行后回传结果
resp2 = client.messages.create(
    model="claude-sonnet-5",
    max_tokens=2048,
    tools=tools,
    messages=[
        {"role": "user", "content": "查一下订单 A1024"},
        {"role": "assistant", "content": resp.content},
        {"role": "user", "content": [{
            "type": "tool_result",
            "tool_use_id": tool_use.id,
            "content": '{"status": "shipped"}',
        }]},
    ],
)

多模态输入

Python
import base64

with open("chart.png", "rb") as f:
    data = base64.standard_b64encode(f.read()).decode()

resp = client.messages.create(
    model="claude-sonnet-5",
    max_tokens=2048,
    messages=[{"role": "user", "content": [{
        "type": "image",
        "source": {"type": "base64", "media_type": "image/png", "data": data},
    }, {
        "type": "text", "text": "总结这张图的三个要点",
    }]}],
)

在架 Claude 模型

模型定位
claude-sonnet-5 / -thinking主力:编程、Agent、长文
claude-opus-5 / -thinking更强推理,价格更高
claude-opus-4-7 / 4-8上一代旗舰,任务特定时可对比
claude-fable-5 系列最新旗舰,复杂任务

价格见 价格页。

← OpenAI 协议接入:chat/completions 完全用法 Gemini 原生端点:generateContent 用法 →