開源工具 LLM API Test,從瀏覽器實測 API 速度與模型真偽

LLM API Test 是開源的瀏覽器端 API 測速工具,從你這條網路實測 OpenAI 相容端點的首字延遲、輸出速度與成功率,並用五個行為探針快篩模型真偽。實測發現串流正常但缺 finish_reason 會被嚴格判成 0% 成功率,token 數以字元除以四估算,預設還會把測試摘要同步到作者的 Cloudflare Worker,金鑰以明文存在瀏覽器,測之前先把這些口徑看清楚。

用 AI 摘要這篇文章:

LLM API Test 是一份 MIT 授權的開源靜態網頁工具,把大模型 API 的速度測試整包搬進瀏覽器:你填入端點網址與金鑰,它直接從你的瀏覽器發請求,記下首字延遲、輸出速度與成功率,今年八月的大改版還加上了模型真偽檢查,用五個行為探針抽查端點是不是真的在跑宣稱的模型。

我把官方儲存庫原樣架在本機,用一個自己架的 OpenAI 相容測試端點跑了三個模型各一輪:串流正常的那個記到 153ms 首字延遲、55.29 tokens/s、成功率 100%;另一個串流內容完全正常、只是回應裡少了 finish_reason 欄位的端點,被它判成失敗,統計表上的成功率直接掛 0%。這一冷一熱就是這工具的性格:量測很直接,判分很嚴格,而且它量的永遠是從你這條網路出發的成績單。

LLM API Test 自架版測試結果與統計表:三個模型的首字延遲、輸出速度與成功率,缺 finish_reason 的端點成功率為 0%Pin
自架實測結果:正常串流記 153ms 與 55.29 tokens/s,缺 finish_reason 的端點被嚴格判分成 0% 成功率。

一分鐘自架:整個工具就是幾個靜態檔

儲存庫 clone 下來,用 python3 -m http.server 起個靜態伺服器就能用,不需要安裝任何套件,沒有後端、沒有資料庫。要放到長期網址也簡單,丟上 Vercel、Netlify 或 GitHub Pages 都行,官方說明還附了一份極簡的 Dockerfile。頁面上依序填:協定(OpenAI 相容或 Gemini 兩種,自訂端點靠改填網址達成)、API 網址、金鑰、模型名稱一行一個、測試提示詞、要跑幾輪,按開始測試就動了。

測試是逐列執行的:模型乘以提示詞乘以輪次,一列一列跑,每列之間停 0.1 秒。README 上寫了 Concurrency 平行處理,但我翻遍目前版本的程式碼與設定介面,沒有任何並行選項,文件比功能先寫了半步。想拿它做併發壓力測試的人要有心理準備:得自己改程式碼。跑完的結果可以匯出 CSV,八個欄位含提示詞、輪次、首字延遲、速度、錯誤訊息與狀態,拿去試算表做追蹤很夠用。

輪數建議不要客氣:一輪是樣本,五輪才是趨勢。同一個模型在不同時段的表現可以差到有感,把測試分散在早上與深夜各跑一輪再比。要注意 CSV 本身沒有時間欄,每次匯出時自己記下時段,或靠頁面內建的歷史紀錄補時間戳,比單看一次分數更能反映這個端點在你生活時區裡的真實脾氣。歷史紀錄存在瀏覽器的 localStorage,換電腦不會跟著走,要長期追蹤就固定在同一台機器上跑,或每輪都把 CSV 存下來。還有個小細節:歷史紀錄的時間格式在程式裡寫死了中國區格式,就算切到英文介面,歷史時間戳也會長成中文區的樣子。

看數字之前先對齊三個口徑

它的三個核心讀數都寫在原始碼裡,演算法很誠實,但介面上沒有半句提示,第一次看的人很容易誤讀。

  • token 數是估算出來的。程式把字元長度除以四當成一個 token,註解自己承認這是給英文用的粗略近似。中文一個字實際要花一到數個 token(依模型分詞器而異),這個估算法會把中文輸出的速度壓低好幾倍。拿來比較兩個模型誰快沒問題,但數字經不起換算成帳單上的 token 計費。
  • 速度的分母含首字延遲。tokens per second 是拿總 token 數除以「從請求發出到串流結束」的總時間,首字等得越久,速度數字就被拉得越低。它跟廠商規格表上那種純解碼階段的速度不是同一個口徑,兩個欄位並不是互相獨立的指標,看趨勢比看絕對值有意義。
  • 成功的定義很嚴。串流結束時回應裡必須帶著 finish_reason,OpenAI 端點接受 stop 或 length,Gemini 端點接受 STOP 或 MAX_TOKENS,其他情況一律判失敗,錯誤欄會寫明原因。

