Claude API Python 调用示例(2026)
Claude API 在 Python 里怎么调?本文给你可复制即跑的示例:两种调用方式、流式输出、 工具调用(Function Calling)、多轮对话、常见错误处理。默认使用 TokenProvider 作为 base_url,直接比官方便宜一半以上。
最简版 3 行代码:安装 openai SDK,把 base_url 指到 tokenprovider.store,
model 写 claude-sonnet-4。下方每个段落都是可运行的脚本。
准备工作
- Python ≥ 3.8
- 一个 TokenProvider API 密钥(免费注册,$1 起充)
- 选一个 SDK:
openai(推荐,通用)或anthropic(官方)
pip install openai # 方式 A:OpenAI SDK(同时支持 Claude / GPT / Gemini)
pip install anthropic # 方式 B:Anthropic 官方 SDK(只用 Claude 时推荐)
方式 A:OpenAI SDK(推荐)
一个 SDK 调所有模型,切换只改 model 参数:
from openai import OpenAI
client = OpenAI(
api_key="你的 TokenProvider密钥",
base_url="https://tokenprovider.store/v1",
)
resp = client.chat.completions.create(
model="claude-sonnet-4", # 或 claude-opus, claude-haiku, gpt-4o, gemini-2-flash
messages=[
{"role": "system", "content": "你是资深 Python 工程师。"},
{"role": "user", "content": "写一个高效的快速排序,含类型标注。"},
],
max_tokens=800,
)
print(resp.choices[0].message.content)
print(f"花了 {resp.usage.total_tokens} token")
关键点:
base_url末尾带/v1,这是 OpenAI 协议的固定前缀model直接写 Anthropic 的模型名(不要加anthropic/前缀)resp.usage会返回实际计费的 token 数
方式 B:Anthropic 官方 SDK
只调 Claude、用官方的 Messages 协议:
import anthropic
client = anthropic.Anthropic(
api_key="你的 TokenProvider密钥",
base_url="https://tokenprovider.store", # 注意:不带 /v1
)
msg = client.messages.create(
model="claude-sonnet-4",
max_tokens=800,
system="你是资深 Python 工程师。",
messages=[
{"role": "user", "content": "写一个高效的快速排序,含类型标注。"},
],
)
print(msg.content[0].text)
print(f"输入 {msg.usage.input_tokens} 输出 {msg.usage.output_tokens}")
注意 base_url 的差异: OpenAI SDK 用 /v1 后缀,
Anthropic SDK 不带后缀。搞反了会收到 404。
流式输出(边生成边显示)
适合做聊天界面、CLI 工具:
from openai import OpenAI
client = OpenAI(
api_key="你的密钥",
base_url="https://tokenprovider.store/v1",
)
stream = client.chat.completions.create(
model="claude-sonnet-4",
messages=[{"role": "user", "content": "用 3 段话介绍 Python asyncio。"}],
stream=True,
)
for chunk in stream:
if chunk.choices[0].delta.content:
print(chunk.choices[0].delta.content, end="", flush=True)
print()
流式模式下 resp.usage 一般在最后一个 chunk 里给出。
工具调用(Function Calling)
让 Claude 返回结构化函数调用:
import json
from openai import OpenAI
client = OpenAI(api_key="你的密钥", base_url="https://tokenprovider.store/v1")
tools = [{
"type": "function",
"function": {
"name": "get_weather",
"description": "查询城市当前天气",
"parameters": {
"type": "object",
"properties": {
"city": {"type": "string", "description": "城市拼音或中文名"}
},
"required": ["city"],
},
},
}]
resp = client.chat.completions.create(
model="claude-sonnet-4",
messages=[{"role": "user", "content": "北京今天天气怎么样?"}],
tools=tools,
)
tool_call = resp.choices[0].message.tool_calls[0]
args = json.loads(tool_call.function.arguments)
print(f"Claude 请求调用 {tool_call.function.name}({args})")
后续把真实天气结果作为 tool 角色消息喂回去,Claude 会整合成最终答复。
多轮对话(维持上下文)
history = [
{"role": "system", "content": "你是一个 Python 助教,回答要精炼。"},
]
def ask(question: str) -> str:
history.append({"role": "user", "content": question})
resp = client.chat.completions.create(
model="claude-sonnet-4",
messages=history,
)
answer = resp.choices[0].message.content
history.append({"role": "assistant", "content": answer})
return answer
print(ask("asyncio 里 await 和 yield from 有什么区别?"))
print(ask("那 asyncio.gather 和 wait 呢?")) # 第二轮自动带上下文
错误处理
from openai import OpenAI, RateLimitError, AuthenticationError, APIError
client = OpenAI(api_key="你的密钥", base_url="https://tokenprovider.store/v1")
try:
resp = client.chat.completions.create(
model="claude-sonnet-4",
messages=[{"role": "user", "content": "hello"}],
timeout=30,
)
except AuthenticationError:
print("密钥错误 — 检查 API key 是否过期或写错")
except RateLimitError:
print("频率限制 — 稍后重试或联系 TokenProvider 提额")
except APIError as e:
print(f"API 错误: {e.status_code} {e.message}")
省钱技巧
- 长系统提示用 Haiku:分类、摘要类任务用 Haiku 3.5 足够,单价只有 Sonnet 的 1/10
- 开启提示缓存:同一段长系统提示重复请求时,缓存命中后输入成本降到约 10%
- 控制 max_tokens:Claude 输出按 token 计费,设合理上限避免过度生成
- 粘性会话:同密钥连续请求自动落到同一上游账号,缓存复用率更高
拿密钥,把上面的代码跑起来
注册送测试额度,无月费,按量扣费,支持 Sonnet 4 / Opus / Haiku。
免费注册 → 已有账号登录常见问题
用哪个 SDK 更好?
如果项目里同时会调 GPT/Gemini,用 openai SDK 最省事。纯 Claude 项目且要用 MessagePart(图像、文档)等原生特性,用 anthropic SDK。
支持 Claude Vision 图像输入吗?
支持。OpenAI SDK 用 {"type": "image_url"},Anthropic SDK 用 {"type": "image", "source": {...}}。
并发怎么控制?
用 httpx.AsyncClient 或 asyncio.Semaphore 限制并发数。TokenProvider账号限流宽松,但突发太大仍会 429。
能调 Claude Code 吗?
Claude Code 是 CLI,不是直接的 API。接入方式看 Claude Code 配置教程。