Claude 原生端点:/v1/messages 用法
使用 Anthropic 原生协议调用 Claude 全系列模型:messages 结构、system 参数、extended thinking、原生工具调用与多轮对话的完整示例。
端点:https://api.zaimod.com/v1/messages,与 Anthropic 官方 API 同构。官方 anthropic SDK 只需替换 base_url 和 key。
import anthropic
client = anthropic.Anthropic(
api_key="sk-your-zaimod-key",
base_url="https://api.zaimod.com",
)基础调用
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 协议的三个结构差异:
max_tokens必填- system 提示词是独立参数,不在 messages 里
- 响应的
content是块数组(text / thinking / tool_use)
多轮对话
Anthropic 协议没有「assistant 自动拼接」,每轮都要把历史完整传入:
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)流式输出
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)会先输出推理过程:
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)原生工具调用
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"}',
}]},
],
)多模态输入
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 系列 | 最新旗舰,复杂任务 |
价格见 价格页。