从 Anthropic 迁移到图灵
用 Anthropic Python / TypeScript SDK 的代码迁到图灵,主要改三处:base_url、鉴权头类型(x-api-key → Authorization: Bearer)、模型名。
核心 diff
Python
from anthropic import Anthropic
client = Anthropic(
- api_key=os.environ["ANTHROPIC_API_KEY"],
+ auth_token=os.environ["TURING_API_KEY"],
+ base_url="https://live-turing.cn.llm.tcljd.com/api/v1",
)
message = client.messages.create(
- model="claude-sonnet-5",
+ model="turing/claude-sonnet-5",
max_tokens=1024,
messages=[{"role": "user", "content": "你好"}],
)
api_key → auth_tokenAnthropic SDK 默认用 x-api-key header 鉴权。图灵平台用标准的 Authorization: Bearer——SDK 里对应 auth_token 参数(而非 api_key)。
TypeScript / Node.js
import Anthropic from "@anthropic-ai/sdk";
const client = new Anthropic({
- apiKey: process.env.ANTHROPIC_API_KEY,
+ authToken: process.env.TURING_API_KEY,
+ baseURL: "https://live-turing.cn.llm.tcljd.com/api/v1",
});
cURL
-curl https://api.anthropic.com/v1/messages \
+curl https://live-turing.cn.llm.tcljd.com/api/v1/messages \
- -H "x-api-key: $ANTHROPIC_API_KEY" \
- -H "anthropic-version: 2023-06-01" \
+ -H "Authorization: Bearer $TURING_API_KEY" \
-H "Content-Type: application/json" \
-d '{
- "model": "claude-sonnet-5",
+ "model": "turing/claude-sonnet-5",
"max_tokens": 1024,
"messages": [{"role": "user", "content": "你好"}]
}'
anthropic-version header图灵平台内部会自动选择合适的 API 版本。你可以保留此 header(无害),也可以删掉。
模型名映射
图灵平台的 Claude 模型名以 turing/claude-* 开头。迁移时优先选近期型号,例如 turing/claude-sonnet-5 或 turing/claude-opus-4.8。
完整可用模型、上下文、价格与退役状态以 模型列表 → Turing Claude 为准。
功能对照表
| 功能 | Anthropic 原生 | 图灵平台 |
|---|---|---|
| Messages API | ✅ | ✅ 完全兼容;见 Messages 接口 |
| 流式 SSE | ✅ | ✅ |
工具调用(tools + tool_result) | ✅ | ✅ |
| Extended Thinking | ✅ {"type": "enabled"/"adaptive"} | ✅ |
Prompt Caching (cache_control) | ✅ | ✅,含 5m / 1h TTL |
| Vision (图片输入) | ✅ | ✅ |
Web Search Tool (web_search_20250305) | ✅ | ✅ |
| Computer Use | ✅ | ⚠ 走上游 Vertex AI,部分场景支持 |
| Files API | ✅ | ⚠ 规划中 |
| Batch API | ✅ | ⚠ 未公开 |
| Count Tokens | ✅ | ✅ /api/count-message-tokens |
图灵新增:turing_options
在请求顶层加一个 turing_options 字段享受平台能力:
message = client.messages.create(
model="turing/claude-sonnet-5",
max_tokens=1024,
messages=[...],
extra_body={
"turing_options": {
"timeout": 30,
"max_retries": 2,
"fallbacks": ["turing/gpt-5.4-mini"]
}
}
)
常见 gotchas
- 用错
api_key:SDK 会自动走x-api-keyheader,图灵返回 401;必须用auth_token - 模型名日期后缀:
claude-sonnet-4-5-20241022这种带日期的名字图灵一律去日期,turing/claude-sonnet-4.5 anthropic-versionheader:无需显式设置- 响应
id、type、role等字段:完全一致,无需改解析逻辑 - Claude 新型号 thinking 配置:
claude-opus-4.7/claude-opus-4.8/claude-sonnet-5不支持type: "enabled"+budget_tokens,需改用type: "adaptive"+output_config.effort。其中 Sonnet 5 默认开启但可disabled,Opus 4.7/4.8 默认关闭需显式开启。详见 思考与推理
可选:切换到 Chat Completions 协议
Anthropic Messages 协议是 Claude 的原生协议,跨厂商受限。如果你想用同一段代码在 Claude / GPT / Gemini / Qwen 之间随意切换,把协议换成 OpenAI Chat Completions:
-from anthropic import Anthropic
-client = Anthropic(
- auth_token="...",
- base_url="https://live-turing.cn.llm.tcljd.com/api/v1",
-)
+from openai import OpenAI
+client = OpenAI(
+ api_key="...",
+ base_url="https://live-turing.cn.llm.tcljd.com/api/v1",
+)
-message = client.messages.create(
- model="turing/claude-sonnet-5",
- max_tokens=1024,
- messages=[{"role": "user", "content": "你好"}],
-)
+response = client.chat.completions.create(
+ model="turing/claude-sonnet-5", # 换模型只改这里
+ messages=[{"role": "user", "content": "你好"}],
+)
何时留在 Messages 协议
需要 Claude 原生特性(如 cache_control 精细缓存、server_tool_use / web_search_tool_result block 结构、thinking block 直接返回)时,保留 Messages 协议体验更好。
迁移后立刻能用的平台能力
- Fallback 到非 Claude 模型:
claude-sonnet-5挂了自动切gpt-5.4-mini - 跨厂商 Prompt 缓存统一计费视角:计费与用量
- 请求追踪:
X-Turing-Trace-Id响应头 - 统一速率限制视角:速率限制
See also
- Messages 接口 — Claude 原生协议
- Chat Completions — OpenAI 兼容协议(可调用 Claude)
- Prompt 缓存 —
cache_control详解 - 思考与推理 — Claude adaptive thinking 适配指南
- 从 OpenAI 迁移