从 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 公开页面)。例如:

ModelOpenAI 直连 ($/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=true
  • image_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,不重写。你的多轮工具回填代码不需改。

下一步