最近在做一個專案,需要比較不同 AI 模型的回答品質和速度。原本以為要分別申請 OpenAI、Anthropic、Google、DeepSeek 的 API Key,寫不同的程式碼去呼叫,結果發現有更簡單的方法。
這篇文章記錄一下我的做法,順便把幾個主流模型的實測結果分享出來,希望對有類似需求的朋友有幫助。
如果你直接用各家的 API,會遇到這些麻煩:
openai SDKanthropic SDK,request 格式不同google-generativeai,又是另一套每換一個模型就要改 import、改認證、改 request 格式,很煩。
後來發現有一種叫 API Gateway 的服務,把所有模型統一成 OpenAI 格式。我用的是 Crazyrouter(crazyrouter.com),一個 Key 可以呼叫 624 個以上的模型。
重點是:只需要 openai 這個 SDK,改一下 base_url 就好。
pip install openai
就這樣,不需要裝其他東西。
from openai import OpenAI
client = OpenAI(
base_url="https://crazyrouter.com/v1",
api_key="sk-你的key"
)
response = client.chat.completions.create(
model="gpt-4o",
messages=[{"role": "user", "content": "用 Python 寫一個快速排序"}]
)
print(response.choices[0].message.content)
要換模型?改 model= 那一行就好:
# Claude Sonnet 4
response = client.chat.completions.create(model="claude-sonnet-4-20250514", messages=messages)
# DeepSeek V3
response = client.chat.completions.create(model="deepseek-chat", messages=messages)
# Gemini 2.0 Flash
response = client.chat.completions.create(model="gemini-2.0-flash", messages=messages)
其他程式碼完全不用動。
我寫了一個腳本,用同一個 prompt 測試五個模型的回答速度和 token 用量:
from openai import OpenAI
import time
client = OpenAI(
base_url="https://crazyrouter.com/v1",
api_key="sk-你的key"
)
models = [
"gpt-4o-mini",
"deepseek-chat",
"claude-sonnet-4-20250514",
"gemini-2.0-flash",
"deepseek-reasoner",
]
prompt = "用 Python 實作最長遞增子序列(LIS),時間複雜度要求 O(n log n),請附上完整程式碼和註解。"
results = []
for model in models:
start = time.time()
try:
resp = client.chat.completions.create(
model=model,
messages=[{"role": "user", "content": prompt}],
max_tokens=500
)
elapsed = time.time() - start
tokens = resp.usage.total_tokens
results.append({
"model": model,
"time": f"{elapsed:.2f}s",
"tokens": tokens,
"preview": resp.choices[0].message.content[:100]
})
print(f"✅ {model}: {elapsed:.2f}s, {tokens} tokens")
except Exception as e:
print(f"❌ {model}: {e}")
# 印出結果
print("\n" + "="*60)
for r in results:
print(f"\n模型: {r['model']}")
print(f"耗時: {r['time']} | Token: {r['tokens']}")
print(f"回答預覽: {r['preview']}...")
| 模型 | 回應速度 | 程式碼品質 | 適合場景 |
|---|---|---|---|
gpt-4o-mini |
快 | 中上 | 簡單任務、快速回答 |
deepseek-chat |
中 | 中上 | 日常開發、高 CP 值 |
claude-sonnet-4 |
中 | 最高 | 複雜重構、程式碼審查 |
gemini-2.0-flash |
最快 | 中 | 長文件處理、速度優先 |
deepseek-reasoner |
慢 | 高(推理強) | 演算法、數學推理 |
幾個觀察:
如果你用 LangChain 做 RAG 或 Agent,整合方式一樣簡單:
from langchain_openai import ChatOpenAI
llm = ChatOpenAI(
base_url="https://crazyrouter.com/v1",
api_key="sk-你的key",
model="deepseek-chat"
)
# 後面的程式碼完全不用改
from langchain_core.prompts import ChatPromptTemplate
from langchain_core.output_parsers import StrOutputParser
prompt = ChatPromptTemplate.from_messages([
("system", "你是一位資深的 Python 工程師。"),
("user", "{question}")
])
chain = prompt | llm | StrOutputParser()
result = chain.invoke({"question": "如何用 FastAPI 建立一個 CRUD API?"})
print(result)
LlamaIndex、AutoGen、CrewAI 也是同樣的改法。
https://crazyrouter.com/v1
sk-你的key
不需要 Cursor Pro 訂閱,用自己的 API Key 就能使用 AI 功能。
https://crazyrouter.com/v1
sk-你的key
claude-sonnet-4-20250514
pip install aider-chat
export OPENAI_API_KEY="sk-你的key"
export OPENAI_API_BASE="https://crazyrouter.com/v1"
aider --model deepseek-chat
需要即時顯示回答的話:
stream = client.chat.completions.create(
model="gpt-4o",
messages=[{"role": "user", "content": "解釋 TCP 三次握手"}],
stream=True
)
for chunk in stream:
content = chunk.choices[0].delta.content
if content:
print(content, end="", flush=True)
| 模型 | 輸入 ($/百萬 token) | 輸出 ($/百萬 token) |
|---|---|---|
deepseek-chat |
$0.14 | $0.28 |
gpt-4o-mini |
$0.15 | $0.60 |
gemini-2.0-flash |
$0.10 | $0.40 |
gpt-4o |
$2.50 | $10.00 |
claude-sonnet-4 |
$3.00 | $15.00 |
以每天呼叫 100 次、平均 500 輸入 + 200 輸出 token 來算:
deepseek-chat:月費約 $0.13(約台幣 4 元)gpt-4o:月費約 $9.75(約台幣 300 元)差距蠻大的。如果不是特別需要最頂級的品質,DeepSeek V3 的 CP 值真的很高。
設定一次,所有工具自動套用:
# 加到 ~/.bashrc 或 ~/.zshrc
export OPENAI_API_KEY="sk-你的key"
export OPENAI_API_BASE="https://crazyrouter.com/v1"
export OPENAI_BASE_URL="https://crazyrouter.com/v1"
Q: 跟直接用各家 API 有什麼差別?
A: 功能完全一樣。差別在於只需要管理一個 Key,切換模型只改一個字串。
Q: 延遲會增加嗎?
A: 閘道轉發會增加幾十毫秒,對 LLM 幾秒的回應時間來說可以忽略。
Q: 支援 Function Calling 嗎?
A: 支援,跟 OpenAI 格式完全相容。
Q: 中文回答品質會受影響嗎?
A: 不會。閘道只是轉發請求,各模型的原生中文能力不受影響。
這個方法解決了我在專案中需要比較多個模型的痛點。一個 Key、一個 SDK、改一行字串就能切換模型,省了不少時間。
如果你也有類似的需求,可以試試看。
相關資源:
有問題歡迎留言討論 👋