环境说明

  • openai Python SDK ≥ 1.0 / openai npm ≥ 4.0
  • API 服务:claudeapi.com(OpenAI 兼容)
  • 接口地址:https://gw.claudeapi.com/v1

核心:只需改 base_urlapi_keymodel 三个字段,无需更换 SDK。


一、Python 迁移

1.1 初始化

# 迁移前
from openai import OpenAI
client = OpenAI(api_key="sk-openai-xxx")

# 迁移后
from openai import OpenAI
client = OpenAI(
    api_key="sk-claudeapi-xxx",              # 换 key
    base_url="https://gw.claudeapi.com/v1"   # 换接口地址
)

1.2 基础调用

response = client.chat.completions.create(
    model="claude-sonnet-4-6",   # 原来是 gpt-4o
    messages=[
        {"role": "system", "content": "你是一个Python专家"},
        {"role": "user", "content": "实现一个线程安全的单例模式"}
    ],
    max_tokens=2048,
    temperature=0.7
)

print(response.choices[0].message.content)

1.3 流式输出

stream = client.chat.completions.create(
    model="claude-sonnet-4-6",
    messages=[{"role": "user", "content": "解释 Python GIL"}],
    stream=True,
    max_tokens=1024
)

for chunk in stream:
    delta = chunk.choices[0].delta
    if delta.content:
        print(delta.content, end="", flush=True)

1.4 异步调用

import asyncio
from openai import AsyncOpenAI

async_client = AsyncOpenAI(
    api_key="sk-claudeapi-xxx",
    base_url="https://gw.claudeapi.com/v1"
)

async def main():
    response = await async_client.chat.completions.create(
        model="claude-sonnet-4-6",
        messages=[{"role": "user", "content": "写一个异步 HTTP 客户端"}],
        max_tokens=1024
    )
    print(response.choices[0].message.content)

asyncio.run(main())

二、Node.js 迁移

2.1 初始化

// 迁移前
import OpenAI from 'openai';
const client = new OpenAI({ apiKey: 'sk-openai-xxx' });

// 迁移后
import OpenAI from 'openai';
const client = new OpenAI({
  apiKey: 'sk-claudeapi-xxx',
  baseURL: 'https://gw.claudeapi.com/v1',
});

2.2 基础调用

const response = await client.chat.completions.create({
  model: 'claude-sonnet-4-6',
  messages: [
    { role: 'system', content: '你是一个 JavaScript 专家' },
    { role: 'user', content: '实现 Promise.all 的 polyfill' }
  ],
  max_tokens: 2048,
});

console.log(response.choices[0].message.content);

2.3 流式输出

const stream = await client.chat.completions.create({
  model: 'claude-sonnet-4-6',
  messages: [{ role: 'user', content: '解释事件循环机制' }],
  stream: true,
});

for await (const chunk of stream) {
  const content = chunk.choices[0]?.delta?.content ?? '';
  process.stdout.write(content);
}

三、Tool Use(函数调用)

OpenAI 的 tools 格式完全兼容,无需修改工具定义。

tools = [
    {
        "type": "function",
        "function": {
            "name": "execute_sql",
            "description": "执行 SQL 查询并返回结果",
            "parameters": {
                "type": "object",
                "properties": {
                    "query": {
                        "type": "string",
                        "description": "SQL 查询语句"
                    },
                    "database": {
                        "type": "string",
                        "description": "数据库名称",
                        "enum": ["production", "staging", "dev"]
                    }
                },
                "required": ["query", "database"]
            }
        }
    }
]

response = client.chat.completions.create(
    model="claude-sonnet-4-6",
    messages=[{"role": "user", "content": "查询 production 库中用户总数"}],
    tools=tools,
    tool_choice="auto"
)

# 解析工具调用
message = response.choices[0].message
if message.tool_calls:
    for tool_call in message.tool_calls:
        print(f"调用函数:{tool_call.function.name}")
        print(f"参数:{tool_call.function.arguments}")

四、curl 示例

# 基础调用
curl -s https://gw.claudeapi.com/v1/chat/completions \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -d '{
    "model": "claude-sonnet-4-6",
    "messages": [
      {"role": "user", "content": "用 Python 实现二分查找"}
    ],
    "max_tokens": 1024
  }' | python3 -m json.tool

# 流式调用
curl -s https://gw.claudeapi.com/v1/chat/completions \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -d '{
    "model": "claude-sonnet-4-6",
    "messages": [{"role": "user", "content": "解释 TCP 三次握手"}],
    "stream": true
  }'

五、不兼容参数详表

参数 OpenAI 支持 Claude 支持 迁移处理
n > 1 改为多次独立调用
logprobs 移除参数
top_logprobs 移除参数
presence_penalty 移除(Claude 默认行为类似)
frequency_penalty 移除
seed 移除(Claude 无确定性输出)
function_call(旧格式) ✅(旧) 更新为 tools + tool_choice
response_format: json_object 在 system prompt 中指定 JSON 输出格式
max_tokens 无需修改
temperature 无需修改
top_p 无需修改
stop 无需修改
stream 无需修改

六、模型名称对照

OpenAI 模型 推荐 Claude 模型 输入价格 输出价格
gpt-3.5-turbo claude-haiku-4-5-20251001 $0.8/MTok $4/MTok
gpt-4o claude-sonnet-4-6 $2.4/MTok $12/MTok
gpt-4-turbo claude-opus-4-8 $4/MTok $20/MTok

(价格来源:claudeapi.com 控制台,2026-06-25)


七、迁移检查清单

# 快速扫描不兼容参数(Python 项目)
grep -rn "presence_penalty\|frequency_penalty\|logprobs\|\"n\":\s*[2-9]\|function_call\|seed" ./src

逐项核查:

  • base_url 已改为 https://gw.claudeapi.com/v1
  • api_key 已换成 claudeapi.com 的 Key(sk- 开头)
  • model 已换为 Claude 模型名称(完整名,如 claude-haiku-4-5-20251001
  • n > 1
  • logprobs / top_logprobs
  • presence_penalty / frequency_penalty
  • seed
  • function_call 旧格式已更新为 tools 新格式(如有)
  • response_format: json_object 已改为 prompt 引导(如有)
  • streaming 测试通过(delta.content 非空)
  • tool use 测试通过(finish_reason 为 “tool_calls”)
  • 错误处理逻辑无须修改(HTTP 状态码体系一致)

八、常见错误

401 Unauthorized

{"error": {"message": "Invalid API key", "type": "authentication_error"}}

API Key 错误,检查 key 是否为 claudeapi.com 的 key(不是 OpenAI 的 key)。

404 Not Found

base_url 末尾少了 /v1,正确写法:https://gw.claudeapi.com/v1

400 Bad Request(model not found)

模型名称不完整,使用完整模型名如 claude-haiku-4-5-20251001

参数被静默忽略

presence_penaltyseed 等不兼容参数传入后不报错但会被忽略,建议主动清除避免混淆。

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