一、简介与适用场景
Anthropic 的 Claude 系列在长文本理解、代码改写与「按指令老老实实做事」这几个维度上口碑很好,是不少人写代码时的首选。和 OpenAI 一样,Claude 官方 API 没有免费额度,必须先充值。
Claude 有一个容易踩坑的地方:它的原生 API 与 OpenAI 协议不是同一套。鉴权头不一样、请求体结构不一样、system 提示词的位置也不一样。官方后来补了一个 OpenAI 兼容端点用于快速迁移,但它只覆盖基础对话能力,工具调用、思考模式这些高级特性仍需走原生接口。搞不清这两者的区别,是新手配置 Claude 失败的头号原因。
适合看这篇的情况:需要 Claude 的长文与代码能力、已有海外支付渠道、或想把现有 OpenAI 代码低成本切到 Claude 上试效果。
二、注册与获取 Key
- 打开 Anthropic Console 注册账号并完成手机验证。
- 进入 Plans & Billing 充值,账户余额为零时任何调用都会被拒。
- 进入 API Keys 页面点击创建,Key 以
sk-ant-开头。 - 同样只在创建时完整显示一次,当场复制保存。
建议为每个用途单独建 Key(本地客户端一个、线上服务一个),这样某个环境泄露时可以精准吊销,不必全部重来。
三、Base URL 与鉴权
Claude 提供两套端点,请按需求二选一:
原生端点(功能完整)
- Base URL:
https://api.anthropic.com - 对话路径:
/v1/messages - 鉴权头:
x-api-key: sk-ant-xxxx,注意不是Authorization: Bearer - 必须额外带版本头:
anthropic-version: 2023-06-01,漏了会直接报错
OpenAI 兼容端点(便于迁移)
- Base URL:
https://api.anthropic.com/v1 - 对话路径:
/chat/completions - 鉴权头:
Authorization: Bearer sk-ant-xxxx
再强调一次:原生端点用 x-api-key,兼容端点用 Bearer。把两者混用是 401 的最常见来源。另外原生接口里 max_tokens 是必填字段,OpenAI 那边它是可选的,迁移时最容易漏。
四、客户端接入示例
Cherry Studio 等主流客户端都内置了 Anthropic 供应商选项,直接选它就会自动使用原生协议:
- 打开「设置 → 模型服务 → Anthropic」。
- API 密钥填
sk-ant-开头的字符串。 - API 地址保持默认
https://api.anthropic.com,不要手动加/v1。 - 若客户端没有 Anthropic 选项,就新建一个 OpenAI 兼容供应商,地址填
https://api.anthropic.com/v1。
五、代码示例
curl(原生端点):
curl https://api.anthropic.com/v1/messages \
-H "content-type: application/json" \
-H "x-api-key: $ANTHROPIC_API_KEY" \
-H "anthropic-version: 2023-06-01" \
-d '{
"model": "claude-sonnet-4-20250514",
"max_tokens": 1024,
"messages": [{"role": "user", "content": "用一句话解释什么是 API"}]
}'
Python(官方 SDK):
import os
import anthropic
client = anthropic.Anthropic(api_key=os.environ["ANTHROPIC_API_KEY"])
resp = client.messages.create(
model="claude-sonnet-4-20250514",
max_tokens=1024,
system="你是一个简洁的技术助手。",
messages=[{"role": "user", "content": "用一句话解释什么是 API"}],
)
print(resp.content[0].text)
Node.js(走 OpenAI 兼容端点,便于与既有代码共存):
import OpenAI from 'openai';
const client = new OpenAI({
apiKey: process.env.ANTHROPIC_API_KEY,
baseURL: 'https://api.anthropic.com/v1',
});
const resp = await client.chat.completions.create({
model: 'claude-sonnet-4-20250514',
max_tokens: 1024,
messages: [{ role: 'user', content: '用一句话解释什么是 API' }],
});
console.log(resp.choices[0].message.content);
六、常见错误排查
| 错误码 | 现象 | 原因 | 解决方案 |
|---|---|---|---|
| 401 | authentication_error | 原生端点误用了 Authorization: Bearer | 原生接口改用 x-api-key 头 |
| 400 | 提示缺少 anthropic-version | 没带版本头 | 补上 anthropic-version: 2023-06-01 |
| 400 | max_tokens: field required | 从 OpenAI 迁移时漏填必填项 | 请求体显式加上 max_tokens |
| 400 | system 消息被拒 | 把 system 放进了 messages 数组 | 原生接口的 system 是顶层独立字段 |
| 404 | not_found_error | 模型名写成了不带日期的简称 | 使用完整模型 id,含日期后缀 |
| 429 | rate_limit_error | 超出账号档位的 RPM 或 TPM | 指数退避重试,或提升用量等级 |