已有 OpenAI API 代码的项目迁移到 Claude API,核心修改只有 3 处:base_url、api_key、model。claudeapi.com 提供完整的 OpenAI 兼容接口,无需更换 SDK,现有 OpenAI 代码可直接迁移,大多数场景改动不超过 5 分钟。
一、迁移的 3 行核心改动
| 字段 | 迁移前(OpenAI) | 迁移后(Claude API) |
|---|---|---|
base_url / apiBase |
https://api.openai.com/v1 |
https://gw.claudeapi.com/v1 |
api_key |
sk-openai-... |
sk-claudeapi-... |
model |
gpt-4o、gpt-4-turbo 等 |
claude-sonnet-4-6、claude-opus-4-8 等 |
其余代码——消息格式、max_tokens、temperature、stream、system role——全部兼容,无需修改。
二、模型映射参考
| OpenAI 模型 | 推荐对应 Claude 模型 | 说明 |
|---|---|---|
| gpt-4o | claude-sonnet-4-6 |
综合能力对标,成本相近 |
| gpt-4-turbo | claude-opus-4-8 |
复杂推理、长文本 |
| gpt-3.5-turbo | claude-haiku-4-5-20251001 |
轻量快速,成本最低 |
claudeapi.com 价格(输入/输出 per MTok):Haiku $0.8/$4,Sonnet $2.4/$12,Opus $4/$20。模型名与价格以控制台实际显示为准。
三、运行环境与执行方式
你的电脑 / 服务器(运行 .py 或 .mjs 脚本)
│ 发出 HTTPS 请求
▼
gw.claudeapi.com(独立第三方中转接口)
│ 转发
▼
Claude 模型(返回结果)
│
▼
打印在你的终端
你的电脑 / 服务器(运行 .py 或 .mjs 脚本)
│ 发出 HTTPS 请求
▼
gw.claudeapi.com(独立第三方中转接口)
│ 转发
▼
Claude 模型(返回结果)
│
▼
打印在你的终端
3.1 打开终端
| 系统 | 方法 |
|---|---|
| Windows | 开始菜单搜 cmd 或 PowerShell;VS Code 里按 Ctrl+` |
| macOS | Cmd+Space 搜索 Terminal |
| Linux | Ctrl+Alt+T |
3.2 安装依赖
Python 项目:
# 先确认 Python 版本(3.8 以上即可)
python --version
# 安装 openai 包(无需更换,Claude 兼容同一个包)
pip install openai
# 先确认 Python 版本(3.8 以上即可)
python --version
# 安装 openai 包(无需更换,Claude 兼容同一个包)
pip install openai

Node.js 项目:
# 确认 Node 版本(建议 18 以上)
node -v
# 安装
npm install openai
# 确认 Node 版本(建议 18 以上)
node -v
# 安装
npm install openai
1
3.3 配置 API Key
不要把 Key 写死在代码里——一旦提交到 Git 仓库就可能泄露。推荐两种方式:
方式 A:临时环境变量(调试用,关闭终端后失效)
# macOS / Linux
export CLAUDE_API_KEY="你的key"
# Windows PowerShell
$env:CLAUDE_API_KEY="你的key"
# Windows cmd
set CLAUDE_API_KEY=你的key
# macOS / Linux
export CLAUDE_API_KEY="你的key"
# Windows PowerShell
$env:CLAUDE_API_KEY="你的key"
# Windows cmd
set CLAUDE_API_KEY=你的key
⚠️ 必须在运行脚本的同一个终端窗口里执行,新开窗口需重新设置。
方式 B:.env 文件(推荐,长期有效)
在项目根目录新建 .env 文件:
CLAUDE_API_KEY=你的key
CLAUDE_API_KEY=你的key
Python 代码里用 python-dotenv 自动加载:
pip install python-dotenv
pip install python-dotenv
from dotenv import load_dotenv
import os
load_dotenv() # 自动读取 .env 文件
key = os.environ["CLAUDE_API_KEY"]
from dotenv import load_dotenv
import os
load_dotenv() # 自动读取 .env 文件
key = os.environ["CLAUDE_API_KEY"]
记得把
.env加入.gitignore,避免误提交。
四、完整代码迁移示例
4.1 Python(openai SDK)
迁移前:
from openai import OpenAI
client = OpenAI(api_key="sk-openai-xxx")
response = client.chat.completions.create(
model="gpt-4o",
messages=[
{"role": "system", "content": "你是一个代码助手"},
{"role": "user", "content": "写一个快速排序"}
],
max_tokens=1024,
temperature=0.7
)
print(response.choices[0].message.content)
from openai import OpenAI
client = OpenAI(api_key="sk-openai-xxx")
response = client.chat.completions.create(
model="gpt-4o",
messages=[
{"role": "system", "content": "你是一个代码助手"},
{"role": "user", "content": "写一个快速排序"}
],
max_tokens=1024,
temperature=0.7
)
print(response.choices[0].message.content)
迁移后(只改 3 处,其余不动):
import os
from openai import OpenAI
client = OpenAI(
api_key=os.environ["CLAUDE_API_KEY"], # ← 改 1:从环境变量读取 Key
base_url="https://gw.claudeapi.com/v1" # ← 改 2:指向 Claude 中转接口
)
response = client.chat.completions.create(
model="claude-sonnet-4-6", # ← 改 3:替换为 Claude 模型名
messages=[
{"role": "system", "content": "你是一个代码助手"},
{"role": "user", "content": "写一个快速排序"}
],
max_tokens=1024, # ✅ 不用改
temperature=0.7 # ✅ 不用改
)
print(response.choices[0].message.content)
import os
from openai import OpenAI
client = OpenAI(
api_key=os.environ["CLAUDE_API_KEY"], # ← 改 1:从环境变量读取 Key
base_url="https://gw.claudeapi.com/v1" # ← 改 2:指向 Claude 中转接口
)
response = client.chat.completions.create(
model="claude-sonnet-4-6", # ← 改 3:替换为 Claude 模型名
messages=[
{"role": "system", "content": "你是一个代码助手"},
{"role": "user", "content": "写一个快速排序"}
],
max_tokens=1024, # ✅ 不用改
temperature=0.7 # ✅ 不用改
)
print(response.choices[0].message.content)
保存为 demo.py,在文件所在目录执行:
python demo.py
python demo.py
跑通后,终端会直接打印出快速排序代码。若报错,见 §八 排错对照表。
4.2 Node.js(openai npm 包)
迁移前:
import OpenAI from 'openai';
const openai = new OpenAI({ apiKey: 'sk-openai-xxx' });
const response = await openai.chat.completions.create({
model: 'gpt-4o',
messages: [{ role: 'user', content: '写一个快速排序' }],
});
console.log(response.choices[0].message.content);
import OpenAI from 'openai';
const openai = new OpenAI({ apiKey: 'sk-openai-xxx' });
const response = await openai.chat.completions.create({
model: 'gpt-4o',
messages: [{ role: 'user', content: '写一个快速排序' }],
});
console.log(response.choices[0].message.content);
迁移后(同样只改 3 处):
import OpenAI from 'openai';
const openai = new OpenAI({
apiKey: process.env.CLAUDE_API_KEY, // ← 改 1:从环境变量读取
baseURL: 'https://gw.claudeapi.com/v1', // ← 改 2:指向中转接口
});
const response = await openai.chat.completions.create({
model: 'claude-sonnet-4-6', // ← 改 3:替换模型名
messages: [{ role: 'user', content: '写一个快速排序' }],
});
console.log(response.choices[0].message.content);
import OpenAI from 'openai';
const openai = new OpenAI({
apiKey: process.env.CLAUDE_API_KEY, // ← 改 1:从环境变量读取
baseURL: 'https://gw.claudeapi.com/v1', // ← 改 2:指向中转接口
});
const response = await openai.chat.completions.create({
model: 'claude-sonnet-4-6', // ← 改 3:替换模型名
messages: [{ role: 'user', content: '写一个快速排序' }],
});
console.log(response.choices[0].message.content);
保存为 demo.mjs,执行:
node demo.mjs
node demo.mjs
4.3 curl(最快验证方式)
不想写代码?用 curl 一行命令直接验证接口是否通畅:
macOS / Linux:
curl -s https://gw.claudeapi.com/v1/chat/completions \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $CLAUDE_API_KEY" \
-d '{
"model": "claude-sonnet-4-6",
"messages": [{"role": "user", "content": "你好,返回 OK 即可"}],
"max_tokens": 16
}'
curl -s https://gw.claudeapi.com/v1/chat/completions \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $CLAUDE_API_KEY" \
-d '{
"model": "claude-sonnet-4-6",
"messages": [{"role": "user", "content": "你好,返回 OK 即可"}],
"max_tokens": 16
}'
Windows PowerShell:
$body = '{"model":"claude-sonnet-4-6","messages":[{"role":"user","content":"你好,返回 OK 即可"}],"max_tokens":16}'
Invoke-RestMethod -Uri "https://gw.claudeapi.com/v1/chat/completions" `
-Method POST `
-Headers @{"Authorization"="Bearer $env:CLAUDE_API_KEY"; "Content-Type"="application/json"} `
-Body $body
$body = '{"model":"claude-sonnet-4-6","messages":[{"role":"user","content":"你好,返回 OK 即可"}],"max_tokens":16}'
Invoke-RestMethod -Uri "https://gw.claudeapi.com/v1/chat/completions" `
-Method POST `
-Headers @{"Authorization"="Bearer $env:CLAUDE_API_KEY"; "Content-Type"="application/json"} `
-Body $body
返回 JSON 且 choices[0].message.content 有内容,说明接口、Key、模型均配置正确。
4.4 流式输出(Streaming)
流式输出的写法与 OpenAI 完全相同,只需加 stream=True:
Python:
import os
from openai import OpenAI
client = OpenAI(
api_key=os.environ["CLAUDE_API_KEY"],
base_url="https://gw.claudeapi.com/v1"
)
stream = client.chat.completions.create(
model="claude-sonnet-4-6",
messages=[{"role": "user", "content": "详细解释快速排序的原理"}],
stream=True,
max_tokens=1024
)
# 逐块打印,实现打字机效果
for chunk in stream:
delta = chunk.choices[0].delta.content
if delta:
print(delta, end="", flush=True)
print() # 最后换行
import os
from openai import OpenAI
client = OpenAI(
api_key=os.environ["CLAUDE_API_KEY"],
base_url="https://gw.claudeapi.com/v1"
)
stream = client.chat.completions.create(
model="claude-sonnet-4-6",
messages=[{"role": "user", "content": "详细解释快速排序的原理"}],
stream=True,
max_tokens=1024
)
# 逐块打印,实现打字机效果
for chunk in stream:
delta = chunk.choices[0].delta.content
if delta:
print(delta, end="", flush=True)
print() # 最后换行
Node.js:
import OpenAI from 'openai';
const openai = new OpenAI({
apiKey: process.env.CLAUDE_API_KEY,
baseURL: 'https://gw.claudeapi.com/v1',
});
const stream = await openai.chat.completions.create({
model: 'claude-sonnet-4-6',
messages: [{ role: 'user', content: '详细解释快速排序的原理' }],
stream: true,
max_tokens: 1024,
});
for await (const chunk of stream) {
const delta = chunk.choices[0]?.delta?.content;
if (delta) process.stdout.write(delta);
}
console.log();
import OpenAI from 'openai';
const openai = new OpenAI({
apiKey: process.env.CLAUDE_API_KEY,
baseURL: 'https://gw.claudeapi.com/v1',
});
const stream = await openai.chat.completions.create({
model: 'claude-sonnet-4-6',
messages: [{ role: 'user', content: '详细解释快速排序的原理' }],
stream: true,
max_tokens: 1024,
});
for await (const chunk of stream) {
const delta = chunk.choices[0]?.delta?.content;
if (delta) process.stdout.write(delta);
}
console.log();
4.5 Tool Use(函数调用)
工具定义格式与 OpenAI 完全兼容。完整流程分三步:定义工具 → 模型决定调用 → 回传结果。
Python 完整示例:
import os, json
from openai import OpenAI
client = OpenAI(
api_key=os.environ["CLAUDE_API_KEY"],
base_url="https://gw.claudeapi.com/v1"
)
# 第 1 步:定义工具(格式与 OpenAI 完全相同)
tools = [
{
"type": "function",
"function": {
"name": "get_weather",
"description": "获取指定城市的实时天气",
"parameters": {
"type": "object",
"properties": {
"city": {"type": "string", "description": "城市名称,如"北京""}
},
"required": ["city"]
}
}
}
]
messages = [{"role": "user", "content": "北京今天天气怎么样?"}]
# 第 2 步:第一次请求,模型返回 tool_calls
response = client.chat.completions.create(
model="claude-sonnet-4-6",
messages=messages,
tools=tools,
tool_choice="auto"
)
tool_call = response.choices[0].message.tool_calls[0]
args = json.loads(tool_call.function.arguments)
print(f"模型要调用:{tool_call.function.name},参数:{args}")
# 输出示例:模型要调用:get_weather,参数:{'city': '北京'}
# 第 3 步:执行本地函数,把结果回传给模型
def get_weather(city: str) -> str:
# 这里替换为真实的天气 API 调用
return f"{city}今天晴,气温 28°C,北风 3 级"
weather_result = get_weather(args["city"])
messages.append(response.choices[0].message) # 把模型的 tool_calls 消息加入历史
messages.append({
"role": "tool",
"tool_call_id": tool_call.id,
"content": weather_result
})
# 第 4 步:第二次请求,模型根据工具返回结果生成最终回答
final_response = client.chat.completions.create(
model="claude-sonnet-4-6",
messages=messages,
tools=tools
)
print(final_response.choices[0].message.content)
# 输出示例:北京今天天气晴朗,气温 28°C,刮北风 3 级,适合出行。
import os, json
from openai import OpenAI
client = OpenAI(
api_key=os.environ["CLAUDE_API_KEY"],
base_url="https://gw.claudeapi.com/v1"
)
# 第 1 步:定义工具(格式与 OpenAI 完全相同)
tools = [
{
"type": "function",
"function": {
"name": "get_weather",
"description": "获取指定城市的实时天气",
"parameters": {
"type": "object",
"properties": {
"city": {"type": "string", "description": "城市名称,如"北京""}
},
"required": ["city"]
}
}
}
]
messages = [{"role": "user", "content": "北京今天天气怎么样?"}]
# 第 2 步:第一次请求,模型返回 tool_calls
response = client.chat.completions.create(
model="claude-sonnet-4-6",
messages=messages,
tools=tools,
tool_choice="auto"
)
tool_call = response.choices[0].message.tool_calls[0]
args = json.loads(tool_call.function.arguments)
print(f"模型要调用:{tool_call.function.name},参数:{args}")
# 输出示例:模型要调用:get_weather,参数:{'city': '北京'}
# 第 3 步:执行本地函数,把结果回传给模型
def get_weather(city: str) -> str:
# 这里替换为真实的天气 API 调用
return f"{city}今天晴,气温 28°C,北风 3 级"
weather_result = get_weather(args["city"])
messages.append(response.choices[0].message) # 把模型的 tool_calls 消息加入历史
messages.append({
"role": "tool",
"tool_call_id": tool_call.id,
"content": weather_result
})
# 第 4 步:第二次请求,模型根据工具返回结果生成最终回答
final_response = client.chat.completions.create(
model="claude-sonnet-4-6",
messages=messages,
tools=tools
)
print(final_response.choices[0].message.content)
# 输出示例:北京今天天气晴朗,气温 28°C,刮北风 3 级,适合出行。
Node.js 完整示例:
import OpenAI from 'openai';
const openai = new OpenAI({
apiKey: process.env.CLAUDE_API_KEY,
baseURL: 'https://gw.claudeapi.com/v1',
});
const tools = [
{
type: 'function',
function: {
name: 'get_weather',
description: '获取指定城市的实时天气',
parameters: {
type: 'object',
properties: {
city: { type: 'string', description: '城市名称' },
},
required: ['city'],
},
},
},
];
const messages = [{ role: 'user', content: '北京今天天气怎么样?' }];
// 第一次请求
const response = await openai.chat.completions.create({
model: 'claude-sonnet-4-6',
messages,
tools,
tool_choice: 'auto',
});
const toolCall = response.choices[0].message.tool_calls[0];
const args = JSON.parse(toolCall.function.arguments);
// 模拟本地函数执行
const weatherResult = `${args.city}今天晴,气温 28°C,北风 3 级`;
messages.push(response.choices[0].message);
messages.push({
role: 'tool',
tool_call_id: toolCall.id,
content: weatherResult,
});
// 第二次请求,获取最终回答
const finalResponse = await openai.chat.completions.create({
model: 'claude-sonnet-4-6',
messages,
tools,
});
console.log(finalResponse.choices[0].message.content);
import OpenAI from 'openai';
const openai = new OpenAI({
apiKey: process.env.CLAUDE_API_KEY,
baseURL: 'https://gw.claudeapi.com/v1',
});
const tools = [
{
type: 'function',
function: {
name: 'get_weather',
description: '获取指定城市的实时天气',
parameters: {
type: 'object',
properties: {
city: { type: 'string', description: '城市名称' },
},
required: ['city'],
},
},
},
];
const messages = [{ role: 'user', content: '北京今天天气怎么样?' }];
// 第一次请求
const response = await openai.chat.completions.create({
model: 'claude-sonnet-4-6',
messages,
tools,
tool_choice: 'auto',
});
const toolCall = response.choices[0].message.tool_calls[0];
const args = JSON.parse(toolCall.function.arguments);
// 模拟本地函数执行
const weatherResult = `${args.city}今天晴,气温 28°C,北风 3 级`;
messages.push(response.choices[0].message);
messages.push({
role: 'tool',
tool_call_id: toolCall.id,
content: weatherResult,
});
// 第二次请求,获取最终回答
const finalResponse = await openai.chat.completions.create({
model: 'claude-sonnet-4-6',
messages,
tools,
});
console.log(finalResponse.choices[0].message.content);
五、不兼容参数处理
迁移时需移除或替换以下参数(传入后会被忽略或返回 400):
| 参数 | 原因 | 处理方式 |
|---|---|---|
n > 1 |
Claude 不支持单次多候选 | 改为多次独立调用 |
logprobs |
不支持 logprob 输出 | 直接移除 |
presence_penalty |
不支持 | 直接移除 |
frequency_penalty |
不支持 | 直接移除 |
seed |
不支持确定性输出 | 直接移除 |
function_call(旧格式) |
已废弃 | 改用 tools + tool_choice,参照 §4.5 |
response_format: json_object |
不支持此格式控制参数 | 在 system prompt 中指定,见下方示例 |
response_format 替代方案:
# 迁移前(OpenAI 写法)
response = client.chat.completions.create(
model="gpt-4o",
messages=[{"role": "user", "content": "返回用户信息"}],
response_format={"type": "json_object"} # ← Claude 不支持此参数
)
# 迁移后(用 system prompt 引导 JSON 输出)
response = client.chat.completions.create(
model="claude-sonnet-4-6",
messages=[
{
"role": "system",
"content": "你必须以合法的 JSON 格式回复,不要包含任何额外文字。"
'示例格式:{"name": "张三", "age": 25}'
},
{"role": "user", "content": "返回用户信息"}
]
)
# 迁移前(OpenAI 写法)
response = client.chat.completions.create(
model="gpt-4o",
messages=[{"role": "user", "content": "返回用户信息"}],
response_format={"type": "json_object"} # ← Claude 不支持此参数
)
# 迁移后(用 system prompt 引导 JSON 输出)
response = client.chat.completions.create(
model="claude-sonnet-4-6",
messages=[
{
"role": "system",
"content": "你必须以合法的 JSON 格式回复,不要包含任何额外文字。"
'示例格式:{"name": "张三", "age": 25}'
},
{"role": "user", "content": "返回用户信息"}
]
)
六、迁移检查清单
完成迁移后,逐项核对:
- [ ]
base_url已改为https://gw.claudeapi.com/v1 - [ ]
api_key已换成 claudeapi.com 的 Key,通过环境变量读取(未硬编码进源码) - [ ]
model字段已换成 Claude 模型名称 - [ ] 已移除
n > 1、logprobs、presence_penalty、frequency_penalty、seed - [ ] 如使用
function_call旧格式,已更新为tools+tool_choice - [ ] 如使用
response_format: json_object,已改为 system prompt 引导 - [ ] streaming 响应正常(
delta.content有内容) - [ ] tool use 流程正常(
finish_reason为"tool_calls",回传结果后能得到最终回答) - [ ] 错误处理逻辑无需改动(HTTP 状态码体系与 OpenAI 相同)
- [ ] openai SDK 无需升级或替换
七、验证迁移是否成功
迁移后先跑一条最小请求,确认链路通畅再部署:
macOS / Linux:
curl -s https://gw.claudeapi.com/v1/chat/completions \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $CLAUDE_API_KEY" \
-d '{"model":"claude-sonnet-4-6","messages":[{"role":"user","content":"ping"}],"max_tokens":8}'
curl -s https://gw.claudeapi.com/v1/chat/completions \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $CLAUDE_API_KEY" \
-d '{"model":"claude-sonnet-4-6","messages":[{"role":"user","content":"ping"}],"max_tokens":8}'
Windows PowerShell:
Invoke-RestMethod `
-Uri "https://gw.claudeapi.com/v1/chat/completions" `
-Method POST `
-Headers @{"Authorization"="Bearer $env:CLAUDE_API_KEY";"Content-Type"="application/json"} `
-Body '{"model":"claude-sonnet-4-6","messages":[{"role":"user","content":"ping"}],"max_tokens":8}'
Invoke-RestMethod `
-Uri "https://gw.claudeapi.com/v1/chat/completions" `
-Method POST `
-Headers @{"Authorization"="Bearer $env:CLAUDE_API_KEY";"Content-Type"="application/json"} `
-Body '{"model":"claude-sonnet-4-6","messages":[{"role":"user","content":"ping"}],"max_tokens":8}'
返回的 JSON 中,choices[0].message.content 有内容即代表接口、Key、模型三者均配置正确。
八、常见报错对照表
| 报错信息 | 常见原因 | 解决方法 |
|---|---|---|
ModuleNotFoundError: No module named 'openai' |
SDK 未安装 | 执行 pip install openai |
KeyError: 'CLAUDE_API_KEY' |
环境变量未设,或开了新终端窗口 | 重新执行 §3.3 的设置命令 |
401 Unauthorized |
Key 填错,或用了 OpenAI 的 Key | 在 claudeapi.com 控制台重新复制 Key |
404 Not Found |
base_url 末尾缺少 /v1 |
改为 https://gw.claudeapi.com/v1 |
400 Bad Request: model not found |
模型名拼写错误或版本不存在 | 从控制台复制完整模型名 |
Connection refused / Timeout |
网络问题或地址写错 | 核对 base_url,检查本地网络 |
| 参数被静默忽略,输出异常 | 传入了 Claude 不支持的参数 | 参照 §五 移除不兼容参数 |
AttributeError: 'NoneType' ... tool_calls |
模型未触发工具调用 | 检查 prompt 是否清楚表达调用意图,或改 tool_choice="required" |
九、常见问题(FAQ)
Q:从 OpenAI API 迁移到 Claude API 需要更换 SDK 吗?
不需要。openai 这个包(Python 或 Node.js)可以继续使用,只需在初始化时额外传入 base_url(Python)或 baseURL(Node.js)指向 claudeapi.com 的接口地址即可。SDK 本身不感知底层模型,迁移不涉及任何包升级或替换。
Q:OpenAI 的 system role 在 Claude 里还能用吗?
可以直接用,格式完全相同。{"role": "system", "content": "..."} 放在 messages 数组第一位,Claude 会正确识别为系统提示词,无需任何改动。
Q:迁移后流式输出(streaming)还兼容吗?
完全兼容。stream=True(Python)/ stream: true(Node.js)的写法、逐块读取 chunk.choices[0].delta.content 的方式与 OpenAI 完全一致,不需要修改任何 streaming 相关代码。
Q:function_call 格式能直接用吗,还是要改成 tools?
function_call 是 OpenAI 已废弃的旧格式,Claude API 不支持。需要改为 tools + tool_choice 的新格式。工具定义的 JSON Schema 结构、tool_calls 的响应结构、回传 role: tool 的方式与 OpenAI 新格式完全一致,参照 §4.5 的示例修改即可。
Q:response_format: json_object 在 Claude API 里怎么替代?
Claude API 不支持 response_format 参数。替代方案是在 system prompt 中明确要求 JSON 输出格式,例如:"你必须以合法的 JSON 格式回复,不要包含任何额外文字",并可附上示例结构。详见 §五 的代码示例。
Q:gpt-4o 对应哪个 Claude 模型?
综合能力对标推荐 claude-sonnet-4-6,适合日常问答、写作、代码生成等任务,价格也相近。需要更强推理能力或处理超长文档时,可以选 claude-opus-4-8。具体模型名称以 claudeapi.com 控制台显示为准。
Q:迁移后报 401 Unauthorized 怎么排查?
按以下顺序检查:① Key 是否完整复制(有时会漏掉末尾字符);② 是否误用了 OpenAI 的 Key 而不是 claudeapi.com 的 Key;③ 环境变量是否在当前终端窗口中生效(新开窗口需重新设置)。Key 在控制台的「API 密钥」页面可随时重新复制或重新生成。
Q:可以在现有项目里同时保留 OpenAI 和 Claude 两套接入吗?
可以。只需初始化两个客户端实例,分别传入不同的 base_url 和 api_key,在代码里按需调用即可:
import os
from openai import OpenAI
# OpenAI 客户端
openai_client = OpenAI(api_key=os.environ["OPENAI_API_KEY"])
# Claude 客户端(通过 claudeapi.com 中转)
claude_client = OpenAI(
api_key=os.environ["CLAUDE_API_KEY"],
base_url="https://gw.claudeapi.com/v1"
)
import os
from openai import OpenAI
# OpenAI 客户端
openai_client = OpenAI(api_key=os.environ["OPENAI_API_KEY"])
# Claude 客户端(通过 claudeapi.com 中转)
claude_client = OpenAI(
api_key=os.environ["CLAUDE_API_KEY"],
base_url="https://gw.claudeapi.com/v1"
)
两套客户端互不影响,便于 A/B 测试或按任务类型分流。
十、更多资源
- Claude API 价格与模型选择指南 — 成本控制与模型分层策略
- Continue VS Code 配置 Claude API 教程 — 编辑器集成
- Claude API 成本估算与预算管理 — Token 用量优化
如已准备好迁移,前往 claudeapi.com 注册并获取 API Key,按以上步骤替换 3 个参数即可开始调用 Claude API。



