導言:要把 AI 應用推上正式環境,API 中轉站幾乎是多數開發者繞不開的一關。看著中轉站官方網站上「99.9% 極速穩定」「獨享高並行通道」這類宣傳文案,真正串接之後才會發現:這裡的水真的很深。今天就來聊聊我們團隊從「憑感覺亂買」到「建置自動化監控」的血淚史,順便把我們在付款、串接前用來摸清中轉站底細的測試框架全盤托出。

一、那些年,我們在 AI 中轉站踩過的雷

老實說,今天能整理出這套多維度的測試體系,並不是因為我們一開始有多聰明,而是真金白銀、線上事故和使用者的抱怨,一次次硬砸出來的。

1. 第一個雷:「假 200 OK」與「悄悄截斷」

剛開始做自動化評測時,我們的想法非常單純:寫個 Python 腳本,每 5 分鐘對中轉站送一次 POST 請求,只要回傳 HTTP 200 狀態碼而且有文字,就默默打個勾,覺得服務還算穩定。

結果線上的 Agent 才部署不到兩天,客服那邊就炸開了鍋。使用者紛紛反映:「這個 AI 怎麼話說到一半就突然停了?」「生成的內容邏輯完全接不起來!」

翻查日誌的時候,我當下真的傻眼。 有些中轉站為了掩蓋上游帳號池耗盡(例如 429 限流或 401 驗證失效)、閘道逾時(504)或節點當機,竟然在 HTTP 協定層照樣回傳 200 OK。更誇張的是,它們會在串流(SSE)傳到一半時,偷偷在背景塞一個 data: [DONE] 強制結束,或是在 JSON 裡煞有介事地塞一句 {"error": "rate limit exceeded"},偽裝成模型的回答。我們最早那套只看狀態碼的「傻瓜式」監測,就這樣被「假 200」耍得團團轉。

2. 第二個雷:夜間的「幽靈卡頓」與首 Token 延遲爆表

吃過虧之後,我們趕緊改進,加上全天候的定時監控。白天測試時,平均回應時間維持在 2 秒左右,帳面數據漂亮得很。誰知道一到夜間尖峰時段,線上系統的呼叫逾時率和使用者放棄率就像坐火箭一樣往上衝。

後來才搞清楚,絕大多數中轉站後端根本沒有什麼官方直連通道,全是混搭一堆美國區帳號池或多區域代理節點。一到北美上班時間或中國大陸的夜間尖峰,並行量一上來就整個撐不住。最離譜的是,雖然生成整段回答的總時間看起來還是 4 秒左右,第一個 Token(TTFT)卻足足等了 12 秒! 使用者在前端對著空白框乾等十幾秒,誰受得了?大部分人早就沒耐心,直接把頁面關掉了。

這兩次事故讓我們徹底醒悟:面對複雜的 AI 協定和串流傳輸,單次 Ping 或隨手送兩個請求測一下,根本只是自欺欺人的障眼法。

二、從「盲目相信」到「嚴密防守」:測試體系的三次迭代

為了不被中轉站業者的行銷話術牽著鼻子走,我們的評測方法經歷了三個階段:

1.0 時代:盲測與憑感覺(經驗主義)

  • 做法:在 Web UI 介面手動送幾個 Prompt 試用,或是自己寫個腳本送 10 次請求,看看速度快不快、回覆品質好不好。
  • 侷限:測試樣本太小,隨機性極高,完全是在賭運氣;正式環境一遇到高並行或偶發斷線,問題就直接浮現。

2.0 時代:並行與 HTTP 狀態碼監控(粗略監控)

  • 做法:用 Postman 和 Locust 跑多並行壓力測試,開始觀察 HTTP 狀態碼分布、平均回應時間和成功率。
  • 侷限:只看得到最外層「閘道」的表現,完全抓不到串流斷流、偽造錯誤、Token 輸出卡頓這些藏在深處的隱性問題。

3.0 時代:串流狀態機與跨產業借鏡(精準觀測)

自建的監控指標碰到瓶頸時,我們特地找了在高頻交易(HFT)和 CDN 維運領域工作的周哥聊聊。

