iT邦幫忙

2

【教學】用 Python 三行程式碼切換 AI 模型:GPT-4o / Claude / Gemini / DeepSeek 實測比較

  • 分享至 

  • xImage
  •  

【教學】用 Python 三行程式碼切換 AI 模型:GPT-4o / Claude / Gemini / DeepSeek 實測比較

前言

最近在做一個專案,需要比較不同 AI 模型的回答品質和速度。原本以為要分別申請 OpenAI、Anthropic、Google、DeepSeek 的 API Key,寫不同的程式碼去呼叫,結果發現有更簡單的方法。

這篇文章記錄一下我的做法,順便把幾個主流模型的實測結果分享出來,希望對有類似需求的朋友有幫助。

問題:每家 API 都不一樣

如果你直接用各家的 API,會遇到這些麻煩:

  • OpenAI 用 openai SDK
  • Anthropic 用 anthropic SDK,request 格式不同
  • Google 用 google-generativeai,又是另一套
  • DeepSeek 雖然相容 OpenAI 格式,但要另外管理 Key

每換一個模型就要改 import、改認證、改 request 格式,很煩。

解法:OpenAI 相容的 API 閘道

後來發現有一種叫 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 高(推理強) 演算法、數學推理

幾個觀察:

  • Claude Sonnet 4 的程式碼品質確實最好,註解最完整,但速度不是最快
  • DeepSeek V3 的 CP 值驚人,品質接近 GPT-4o 但價格只有 1/18
  • Gemini 2.0 Flash 速度最快,適合需要即時回應的場景
  • DeepSeek R1 在需要推理的題目上表現特別好

實用場景:LangChain 整合

如果你用 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 也是同樣的改法。

實用場景:在 Cursor / Cline 中使用

Cursor

  1. 設定 → Models
  2. Override OpenAI Base URL: https://crazyrouter.com/v1
  3. API Key: sk-你的key
  4. 選擇模型

不需要 Cursor Pro 訂閱,用自己的 API Key 就能使用 AI 功能。

Cline(VS Code 擴充功能)

  1. 安裝 Cline 擴充功能
  2. 側邊欄 → 設定 → API Provider → OpenAI Compatible
  3. Base URL: https://crazyrouter.com/v1
  4. API Key: sk-你的key
  5. Model ID: claude-sonnet-4-20250514

Aider(終端機)

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、改一行字串就能切換模型,省了不少時間。

如果你也有類似的需求,可以試試看。


相關資源:

有問題歡迎留言討論 👋


圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言