每次請求固定帶 1000 token 的輸出上限,所以單列測試的成本可以被預估,拿來長期抽測不會失控。

串流正常也判 0%,嚴格判分反而是抽查的好東西

那個被判 0% 的端點值得多講兩句。它把內容照樣流出來,畫面上的結果欄看得到全文,從使用者角度「有回應」,但工具照樣判死,理由只有一行:Invalid finish_reason: missing。

這種嚴格在真實世界是有用的。部分轉售型端點可能悄悄截斷長回應,或透過不標準的代理層把收尾欄位弄丟,一般對話介面看不出來,跑個幾輪統計就現形。把成功率跟首字延遲放在一起看,你等於同時拿到了這個端點的速度樣本與可靠度樣本,這正是抽測、轉換供應商之前最該有的兩件事。如果你的服務押在某個端點的可用率上,這種逐列判分又帶時間戳的紀錄,也是把「感覺最近常卡」變成具體數字的最省事方法。

五個行為探針:同一個頁面上的模型真偽快篩

八月的新功能把它從測速工具往前推了一步。按下檢測鈕,它會對你宣稱的模型連發五個小探針:請它算 17 乘 23、照抄三個字元、回一段緊湊 JSON、問一篇不存在的 1843 年論文 DOI(正確答案是不存在),再加上請模型自報家族。每個探針溫度設 0、輸出上限 80 token,跑一輪的成本低到可以忽略。

判分加總起來滿分 90:回應的 model 欄位跟宣稱名稱對得起來加 30 分、對不上倒扣 20 分;自報家族一致加 20 分、自報成別家倒扣 20 分;四個行為題各 10 分。70 分以上判「與聲明一致」,低於 40 分判「疑似模型不匹配」,中間是不確定。

我用兩個對照的模擬端點實測:誠實的那個拿滿 90 分,六項全過;另一個宣稱 A 模型、實際回 B 模型,還自報成別家家族、算錯算術、掰了一個假 DOI,拿 0 分,六項全勾。判讀與分數都如實呈現,沒有灰色地帶。

LLM API Test 模型真偽檢查結果:謊報模型的端點被判疑似模型不匹配 0 分,六項探針證據全數列為異常Pin
模型真偽檢查實測:宣稱 A 模型、實際回 B 模型的端點拿 0 分,六項證據全勾。

工具自己也把話講在前頭:介面上的提醒寫著這種行為檢測只能估計一致性,不能證明端點一定提供了指定模型,探針會消耗一點 API 額度,結果是估計值。專案檔案裡也註明這套做法參考了三個 MIT 授權的模型指紋研究。兩個要知道的邊界:Gemini 端點若不回 modelVersion 欄位,程式會直接拿宣稱名稱當回傳值,這項對帳會自動通過;就行為探針的機制推敲,蒸餾模型或掛了特殊系統提示的端點,也可能只拿到不確定的結論。

解讀分數時記得一件事:回應裡的 model 欄位本來就是端點自己填的,配對成功不等於真貨;反過來,疑似不匹配也不必然是詐欺,有些正規服務會把請求路由給同家族的另一個版本。把這個分數當篩選的第一道關,不要當判決書,有疑慮再拿同一組探針多跑幾次、或換不同提示詞交叉驗。

預設會對外講話:作者的 Worker 與 Google Analytics

純靜態不等於對外安靜。我把自架版載入的瞬間側錄了一次網路請求,對外對象就三個:Google Tag Manager、Google Analytics,以及作者自己部署的 Cloudflare Worker。前兩者寫在儲存庫的 index.html 裡,自架版會原封不動繼承,在意的人要自己拔掉。