周哥聽完我們的困惑,一語道破核心:「你們把 AI API 中轉站當成一般的 Web API 來測,方向從一開始就錯了。這東西本質上就是一個帶有長連線和高並行特性的網路中間節點啊!」

周哥提醒我們,AI 的 SSE 串流傳輸在底層拓撲和對封包遺失的敏感度上,跟影音即時通訊(WebRTC/RTMP)以及證券行情推播非常相似。不能套用傳統 Web 的打點邏輯,而要借鏡高頻交易量測「Tick-to-Trade 極速延遲」,以及 CDN 處理「首幀載入」時的鏈路拆解思維。

受到周哥這番話的啟發,我們徹底推翻原本的監測邏輯,建置多區域的分散式探針,把網路建立連線、TLS 交握、首 Token 抵達、Token 吞吐速率和 SSE 封包解析全部拆開來看,再搭配統計方法做平滑處理。這套方案,就是我們現在使用的自動化測試標準。

三、核心測試指標:真正決定正式環境體驗的 3 大維度

根據周哥提供的思路和我們自己踩過的雷,現在評估一家 API 中轉站,我們一律看這 3 個核心維度的多指標矩陣:

                        ┌── TTFT(首 Token 延遲)-> 決定使用者的「等待感」
          ┌── 延遲 ─────┼── TPS(生成速度)-> 決定「打字機」效果是否流暢
          │             └── P95/P99 延遲 -> 評估最差情況與尖峰時段表現
          │
測試指標 ─┼── 可靠性 ───┬── 解析成功率 -> 剔除假 200 與格式不合法的回應
          │             └── Retry-to-Success -> 評估指數退避重試的容錯能力
          │
          └── 串流品質 ─┬── 串流中斷率 -> 判斷是否「話說到一半就斷掉」
                        └── Token 抖動率 -> 評估輸出過程是否卡頓

1. 延遲維度:把「等待」和「生成」分開看

  • TTFT(Time to First Token):從送出 HTTP 請求到收到第一個 SSE 封包的毫秒數。這就是周哥說的「首幀時間」,直接決定使用者等待時的焦慮感。正式環境的硬性指標是 TTFT 必須 < 1.5 秒。
  • TPS(Tokens per Second):第一個 Token 出來之後的持續生成速度(生成 Token 數 / 持續時間)。TPS 太低的話,前端的「打字機」效果就會像老爺車一樣走走停停。
  • P95 / P99 延遲:別相信那些會騙人的「算術平均數」!我們只看第 95 和第 99 百分位的回應時間。中轉站在尖峰時段、長上下文或通道壅塞時的「真實慘況」,在 P95/P99 面前立刻原形畢露。

2. 可靠性維度:看穿那些「假成功」

  • 解析成功率(Parse Success):請求不只要回傳 200,回傳的封包還必須能被官方 SDK 成功解析、包含完整的 JSON 結構,絕對不能混入中轉站自行注入的錯誤訊息。
  • 重試成功率(Retry-to-Success Rate):模擬正式環境的指數退避重試機制,看看中轉站在偶發 429 或 5xx 之後,能不能在 3 次重試內切換備用通道、迅速恢復。

3. 串流品質:專抓「靜默故障」

  • 串流中斷率(Stream Interruption):在收到官方約定的 data: [DONE] 結束標記之前,TCP 連線就提前斷開或靜默沒有回應的比例。
  • Token 抖動率(Inter-Token Jitter):直接借用影音傳輸中「網路抖動」的概念,計算相鄰兩個 SSE 封包抵達時間差的標準差。抖動率一旦過高,代表中轉站後端通道的負載極不穩定,或是偷偷疊了好幾層代理緩衝(Buffering)。

四、理論與產業參考:不閉門造車

為了讓測試數據更客觀、更有說服力,我們在建立評估邏輯時,參考了業界幾套經典的維運與統計標準:

1. Google SRE 維運白皮書(The Four Golden Signals)

Google SRE(網站可靠性工程)歸納出四大黃金指標:延遲(Latency)、流量(Traffic)、錯誤(Errors)、飽和度(Saturation)。我們在設計探針打點時,直接把中轉站當成一個完全不可信任的外部服務,所有警示都圍繞這四大黃金訊號來設定。

