外观
Anthropic SDK
使用 Claude 原生格式(/v1/messages)时,推荐直接使用 Anthropic 官方 SDK,思考(thinking)、工具调用、提示词缓存等能力完整可用。令牌需要属于支持 Claude 的分组:
支持 Claude 的分组
安装与初始化
python
# pip install -U anthropic
import anthropic
client = anthropic.Anthropic(
base_url="https://vip.zen-ai.top", # 不要加 /v1
api_key="sk-xxxxxxxx",
)ts
// npm install @anthropic-ai/sdk
import Anthropic from "@anthropic-ai/sdk";
const client = new Anthropic({
baseURL: "https://vip.zen-ai.top", // 不要加 /v1
apiKey: process.env.VIP_API_KEY,
});也可以设置环境变量 ANTHROPIC_BASE_URL=https://vip.zen-ai.top 与 ANTHROPIC_API_KEY=sk-xxx,代码中直接创建客户端。
基础对话
python
message = client.messages.create(
model="claude-sonnet-4-6",
max_tokens=1024,
system="你是一个简洁的助手。",
messages=[{"role": "user", "content": "用三句话介绍 Rust 语言"}],
)
print(message.content[0].text)
print(message.usage)ts
const message = await client.messages.create({
model: "claude-sonnet-4-6",
max_tokens: 1024,
system: "你是一个简洁的助手。",
messages: [{ role: "user", content: "用三句话介绍 Rust 语言" }],
});
for (const block of message.content) {
if (block.type === "text") console.log(block.text);
}流式输出
输出较长或 max_tokens 较大时建议使用流式,避免请求超时:
python
with client.messages.stream(
model="claude-sonnet-4-6",
max_tokens=4096,
messages=[{"role": "user", "content": "写一篇 500 字的科普短文:黑洞是什么"}],
) as stream:
for text in stream.text_stream:
print(text, end="", flush=True)
final = stream.get_final_message()
print("\n", final.usage)ts
const stream = client.messages.stream({
model: "claude-sonnet-4-6",
max_tokens: 4096,
messages: [{ role: "user", content: "写一篇 500 字的科普短文:黑洞是什么" }],
});
stream.on("text", (text) => process.stdout.write(text));
const final = await stream.finalMessage();
console.log("\n", final.usage);思考(Thinking)
Claude 4.6 及更新的模型使用自适应思考:thinking: {type: "adaptive"},由模型自行决定思考多少,并可通过 output_config.effort 控制深度(low / medium / high / max,部分新模型还支持 xhigh)。
python
with client.messages.stream(
model="claude-opus-4-8",
max_tokens=16000,
thinking={"type": "adaptive"},
output_config={"effort": "high"},
messages=[{"role": "user", "content": "证明根号 2 是无理数"}],
) as stream:
final = stream.get_final_message()
for block in final.content:
if block.type == "thinking":
print("【思考】", block.thinking)
elif block.type == "text":
print("【回答】", block.text)ts
const final = await client.messages
.stream({
model: "claude-opus-4-8",
max_tokens: 16000,
thinking: { type: "adaptive" },
output_config: { effort: "high" },
messages: [{ role: "user", content: "证明根号 2 是无理数" }],
})
.finalMessage();
for (const block of final.content) {
if (block.type === "thinking") console.log("【思考】", block.thinking);
else if (block.type === "text") console.log("【回答】", block.text);
}不同模型的思考参数
- Claude 4.6 及更新模型(
claude-sonnet-4-6、claude-opus-4-6及以上):使用{"type": "adaptive"}。Opus 4.7 / 4.8、Opus 5 等较新模型不再接受budget_tokens和temperature等采样参数,传入会返回 400。 - Opus 4.7 及更新模型默认不返回思考文本(
thinking字段为空字符串),这不影响回答质量。 - Claude Haiku 4.5 及更早的模型:仍使用
{"type": "enabled", "budget_tokens": 8000},budget_tokens需小于max_tokens。 - 多轮对话中,请把上一轮返回的
thinking块原样带回。
工具调用
python
tools = [{
"name": "get_weather",
"description": "查询指定城市的实时天气",
"input_schema": {
"type": "object",
"properties": {"city": {"type": "string", "description": "城市名称"}},
"required": ["city"],
},
}]
messages = [{"role": "user", "content": "北京现在天气怎么样?"}]
resp = client.messages.create(model="claude-sonnet-4-6", max_tokens=1024, tools=tools, messages=messages)
if resp.stop_reason == "tool_use":
messages.append({"role": "assistant", "content": resp.content})
results = []
for block in resp.content:
if block.type == "tool_use":
output = f"{block.input['city']}:晴,18°C" # 这里调用你自己的实现
results.append({"type": "tool_result", "tool_use_id": block.id, "content": output})
messages.append({"role": "user", "content": results})
resp = client.messages.create(model="claude-sonnet-4-6", max_tokens=1024, tools=tools, messages=messages)
print(resp.content[-1].text)图片与 PDF
python
import base64
with open("chart.png", "rb") as f:
image_b64 = base64.standard_b64encode(f.read()).decode()
with open("report.pdf", "rb") as f:
pdf_b64 = base64.standard_b64encode(f.read()).decode()
message = client.messages.create(
model="claude-sonnet-4-6",
max_tokens=2048,
messages=[{
"role": "user",
"content": [
{"type": "image", "source": {"type": "base64", "media_type": "image/png", "data": image_b64}},
{"type": "document", "source": {"type": "base64", "media_type": "application/pdf", "data": pdf_b64}},
{"type": "text", "text": "结合图表和报告,总结三个关键结论。"},
],
}],
)
print(message.content[0].text)完整参数见 Claude 原生格式 → 创建消息。