Claude API 调用在 Python 中推荐使用 Anthropic 官方 SDK 或 OpenAI 兼容格式,Node.js 使用 @anthropic-ai/sdk 包,cURL 直接请求 端点,三种方式均需在请求头中传入 x-api-key 和 anthropic-version 参数。
上个月团队新来了两个实习生,一个写 Python 一个写 Node.js,俩人对着 Claude 官方文档折腾了一下午,各种报错——什么 authentication_error、invalid_request_error,甚至连 streaming 响应的 chunk 都不知道怎么拼。我翻了下自己的代码片段收藏夹,发现这几年积累了不少 Claude API 的调用模板,干脆整理出来,省得以后再重复回答同样的问题。
先说结论,不同场景适合不同的调用方式:
pip install anthropic
pip install openai
npm install @anthropic-ai/sdk
pip install openai
我个人开发时用 Anthropic 官方 SDK 比较多,但项目里需要同时调 GPT-5 和 Claude 的时候,就统一走 OpenAI 兼容格式,省得维护两套代码。
方式一:Anthropic 官方 SDK(推荐)
这是功能最全的方式,支持 Vision、Tool Use、System Prompt 等全部特性。
import anthropic
client = anthropic.Anthropic(
api_key="sk-ant-api03-xxxxxxxxxxxxx", # 替换为你的 API Key
)
message = client.messages.create(
model="claude-sonnet-4-", max_tokens=1024, system="你是一个资深 Python 开发者,回答要简洁有代码示例。", messages=[ { "role": "user", "content": "用 Python 写一个快速排序" } ]
)
print(message.content[0].text) print(f"输入 Token: {message.usage.input_tokens}") print(f"输出 Token: {message.usage.output_tokens}")
流式输出版本(打字机效果):
import anthropic
client = anthropic.Anthropic(api_key="sk-ant-api03-xxxxxxxxxxxxx")
with client.messages.stream(
model="claude-sonnet-4-", max_tokens=1024, messages=[ {"role": "user", "content": "解释一下 Python 的 GIL 是什么"} ]
) as stream:
for text in stream.text_stream: print(text, end="", flush=True)
print() # 换行
final_message = stream.get_final_message() print(f" 总 Token: {final_message.usage.input_tokens + final_message.usage.output_tokens}")
多轮对话:
import anthropic
client = anthropic.Anthropic(api_key="sk-ant-api03-xxxxxxxxxxxxx")
conversation_history = []
def chat(user_message: str) -> str:
conversation_history.append({ "role": "user", "content": user_message }) response = client.messages.create( model="claude-sonnet-4-", max_tokens=2048, system="你是一个友好的 AI 助手。", messages=conversation_history ) assistant_message = response.content[0].text conversation_history.append({ "role": "assistant", "content": assistant_message }) return assistant_message
print(chat("我叫小明,我是做后端开发的")) print("—") print(chat("我刚才说我叫什么?做什么的?"))
方式二:OpenAI 兼容格式调用 Claude
这个方式的好处是,如果你项目里已经在用 OpenAI SDK,只需要改两行代码就能切到 Claude。Anthropic 官方目前不直接支持 OpenAI 格式,但很多 API 聚合平台做了兼容层。
(代码示例:from openai import OpenAI …)
流式版本:
(代码示例:from openai import OpenAI …)
这种方式我实测下来最省心,特别是项目里要同时调 Claude、GPT-5、DeepSeek 的时候,只需要改 model 参数就行,其他代码一行不动。
方式三:纯 requests 库调用(不装 SDK)
有些轻量级脚本不想装额外包,直接用 requests:
(代码示例:import requests …)
官方 SDK 方式
(代码示例:// 安装:npm install @anthropic-ai/sdk …)
流式输出:
(代码示例:import Anthropic from ‘@anthropic-ai/sdk’; …)
OpenAI 兼容格式(Node.js)
(代码示例:// 安装:npm install openai …)
基础请求
(代码示例:curl https://api.anthropic.com/v1/messages …)
带 System Prompt 的请求
(代码示例:curl https://api.anthropic.com/v1/messages …)
流式请求
(代码示例:curl https://api.anthropic.com/v1/messages …)
图片识别(Vision)
(代码示例:curl https://api.anthropic.com/v1/messages …)
这个功能特别实用,可以让 Claude 调用你定义的函数:
(代码示例:import anthropic …)
坑 1:anthropic-version 头缺失
用 requests 直接调的时候忘了加 anthropic-version 头,返回了一个莫名其妙的错误:
(代码示例:{"type":"error","error":{"type":"invalid_request_error","mes …)
修复很简单,headers 里加上 "anthropic-version": "2023-06-01" 就行。这个版本号目前一直是 2023-06-01,Anthropic 文档里说后续会更新但到现在没变过。
坑 2:国内网络直连超时
这个是最常见的问题。直接请求 api.anthropic.com 在国内经常超时或者连接被重置。我试过几种方案:
(代码示例:client = anthropic.Anthropic(api_key="sk-ant-xxx") …)
坑 3:流式响应解析出错
用 requests 手动处理 SSE 流式响应的时候,很多人直接 response.json() 然后报错。流式响应不是一个完整的 JSON,而是多个 data: {…} 事件:
(代码示例:response = requests.post(url, headers=headers, json={paylo …)
坑 4:max_tokens 是必填参数
跟 OpenAI 不同,Claude API 的 max_tokens 是必填的,不传会报错。我一般设 1024 或 4096,根据场景调整。Claude Sonnet 4 最大支持 8192 输出 Token。
坑 5:多轮对话 messages 顺序错误
Claude 要求 messages 数组必须严格交替:user → assistant → user → assistant…。如果连续两条 user 消息,会返回 invalid_request_error。需要手动合并或者在中间插一条 assistant 消息。
选模型之前看看这张表:
我 90% 的场景用 Sonnet 4 就够了,效果和 Opus 差距不大但价格便宜 5 倍。只有需要处理特别复杂的多步推理时才上 Opus。
Q: Claude API Key 在哪里获取?
A: 在 console.anthropic.com 注册账号后,进入 API Keys 页面创建。需要绑定国外信用卡才能使用,新账号有 \(5 免费额度。
Q: Claude API 国内能直接调用吗?
A: 不能直接调用,api.anthropic.com 在国内访问不稳定。
Q: Claude API 和 OpenAI API 的格式有什么区别?
A: 主要区别有三点:Claude 用 x-api-key 头而非 Authorization: Bearer;system prompt 是独立参数而非 messages 中的一条;响应结构中用 content[0].text 而非 choices[0].message.content。
Q: Claude Sonnet 4 和 Opus 4 怎么选?
A: 编程和日常任务用 Sonnet 4(\)3/百万输入 Token),复杂推理和超长文档分析用 Opus 4($15/百万输入 Token)。Sonnet 4 的性价比最高,大多数场景够用。
Q: Claude API 支持图片输入吗?
A: 支持。在 messages 的 content 中使用 type: "image" 块,支持 base64 编码和 URL 两种方式传入图片,支持 JPEG、PNG、GIF、WebP 格式。
Q: Claude API 的 stream 流式输出怎么实现?
A: 官方 SDK 用 client.messages.stream() 方法,cURL/requests 在请求体中加 "stream": true,响应为 SSE 格式,需要逐行解析 data: 开头的事件。
Q: Python 调用 Claude API 需要什么版本?
A: anthropic SDK 需要 Python 3.8+,推荐 3.10 以上。安装命令 pip install anthropic,当前最新版本支持所有 Claude 4 系列模型。
Q: Claude API 有速率限制吗?
A: 有。免费层级每分钟 5 次请求,付费用户根据 tier 不同有不同限额,Tier 1 大约每分钟 50 次请求、每分钟 40000 输出 Token。被限速会返回 HTTP 429 错误,建议代码中加指数退避重试逻辑。
整理这篇的过程中我又把自己的代码片段库更新了一遍。Claude API 的调用本身不复杂,核心就是那几个参数——model、max_tokens、messages、system。真正影响体验的是网络稳定性和多模型切换的便利性,这也是我后来统一走聚合平台的原因。代码都是实测可跑的,直接复制改个 API Key 就能用。
本文由 ofox.ai 运营团队原创,转载请注明出处。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/268664.html