遷移指南
從 OpenAI、Anthropic 或 Google Gemini 轉到 Inference 需要改哪些地方。
遷移指南
從 OpenAI 遷移
只要改兩個東西:base URL 與 API key。其餘程式碼一行都不用動。
Python
# 之前
from openai import OpenAI
client = OpenAI(api_key=os.environ["OPENAI_API_KEY"])
# 之後
from openai import OpenAI
client = OpenAI(
base_url="https://api.alphacurve.io/v1",
api_key=os.environ["INFERENCE_API_KEY"],
)
Node / TypeScript
// 之前
const client = new OpenAI({ apiKey: process.env.OPENAI_API_KEY });
// 之後
const client = new OpenAI({
baseURL: "https://api.alphacurve.io/v1",
apiKey: process.env.INFERENCE_API_KEY,
});
唯一要注意的:模型 ID 要加前綴
| 之前 | 之後 |
|---|---|
gpt-4o | openai/gpt-4o |
gpt-4o-mini | openai/gpt-4o-mini |
沒加前綴會得到 404 model_not_found。
從 Anthropic 遷移
Anthropic 原生 API 的訊息格式與 OpenAI 不同。改用 openai SDK 指向 Inference,就能沿用 OpenAI 風格的程式碼呼叫 Claude。
格式對照
| Anthropic 原生 | OpenAI 相容(Inference) |
|---|---|
anthropic.Anthropic(api_key=...) | OpenAI(base_url="https://api.alphacurve.io/v1", api_key=...) |
client.messages.create(...) | client.chat.completions.create(...) |
system="..."(獨立參數) | {"role": "system", "content": "..."} 放在 messages 最前面 |
max_tokens 必填 | max_tokens 選填 |
model="claude-sonnet-4-5" | model="anthropic/claude-sonnet-4-5" |
resp.content[0].text | resp.choices[0].message.content |
resp.usage.input_tokens / output_tokens | resp.usage.prompt_tokens / completion_tokens |
tools[].input_schema | tools[].function.parameters |
stop_reason: "end_turn" | finish_reason: "stop" |
之前(Anthropic SDK)
import os
import anthropic
client = anthropic.Anthropic(api_key=os.environ["ANTHROPIC_API_KEY"])
resp = client.messages.create(
model="claude-sonnet-4-5",
max_tokens=1024,
system="你是簡潔的助理。",
messages=[{"role": "user", "content": "用一句話說明什麼是路由。"}],
)
print(resp.content[0].text)
之後(openai SDK 指向 Inference)
import os
from openai import OpenAI
client = OpenAI(
base_url="https://api.alphacurve.io/v1",
api_key=os.environ["INFERENCE_API_KEY"],
)
resp = client.chat.completions.create(
model="anthropic/claude-sonnet-4-5",
max_tokens=1024,
messages=[
{"role": "system", "content": "你是簡潔的助理。"},
{"role": "user", "content": "用一句話說明什麼是路由。"},
],
)
print(resp.choices[0].message.content)
從 Google Gemini 遷移
| Gemini 原生 | OpenAI 相容(Inference) |
|---|---|
genai.GenerativeModel("gemini-2.5-pro") | model="google/gemini-2.5-pro" |
contents=[{"role": "user", "parts": [...]}] | messages=[{"role": "user", "content": ...}] |
role: "model" | role: "assistant" |
system_instruction= | {"role": "system", ...} |
generation_config.max_output_tokens | max_tokens |
resp.text | resp.choices[0].message.content |
inline_data / file_data | {"type": "image_url", "image_url": {"url": "data:..."}} |
import os
from openai import OpenAI
client = OpenAI(
base_url="https://api.alphacurve.io/v1",
api_key=os.environ["INFERENCE_API_KEY"],
)
resp = client.chat.completions.create(
model="google/gemini-2.5-pro",
messages=[
{"role": "system", "content": "你是簡潔的助理。"},
{"role": "user", "content": "用一句話說明什麼是路由。"},
],
)
print(resp.choices[0].message.content)
遷移檢查清單
- 到 Dashboard 建立 API 金鑰,並設定每月花費上限。
- 儲值 credits。
- 把 base URL 改成
https://api.alphacurve.io/v1,最好透過環境變數設定。 - 換上
sk-inf-金鑰。 - 幫所有模型 ID 加上
provider/前綴。 - 呼叫
GET /v1/models確認每個模型 ID 都存在且此金鑰可用。 - 把錯誤處理改為讀取
error.code(見 錯誤)。 - 先用少量流量(例如 5%)灰度驗證,再全量切換。
- 在 Dashboard 的 Usage 頁面確認成本符合預期。
用環境變數同時支援兩邊
灰度期間可以讓同一份程式碼在兩種設定間切換:
import os
from openai import OpenAI
client = OpenAI(
base_url=os.getenv("LLM_BASE_URL", "https://api.alphacurve.io/v1"),
api_key=os.environ["LLM_API_KEY"],
)
MODEL = os.getenv("LLM_MODEL", "openai/gpt-4o-mini")
回退
Inference 沒有任何鎖定:所有程式碼都是標準 OpenAI 格式。想改回直連原廠,把 base URL、金鑰與模型前綴改回去即可。