那個 Worker 負責雲端歷史紀錄,預設勾選同步。測完一輪,它會把摘要連同完整的端點網址字串一起送出:用戶識別碼、協定、模型清單、輪數、每列的時間、速度與狀態,以及提示詞的 SHA-256 雜湊。金鑰與提示詞原文都不在上傳之列,Worker 端入庫時也只保留網域、不留完整網址;紀錄以識別碼的雜湊隔離,只有本人列得到,頁面上也給了刪除鍵。取消同步勾選之後,我實測就不會再上傳。

但有個小機關要知道:載入頁面時它本來就會向那個 Worker 發一次查詢歷史的請求(帶著存在 localStorage 的識別碼),而且就算把雲端網址欄清空,程式也會自動補回預設值。也就是說,取消勾選關掉的是上傳,不是連線。識別碼是隨機 UUID,不涉及帳號,但企業內網或隱私要求嚴格的環境,這一段行為要先知道。

金鑰的去向:明文 localStorage 與一條主控台日誌

金鑰只在瀏覽器與你填的端點之間流動,工具沒有後端可以轉交,這個設計乾淨。儲存方式則沒這麼體面:設定連同金鑰以明文存在瀏覽器的 localStorage,跨工作階段留著,不會因為關掉分頁就消失(歷史紀錄倒是刻意不含金鑰,程式註解寫明是設計決策)。另外 Gemini 路徑會把含金鑰的請求頭寫進瀏覽器開發者主控台的日誌,共用電腦或錄影示範時避開它。

實務建議很簡單:拿拋棄式的限額金鑰來測,測完就撤銷;要把金鑰交給同事設定時,走 DropLock 這類免後端的端到端加密傳遞工具,不要貼在訊息軟體裡。這套自備金鑰、瀏覽器直連的邊界,跟自備 Gemini 金鑰直連的 SkidHomework、把免費額度收進單一端點的 FreeLLMAPI 是同一個思路:資料與金鑰只進你自己信任的那一段。

示範站比儲存庫舊,三種取得方式選哪個

這工具現在三個入口,版本不一致是第一個坑。官方示範站 llmapitest.com 是舊版,頁面上沒有模型真偽檢查、也沒有雲端歷史;GitHub Pages 上的部署才有完整新功能;clone 儲存庫自架則永遠是最新版,也是長期最保險的做法。順帶一提,OpenAI 與 Gemini 官方端點都允許瀏覽器跨來源直呼(我對兩個端點做了預檢請求實測),所以官方端點開了就能測;少數沒開跨來源的中繼端點會直接失敗,那是端點的設定問題,不是工具壞了。

誰會用到它:要換模型或換供應商前想拿到「從我這條網路」的實測數字的人;買了轉售型額度想驗證是不是真貨的人;以及想長期追蹤某個端點穩定度的開發者。網路路徑對 AI API 延遲的影響是雙向的,把流量改走 Cloudflare 骨幹的 Xget 是從傳輸端加速,這工具則是從量測端告訴你現在的路徑到底多快,兩件事剛好互補。介面有七種語言,中文是簡體,沒有繁體版。

授權與專案狀態

MIT 授權,44 星,由一位開發者獨力維護,提交全出自同一人。專案 2025 年 6 月 26 日建立,示範站的域名同一天註冊、已繳費到 2027 年中,今年內移入 zgrai.com 組織名下,最後一次推送是 2026 年 8 月 23 日,模型真偽檢查就是那波改版進來的。一人專案的好處是決策快、沒有商業包袱,風險是公車指數為一,好在它是靜態檔,clone 下來就是你的,永遠可以自己跑。儲存庫的 package.json 裡 homepage 欄位寫著另一個未註冊的域名,算是這種專案常見的小瑕疵。

回到開頭的判斷:拿它測出來的數字比大小、追趨勢、抓不可靠端點,值得;拿它換算計費、或當成模型真偽的鐵證,不行。把口徑對齊之後,它是一把很便宜的尺,專門量「我的網路到模型之間」這段距離;速度與真偽都驗完,若還想看清帳單上的錢花去哪,CodeBurn 把 AI 帳單拆成模型與專案明細,剛好補上第三個角度。

Sliven 褚崇名
Sliven 褚崇名

每日分享科技新知、免費資源以及 WordPress、虛擬主機相關主題,任何問題歡迎在科技月球下方留言,或是發送 Email 至 [email protected] 與我聯繫。

文章: 1061

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *


Share to...