2. OpenTelemetry 可觀測性標準與 W3C SSE 規範

針對串流回應,我們參考了 OpenTelemetry 對長連線 Trace 的打點規範,以及 W3C 的 Server-Sent Events 協定,在底層協定層面全程打點:從 TCP 交握、TLS 協商、Headers 接收、First Data Chunk 輸出,一路記錄到 [DONE] 訊號。

3. Wilson 信賴區間(Wilson Score Interval)

為中轉站做穩定性排名時,如果直接用簡單的「成功次數 ÷ 總次數」,其實很不公平。舉例來說:測了 10 次全部成功的站(100% 成功率),在統計上不見得比測了 10,000 次、成功 9,900 次的站(99% 成功率)更可靠。

為了解決小樣本偏誤,我們採用 Wilson 信賴區間的下限作為評分依據:

Score = (p̂ + z²/(2n) - z × √(p̂(1-p̂)/n + z²/(4n²))) / (1 + z²/n)

(p̂ 為實際觀測到的成功率,n 為樣本總數,z 為 95% 信賴水準下的常態分位數)

採用這套演算法後,樣本數少或測試時間短的中轉站會自動被扣分,排出來的排行榜自然更有公信力。

五、自動化監控架構:探針如何運作?

落實到實際架構上,我們放棄了單機跑腳本的做法,建置了一套多節點協同運作的探針系統:

[多區域探針(AWS 美西 / GCP 東亞 / 歐洲)]
       │
       ├──> [定頻 & 突發並行流量產生器] ──> [中轉站 API 代理層] ──> [上游 API/帳號池]
       │                                       │
       └──< [SSE 協定解析器 & 狀態機] <────────┘
               │
               ├──> [TimescaleDB / Prometheus(微秒級指標寫入)]
               └──> [信賴區間評分 & 異常自動歸因引擎]

1. 分散式探針部署

我們在 AWS 美西、GCP 東亞(香港/東京)以及歐洲節點都部署了輕量探針,透過跨地區的並行請求,一眼就能看出延遲和錯誤究竟是中轉站自己的代理節點卡住,還是 OpenAI/Anthropic 官方服務本身的波動。

2. 底層 Socket 狀態機

探針送出請求後,會啟動 Socket 狀態機逐幀打點:

  • CONNECTING:記錄請求送出的時間點 t0;
  • FIRST_BYTE:收到第一個 SSE Chunk,記錄 TTFT = t1 - t0;
  • STREAMING:即時計算 Chunk 抵達間隔、TPS 以及流量抖動率(Jitter);
  • COMPLETED:檢查封包是否完整結束、有沒有 [DONE] 標記,以及 JSON 結構是否合格。

3. 異常自動歸因

探針抓到異常錯誤後,歸因引擎會自動分類:

  • 閘道當機:回傳 502 Bad Gateway / 504 Gateway Timeout ──> 直接判定為中轉站本身的 Nginx/Envoy 節點掛了。
  • 帳號池見底:回傳 429 Too Many Requests / 401 Unauthorized ──> 判定為中轉站下游的並行控制沒做好,或是上游金鑰的餘額直接用完了。
  • 中介軟體作怪:回傳 200 OK,但傳輸中途斷開或解析失敗 ──> 判定為中轉站自己寫的扣款/Prompt 攔截中介軟體發生緩衝區溢位而崩潰。

六、選型老實話與避雷總結

如果您正打算挑選中轉站,聽我一句勸,牢記這 3 條避雷法則:

  1. 別相信單次測試:一定要做橫跨白天與夜晚、至少連續 3–7 天的取樣,重點觀察夜間尖峰時段(21:00 - 01:00)的 P95 延遲和成功率。
  2. 測試必須開啟串流(Stream):非串流請求極具欺騙性,會把首 Token 延遲、中介軟體緩衝卡頓和中途斷流這些大雷全部掩蓋掉。
  3. 天下沒有白吃的午餐:價格低得離譜的中轉站,背後很可能是共用帳號池、劣質代理節點,甚至拿便宜的開源模型套殼冒充 Opus 或 GPT-4o。