如何在不更換模型的情況下降低 30% 的 AI API 成本
大多數團隊在 AI API 調用上支付了過多的費用。這並非因為選錯了模型,而是因為忽略了三個僅需極少代碼改動的優化方案:prompt caching、智慧模型路由 (smart model routing) 以及批次處理 (batch processing)。
以下是每種技術的詳細分析與實際數據。
1. Prompt Caching:最顯著的成效
如果您的應用程式在每次請求時都發送相同的 system prompt,那麼您正在為供應商已經處理過的 token 支付全額費用。
運作原理
OpenAI 會針對超過 1,024 個 token 的輸入自動進行 prompt 快取。快取的 token 費用僅為標準輸入價格的 50%。您不需要更改任何代碼。
Anthropic 則透過 cache_control 斷點使用顯式快取。寫入成本比標準輸入高 25%,但讀取成本降低了 90%。快取 TTL 為 5 分鐘,並在每次命中時延長。
數據計算
以一個典型的客戶服務機器人為例:
- System prompt:2,000 個 token
- 使用者訊息:平均 200 個 token
- 使用 Claude Sonnet 4.6,每日 5,000 次請求
不使用快取:
每日輸入成本 = 5,000 × 2,200 tokens × $3.00/1M = $33.00
使用 Anthropic prompt caching(假設快取命中率為 95%):
快取寫入:250 × 2,200 × $3.75/1M = $2.06
快取讀取:4,750 × 2,200 × $0.30/1M = $3.14
使用者 token:5,000 × 200 × $3.00/1M = $3.00
每日總計 = $8.20 (輸入成本節省了 75%)
實作方式
from anthropic import Anthropic
client = Anthropic(
api_key="sk-lemon-xxx",
base_url="https://api.lemondata.cc"
)
response = client.messages.create(
model="claude-sonnet-4-6",
max_tokens=1024,
system=[
{
"type": "text",
"text": "You are a customer support agent for Acme Corp...",
"cache_control": {"type": "ephemeral"} # 這將啟用快取
}
],
messages=[{"role": "user", "content": user_message}]
)
# 在回應標頭中檢查快取效能
# cache_creation_input_tokens vs cache_read_input_tokens
對於 OpenAI 模型,快取是自動進行的。只需確保您的 prompt 超過 1,024 個 token,並保持靜態前綴在請求之間的一致性。
2. 智慧模型路由:為每個任務選擇合適的模型
並非每個請求都需要使用最昂貴的模型。一個分類任務在 GPT-4.1 上的輸入成本為 $2.00/1M token,但在 GPT-4.1-mini 上僅需 $0.40/1M,效果同樣出色,成本卻降低了 5 倍。
路由策略
| 任務類型 | 推薦模型 | 輸入成本/1M |
|---|---|---|
| 複雜推理 | Claude Opus 4.6 / GPT-4.1 | $5.00 / $2.00 |
| 一般對話 | Claude Sonnet 4.6 / GPT-4.1 | $3.00 / $2.00 |
| 分類、提取 | GPT-4.1-mini / Claude Haiku 4.5 | $0.40 / $1.00 |
| Embeddings | text-embedding-3-small | $0.02 |
| 簡單格式化 | DeepSeek V3 | $0.28 |
實作方式
from openai import OpenAI
client = OpenAI(
api_key="sk-lemon-xxx",
base_url="https://api.lemondata.cc/v1"
)
def route_request(task_type: str, messages: list) -> str:
"""選擇能處理該任務且最便宜的模型。"""
model_map = {
"classification": "gpt-4.1-mini",
"extraction": "gpt-4.1-mini",
"summarization": "gpt-4.1-mini",
"complex_reasoning": "gpt-4.1",
"creative_writing": "claude-sonnet-4-6",
"code_generation": "claude-sonnet-4-6",
}
model = model_map.get(task_type, "gpt-4.1-mini")
response = client.chat.completions.create(
model=model,
messages=messages
)
return response.choices[0].message.content
實際節省金額
一個程式碼助手將 60% 的請求(語法檢查、格式化、簡單補全)路由到 GPT-4.1-mini,將 40% 的請求(架構設計、除錯)路由到 Claude Sonnet 4.6:
優化前(全部使用 Claude Sonnet 4.6):
1,000 次請求/日 × 3K 輸入 × $3.00/1M = $9.00/日
優化後(60/40 分流):
600 次請求 × 3K × $0.40/1M = $0.72/日 (mini)
400 次請求 × 3K × $3.00/1M = $3.60/日 (sonnet)
總計 = $4.32/日 (節省了 52%)
3. 批次處理:針對非緊急任務降低價格
OpenAI 提供 Batch API,對輸入和輸出 token 提供 50% 的折扣。權衡之處在於:結果會在 24 小時內交付,而非即時。
適合批次處理的場景:
- 夜間內容生成
- 大量文件分類
- 數據集標註
- 定期報告生成
# 建立批次檔案 (JSONL 格式)
import json
requests = []
for i, doc in enumerate(documents):
requests.append({
"custom_id": f"doc-{i}",
"method": "POST",
"url": "/v1/chat/completions",
"body": {
"model": "gpt-4.1-mini",
"messages": [
{"role": "system", "content": "Classify this document..."},
{"role": "user", "content": doc}
]
}
})
# 寫入 JSONL 檔案
with open("batch_input.jsonl", "w") as f:
for req in requests:
f.write(json.dumps(req) + "\n")
# 提交批次任務
batch_file = client.files.create(file=open("batch_input.jsonl", "rb"), purpose="batch")
batch = client.batches.create(input_file_id=batch_file.id, endpoint="/v1/chat/completions", completion_window="24h")
4. 額外技巧:減少 Token 數量
在 API 層級進行優化之前,請檢查您是否發送了不必要的 token。
常見的浪費:
- 冗長的 system prompt,重複模型已經遵循的指令
- 包含完整的對話歷史,而實際上只有最後 3-5 輪對話才重要
- 發送原始 HTML/markdown,而純文字即可滿足需求
- 未使用
max_tokens來限制輸出長度
prompt 長度減少 30%,直接意味著輸入成本降低 30%。
總結
| 技術 | 投入程度 | 典型節省比例 |
|---|---|---|
| Prompt caching | 低 (添加 cache_control) | 輸入成本的 40-75% |
| 模型路由 | 中 (分類任務) | 總體成本的 30-50% |
| 批次處理 | 中 (非同步工作流) | 批次任務的 50% |
| Token 減量 | 低 (修整 prompt) | 輸入成本的 10-30% |
這些技術具有加乘效應。一個實施了這四項技術的團隊,可以切實地將每月 API 帳單從 $3,000 降至 $1,000 以下,且輸出品質不會有任何下降。
核心見解:AI API 的成本優化並非尋找更便宜的供應商,而是針對每個特定任務,以正確的價格等級、正確的快取策略使用正確的模型。
立即開始優化:lemondata.cc 讓您透過一個 API key 存取 300 多個模型,並全面支援 OpenAI 和 Anthropic 模型的 prompt caching。
