我把 LLM API 賬單砍了 70%:路由 + 緩存的 AirAi 實戰筆記
0. 背景:賬單是怎麼爆的
我做幾個 side project,早期要麼咬牙買官方 $20/mo 訂閱,要麼硬扛國際信用卡被拒。月底算賬發現兩件扎心的事:
80% 的請求是摘要、分類、格式化這類輕活,用最貴的模型跑純屬浪費;
訂閱是固定成本——調用少的時候虧,調用多的時候又不夠用。
於是我轉向 AirAi:自己拿 API key,按量計費,並把客戶端指向它的 OpenAI 兼容接口。
這裡還有段小插曲。我手上一直沒張像樣的國際信用卡,官方直連每次走到支付那一步就被拒;有陣子借家人的卡頂著,結果觸發風控,賬號直接被凍,申訴了快兩周才解。那之後我就鐵了心只找「不依賴國際卡」的渠道。最後落地的這家網關只收 USDT——對我這種沒國際卡的人來說,反而是門檻最低的那一檔:充幣即用,沒有月費綁定,也不用走 KYC 那套。更關鍵的是價格:我體感算下來,單價只有官方直連的 1 折左右,這才是它真正讓我留下的理由。
1. 一行切換:指向任意兼容網關
幾乎所有支持自定義 endpoint 的客戶端(Claude Code、Cursor、Open WebUI、LibreChat、Cline…)都能用一行環境變量切換,無需改代碼。把下面兩個變量指向你自己的網關即可:
export OPENAI_BASE_URL="https://api.airai.cc/v1" export ANTHROPIC_BASE_URL="https://api.airai.cc/v1"
挑哪家網關是另一回事,本文只講落地方法。
2. 代碼實戰:路由 + 緩存
光切換還不夠,真正省錢的是"讓對的模型乾對的活 + 緩存重復請求"。下面是我在生產里用的骨架(兼容 OpenAI SDK),base_url 和 api_key 都從環境變量讀,不寫死在代碼里:
import openai, hashlib, os
client = openai.OpenAI(
base_url=os.getenv("OPENAI_BASE_URL"),
api_key=os.getenv("OPENAI_API_KEY"),
)
# Routing: small model for light tasks, flagship only for complex reasoning
CHEAP = "gpt-5.6-luna" # classification / summarization / formatting
STRONG = "gpt-5.6-sol" # only called for complex reasoning
_cache: dict[str, str] = {} # swap for Redis in production
def ask(prompt: str) -> str:
model = STRONG if len(prompt) > 400 else CHEAP
key = hashlib.md5(prompt.encode()).hexdigest()
if key in _cache: # cache hit, 0 cost
return _cache[key]
resp = client.chat.completions.create(
model=model,
messages=[{"role": "user", "content": prompt}],
)
answer = resp.choices[0].message.content
_cache[key] = answer
return answerCHEAP / STRONG 按你的預算和效果調。模型名以你所用網關的文檔為準。離線任務記得走 Batch 接口,通常能再省一半。
3. 成本對比(示意)
改造前後的示意數據(真實數字請以你的賬單為準):
項目 | 官方訂閱 / 直連 | AirAi + 路由緩存 |
計費方式 | 固定月費 / 官方價 | 按量計費 |
輕活模型 | 旗艦(浪費) | 小模型(更便宜) |
重復請求 | 全價重算 | 緩存命中 0 成本 |
體感成本 | 基準 100% | 約 10–30%(視調用量) |
4. 誠實邊界(說點真話)
不是所有人都更省:月調用量很低時,固定訂閱可能更划算;按量計費在調用量大時才顯優勢。先算自己的量。
延遲與穩定性:多一層網關會多一點延遲,關鍵路徑加超時和降級。
密鑰安全:key 放環境變量,別寫死在前端或公開倉庫。
5. 小結
省 LLM 成本的本質就一句話:讓便宜的模型乾大多數活,貴的只在必要時出場,再砍掉浪費的 token;把"對接 N 家"變成"改一行 base_url"。路由和緩存是免費的兩塊磚,先搬起來再說。
有用嗎?