GPT API 怎么接?国内开发者一篇文章看懂
国内开发者想用上 GPT-5、Claude Opus、Gemini 这类海外大模型 API,绕不开三件事:账号注册(要国际手机号或国际信用卡)、付费方式(要海外银行卡)、网络访问(直连不稳定)。这三道关让"在 IDE 里直接用上 GPT-5"看着简单实际很折腾。
这篇文章把整条接入路径走一遍——从环境准备、SDK 调用、流式输出、function calling,一直到怎么用同一份代码在 GPT / Claude / Gemini 之间切换。所有代码都来自我整理的 ai-api-integration 仓库,里面有 Python / Node.js / Go / curl 四种语言的完整示例,可以直接 clone 跑通。
准备工作
环境
- Python:3.9 或更高
- Node.js:18 或更高(用 ESM)
- OpenAI SDK:
openai>=1.30.0(旧版 0.x SDK 已经过时)
账号
需要一个 OpenAI 兼容协议的 endpoint 和对应的 API Key。常见选择:
- OpenAI 官方:
https://api.openai.com/v1——直连国内不稳,注册门槛较高 - Azure OpenAI:企业向,门槛较高
- 国内统一网关:用 OpenAI 协议代理多家厂商,把 GPT / Claude / Gemini / DeepSeek 等聚合到一个 endpoint
- 自部署网关(LiteLLM / One-API):自己运维,灵活但重
本文示例用 产灵 API 作为 endpoint(http://xdhdancer.top/v1),它属于第三种——OpenAI 协议兼容,国内直连,模型清单覆盖 GPT-5 / Claude / Gemini / Sora 等。换成你自己有 Key 的任意兼容 endpoint,本文代码都能跑。
一句话验证
把环境装好后,先用 curl 确认 endpoint 通:
curl http://xdhdancer.top/v1/chat/completions \
-H "Authorization: Bearer sk-xxx" \
-H "Content-Type: application/json" \
-d '{
"model": "gpt-5",
"messages": [{"role": "user", "content": "Hello"}]
}'
返回 JSON 里有 choices[0].message.content 就说明接通了。
完整步骤
步骤 1:Python SDK 接入
最常用的方式。先装 SDK:
pip install openai
最简单的 chat 调用:
from openai import OpenAI
client = OpenAI(
api_key="sk-xxx", # 你的 API Key
base_url="http://xdhdancer.top/v1", # 网关 endpoint
)
resp = client.chat.completions.create(
model="gpt-5", # 也可换成 claude-opus-4-7、gemini-3.1-pro 等
messages=[
{"role": "system", "content": "You are a concise assistant."},
{"role": "user", "content": "用一句话解释 RAG"},
],
temperature=0.3,
max_tokens=500,
)
print(resp.choices[0].message.content)
print(f"\n[tokens used: {resp.usage.total_tokens}]")
注意点:
base_url末尾的/v1不能漏,否则 SDK 拼路径会拼成https://xxx.com/chat/completions,404api_key直接写代码里只是演示,实际项目用环境变量os.environ["API_KEY"]model字段决定调用哪家厂商的模型——这就是统一网关的核心价值
步骤 2:Node.js SDK 接入
掘金的前端 / 全栈读者更多用 Node。装 SDK:
npm install openai
ESM 写法(package.json 加 "type": "module"):
import OpenAI from "openai";
const client = new OpenAI({
apiKey: process.env.API_KEY,
baseURL: "http://xdhdancer.top/v1",
});
const resp = await client.chat.completions.create({
model: "claude-opus-4-7",
messages: [{ role: "user", content: "Hello" }],
});
console.log(resp.choices[0].message.content);
注意 Node SDK 用的是 baseURL(驼峰),Python 用的是 base_url(下划线)——同一个 API 字段不同 SDK 写法不同,这是踩过坑的地方。
步骤 3:流式输出
用户体验关键功能——边生成边显示,不用等完整响应:
# Python 流式
stream = client.chat.completions.create(
model="gpt-5",
messages=[{"role": "user", "content": "用 100 字介绍 Python 协程"}],
stream=True, # 关键:开 stream
)
for chunk in stream:
delta = chunk.choices[0].delta
if delta.content:
print(delta.content, end="", flush=True)
print()
// Node 流式
const stream = await client.chat.completions.create({
model: "gpt-5",
messages: [{ role: "user", content: "Write a haiku" }],
stream: true,
});
for await (const chunk of stream) {
process.stdout.write(chunk.choices[0]?.delta?.content || "");
}
完整示例(含错误处理 / 多语言版本)见仓库:
- Python:
examples/python/stream.py - Node.js:
examples/node/stream.js
步骤 4:在不同模型间切换
统一 OpenAI 协议的核心价值——同一份代码访问 12+ 主流模型,只改 model 字符串:
| 模型 ID | 厂商 | 上下文 | 适用 |
|---|---|---|---|
gpt-5 | OpenAI | 128k | 通用推理、代码 |
gpt-5-mini | OpenAI | 128k | 速度快、便宜 |
claude-opus-4-7 | Anthropic | 200k | 长上下文编程 |
claude-sonnet-4-6 | Anthropic | 200k | 平衡 |
gemini-3.1-pro | 2M | 超长文档 | |
deepseek-v3.2 | DeepSeek | 128k | 中文强、价格低 |
kimi-k2 | Moonshot | 200k | 中文长文档 |
# 同一个 client、同一个 messages,只换 model
for model in ["gpt-5", "claude-opus-4-7", "gemini-3.1-pro"]:
resp = client.chat.completions.create(
model=model,
messages=[{"role": "user", "content": "写一个快速排序"}],
)
print(f"\n=== {model} ===")
print(resp.choices[0].message.content[:200])
这种调用模式有个直接好处:可以做模型路由——简单问题走 gpt-5-mini 省钱,复杂任务走 claude-opus-4-7 提质量,长文档走 gemini-3.1-pro 省事。
步骤 5:function calling
让模型调用外部工具,是构建 Agent 的基础。完整示例:
import json
from openai import OpenAI
client = OpenAI(api_key="sk-xxx", base_url="http://xdhdancer.top/v1")
tools = [{
"type": "function",
"function": {
"name": "get_weather",
"description": "Get current weather for a city",
"parameters": {
"type": "object",
"properties": {"city": {"type": "string"}},
"required": ["city"],
},
},
}]
# 第一轮:模型决定要不要调工具
resp = client.chat.completions.create(
model="claude-opus-4-7",
messages=[{"role": "user", "content": "北京天气怎么样?"}],
tools=tools,
)
msg = resp.choices[0].message
if msg.tool_calls:
tool_call = msg.tool_calls[0]
args = json.loads(tool_call.function.arguments)
# 模拟工具执行
tool_result = {"city": args["city"], "temp": 22, "condition": "sunny"}
# 第二轮:把工具结果丢回去
resp2 = client.chat.completions.create(
model="claude-opus-4-7",
messages=[
{"role": "user", "content": "北京天气怎么样?"},
msg,
{"role": "tool", "tool_call_id": tool_call.id, "content": json.dumps(tool_result)},
],
)
print(resp2.choices[0].message.content)
完整代码:examples/python/function_calling.py。
踩坑记录
整理 3 个最容易踩的坑:
坑 1:base_url 末尾少了 /v1
报错:Connection error / 404 Not Found
原因:OpenAI SDK 内部会拼路径,base_url 末尾必须带 /v1
错误:base_url="http://xdhdancer.top" 正确:base_url="http://xdhdancer.top/v1"
坑 2:旧版 SDK(0.x)写法报错
# ❌ 旧版 0.x(已过时)
import openai
openai.api_key = "sk-xxx"
openai.api_base = "http://xdhdancer.top/v1"
openai.ChatCompletion.create(...)
# ✅ 新版 1.x(必须用这个)
from openai import OpenAI
client = OpenAI(api_key="sk-xxx", base_url="http://xdhdancer.top/v1")
client.chat.completions.create(...)
升级命令:pip install --upgrade openai
坑 3:把 Anthropic SDK 当 OpenAI SDK 用
调 Claude 用 OpenAI SDK 是可以的(前提是网关支持 Claude 模型),不需要装 anthropic 库。OpenAI 协议兼容是统一网关的核心卖点之一——少一个依赖、少一份适配代码。
总结
完整的 GPT API 接入路径其实就是:装 SDK → 配置 base_url + api_key → 调 chat.completions.create。统一网关让你不用为每家厂商单独写适配,所有 OpenAI 协议的功能(流式、function calling、vision)都直接复用。
文章里所有代码已经在这个仓库整理好,clone 下来改一下 API Key 就能跑:
仓库内容:
examples/python/:chat / streaming / image / function-calling / vision 完整示例examples/node/:Node.js 三个核心场景示例examples/curl/:4 个常用 endpoint 的 raw HTTPsrc/:Python / Node / Go 三语言完整 demo(命令行多模型对话工具)docs/tools/:Cursor / Cline / Claude Code / ChatBox / Dify 等 10 款工具的接入教程docs/modalities/:文本 / 代码 / 图片 / 视频 / 音频 / 视觉 / Embeddings 7 个模态的调用方法
觉得有用点个 ⭐,方便下次找到。本文示例 endpoint 是 产灵 API——OpenAI 协议兼容、国内直连,新人有免费体验额度可以先试再决定。
有问题欢迎评论区交流。
本文部分内容由 AI 协助整理,所有代码均来自开源仓库 ai-api-integration 已实测通过。