从 OpenAI 直连迁移
用 OpenAI SDK 切到 GPUShare —— 你只需改 2 行代码
从 OpenAI 直连迁移
已经在用 OpenAI SDK?切到 GPUShare 只需改 2 行代码,然后立刻可以调 30+ 个模型 (不只是 GPT)。
改动点 (Python)
from openai import OpenAI
# 原 OpenAI 直连
client = OpenAI(
- api_key="sk-...",
+ api_key="sk-gpushare-xxx",
+ base_url="https://api.dflop.top/v1",
)
就这两处。client.chat.completions.create(...) 之后的代码一行都不动。
改动点 (TypeScript)
import OpenAI from "openai";
const client = new OpenAI({
- apiKey: process.env.OPENAI_API_KEY,
+ apiKey: process.env.GPUSHARE_API_KEY,
+ baseURL: "https://api.dflop.top/v1",
});
改动点 (curl)
- curl https://api.openai.com/v1/chat/completions \
+ curl https://api.dflop.top/v1/chat/completions \
- -H "Authorization: Bearer sk-..." \
+ -H "Authorization: Bearer sk-gpushare-xxx" \
-H "Content-Type: application/json" \
-d '{"model":"gpt-5.4","messages":[{"role":"user","content":"Hello"}]}'
拿到的新能力
切完 base URL,你的代码立刻能调用不只是 GPT:
# 同一个 client, 同一份代码, 不同 model
client.chat.completions.create(model="gpt-5.4", ...) # 还能调
client.chat.completions.create(model="claude-sonnet-4-5-20250929", ...) # 新增!
client.chat.completions.create(model="gemini-2.5-pro", ...) # 新增!
client.chat.completions.create(model="glm-5.1", ...) # 新增!
client.chat.completions.create(model="grok-4-fast-reasoning", ...) # 新增!
模型 ID 完整列表见 模型列表。
价格透明
GPUShare 在原厂模型价基础上透明加价(详见 pricing 公开页面)。例如:
| Model | OpenAI 直连 ($/1M in/out) | GPUShare ($/1M in/out) |
|---|---|---|
| gpt-5.4 | $2.50 / $15.00 | $2.50 / $15.00 |
| gpt-5.5 | $5.00 / $30.00 | $5.00 / $30.00 |
每次调用账单完整记在 model.dflop.top/keys → Usage,跟原厂账单一致。
改完之后必看
1. tools 行为略有不同
function工具完全兼容,行为跟 OpenAI 直连一致web_search工具支持 GPT-5.x / 部分模型,必须配合stream=trueimage_generation工具同上,必须stream=true- 详见 工具调用
2. 流式响应跟原 OpenAI 一致
stream=true + 同样的 SSE 协议。客户端解析代码不用改。详见 流式响应。
3. 错误格式一致
GPUShare 在 /v1/chat/completions 端点返回的错误保持 OpenAI 协议格式:
{"error": {"message": "...", "type": "...", "code": "..."}}
4. 你不能用的 OpenAI 专属 endpoint
GPUShare 不代理这些 OpenAI 私有 endpoint:
| 端点 | 状态 |
|---|---|
POST /v1/chat/completions | ✅ 完整支持 |
POST /v1/completions (legacy 补全) | ❌ 不支持 |
POST /v1/embeddings | ❌ 不支持 |
POST /v1/audio/transcriptions (Whisper) | ❌ 不支持 |
POST /v1/audio/speech (TTS) | ❌ 不支持 |
POST /v1/images/generations (DALL-E) | ❌ —— 用 chat.completions + tools=[{"type":"image_generation"}] 替代 |
POST /v1/responses | ✅ GPT-5.x —— 内置 web_search / image_generation,无 previous_response_id |
GET /v1/models | ✅ —— 返回 GPUShare catalog |
如果你的应用强依赖 embedding / TTS / 语音转录,这部分需要继续走原厂。
完整 diff 示例
原 OpenAI 直连
import os
from openai import OpenAI
client = OpenAI(api_key=os.environ["OPENAI_API_KEY"])
resp = client.chat.completions.create(
model="gpt-5.4",
messages=[{"role": "user", "content": "Write a haiku"}],
)
print(resp.choices[0].message.content)
GPUShare
import os
from openai import OpenAI
client = OpenAI(
api_key=os.environ["GPUSHARE_API_KEY"],
base_url="https://api.dflop.top/v1",
)
# 同样调 GPT
resp = client.chat.completions.create(
model="gpt-5.4",
messages=[{"role": "user", "content": "Write a haiku"}],
)
# 也能调 Claude
resp_claude = client.chat.completions.create(
model="claude-sonnet-4-5-20250929",
messages=[{"role": "user", "content": "Write a haiku"}],
)
常见问题
Q: 我应该删 OPENAI_API_KEY 环境变量吗?
不必。建议平行保留:
export OPENAI_API_KEY=sk-... # 原 OpenAI 直连
export GPUSHARE_API_KEY=sk-gpushare-... # GPUShare
代码里显式指定用哪把:
# 关键时刻 fallback 回原厂
client = OpenAI(
api_key=os.environ.get("GPUSHARE_API_KEY") or os.environ["OPENAI_API_KEY"],
base_url=os.environ.get("OPENAI_BASE_URL", "https://api.openai.com/v1"),
)
Q: 速率限制跟原 OpenAI 一样吗?
不一样。GPUShare 不强制 QPS 上限,但按 Key 预算计费。详见 鉴权 §配额。
Q: 重试逻辑要改吗?
不用。OpenAI SDK 内置的指数退避对 GPUShare 同样有效。状态码语义跨服务保持一致 (错误码)。
Q: Function tools 的 tool_call_id 跨次会变吗?
GPUShare 透传上游 ID,不重写。你的多轮工具回填代码不需改。
下一步
- 选用什么模型最划算? 见 模型列表 §按用途速选
- 用 Anthropic SDK 还是 OpenAI SDK 调 Claude? 个人偏好。两个都跑通,选你熟的
- 客户端集成 (Cursor / Cline / Continue) 见 客户端集成 §Cursor