从 Anthropic 直连迁移

用 Anthropic SDK 切到 GPUShare —— base URL 不带 /v1 一定要注意

从 Anthropic 直连迁移

已经在用 Anthropic SDK?切到 GPUShare 只需改 2 行代码,然后可以一并调 GPT / GLM / Grok / DeepSeek 等 26+ 个非 Claude 模型。

⚠️ 注意: base URL 不带 /v1

Anthropic SDK 默认会自动在 base URL 后追加 /v1/messages。所以:

# ❌ 错: 会拼出 /v1/v1/messages
client = Anthropic(base_url="https://api.dflop.top/v1", ...)

# ✅ 对: SDK 会拼出 /v1/messages
client = Anthropic(base_url="https://api.dflop.top", ...)

记住一句话: OpenAI SDK 带 /v1,Anthropic SDK 不带

改动点 (Python)

from anthropic import Anthropic

# 原 Anthropic 直连
client = Anthropic(
-    api_key="sk-ant-...",
+    api_key="sk-gpushare-xxx",
+    base_url="https://api.dflop.top",
)

就这两处。client.messages.create(...) 之后的代码不变

改动点 (TypeScript)

import Anthropic from "@anthropic-ai/sdk";

const client = new Anthropic({
-  apiKey: process.env.ANTHROPIC_API_KEY,
+  apiKey: process.env.GPUSHARE_API_KEY,
+  baseURL: "https://api.dflop.top",
});

改动点 (curl)

- curl https://api.anthropic.com/v1/messages \
+ curl https://api.dflop.top/v1/messages \
-   -H "x-api-key: sk-ant-..." \
+   -H "x-api-key: sk-gpushare-xxx" \
    -H "anthropic-version: 2023-06-01" \
    -H "Content-Type: application/json" \
    -d '{
      "model": "claude-sonnet-4-5-20250929",
      "max_tokens": 1024,
      "messages": [{"role": "user", "content": "Hello"}]
    }'

拿到的新能力

# 用 Anthropic SDK 调 GPT
client.messages.create(model="gpt-5.4", max_tokens=1024, messages=[...])

# 调 GLM
client.messages.create(model="glm-5.1", max_tokens=1024, messages=[...])

# 调 Grok
client.messages.create(model="grok-4-fast-reasoning", max_tokens=1024, messages=[...])

# 调 DeepSeek
client.messages.create(model="deepseek-v3.2", max_tokens=1024, messages=[...])

限制: Gemini 系列 (gemini-*) 目前不支持 Anthropic Messages 端点 (Anthropic → Gemini 翻译在路线图中)。要调 Gemini 改用 OpenAI Chat 或 Gemini Native 端点。

价格

Anthropic 直连 vs GPUShare:

ModelAnthropic 直连 ($/1M in/out)GPUShare ($/1M in/out)
claude-opus-4-5-20251101$15.00 / $75.00$15.00 / $75.00
claude-sonnet-4-5-20250929$3.00 / $15.00$3.00 / $15.00

每次调用账单完整记在 model.dflop.top/keys → Usage。

改完之后必看

1. anthropic-version header

Anthropic SDK 自动设置 anthropic-version: 2023-06-01。curl 直调时必须手动加这个 header,否则 400。

2. Tools / Tool Use 兼容

完全一致:input_schema / tool_use / tool_result 命名都保留。详见 工具调用

3. 流式响应跟原 Anthropic 一致

event: content_block_delta / event: message_stop 等事件格式不变。详见 流式响应

4. 错误格式

GPUShare 在 /v1/messages 端点返回的错误保持 Anthropic 协议格式:

{"type": "error", "error": {"type": "...", "message": "..."}}

5. max_tokens 必填

跟 Anthropic 一致,GPUShare 在 /v1/messages 端点也要求 max_tokens 必填。这跟 OpenAI 不同 (OpenAI 选填)。

6. 你不能用的 Anthropic 专属功能

功能状态
Messages API (POST /v1/messages)✅ 完整支持
Streaming✅ 支持
Tool Use✅ 支持
Vision (image input)✅ 支持 (Claude / GPT / Gemini / Grok 模型)
Prompt caching (cache_control)⚠️ 翻译路径会丢字段;原生 Claude 通道支持
Computer Use beta❌ 不支持
Files API❌ 不支持
Batch API❌ 不支持

完整 diff 示例

原 Anthropic 直连

import os
from anthropic import Anthropic

client = Anthropic(api_key=os.environ["ANTHROPIC_API_KEY"])

msg = client.messages.create(
    model="claude-sonnet-4-5-20250929",
    max_tokens=1024,
    messages=[{"role": "user", "content": "Write a haiku"}],
)
print(msg.content[0].text)

GPUShare

import os
from anthropic import Anthropic

client = Anthropic(
    api_key=os.environ["GPUSHARE_API_KEY"],
    base_url="https://api.dflop.top",
)

# 同样调 Claude
msg = client.messages.create(
    model="claude-sonnet-4-5-20250929",
    max_tokens=1024,
    messages=[{"role": "user", "content": "Write a haiku"}],
)

# 也能调 GPT (用 Anthropic SDK!)
msg_gpt = client.messages.create(
    model="gpt-5.4",
    max_tokens=1024,
    messages=[{"role": "user", "content": "Write a haiku"}],
)

常见问题

Q: ANTHROPIC_API_KEY 环境变量还要留吗?

建议平行保留:

export ANTHROPIC_API_KEY=sk-ant-...       # 原 Anthropic 直连
export GPUSHARE_API_KEY=sk-gpushare-...   # GPUShare

Q: Claude Code 客户端怎么切?

export ANTHROPIC_BASE_URL=https://api.dflop.top
export ANTHROPIC_AUTH_TOKEN=sk-gpushare-xxx
claude

详见 Claude Code 集成

Q: cache_control 还能用吗?

  • 原生 Claude 通道支持 (Anthropic 直传 Claude 模型时)
  • 翻译路径会丢字段 (X-Protocol-Warning: cache_control: dropped)

如果 prompt caching 对你的成本很关键,坚持用 Claude 模型走 /v1/messages 端点即可保留完整支持。

Q: 怎么知道走的是原生还是翻译路径?

看响应 header:

  • X-Protocol-Translation: <tag> —— 翻译路径
  • 无该 header —— 原生直通

也可以在 兼容矩阵 直接查每个模型每个端点的路径。

下一步