延遲預算分配:從使用者體驗反推每一段的上限
先決定使用者能忍受多久,再把時間分配給各個環節。
多數團隊的做法是:把系統做出來,量一下延遲,然後說「就這樣吧」。正確的做法相反——先訂出體驗目標,再反推每個環節的預算。
體驗門檻的參考值
- 100ms 以內:感覺像即時反應。
- 300ms 以內:流暢,使用者不會分心。
- 1 秒以內:可接受,但已能感知等待。
- 超過 3 秒:需要明確的載入回饋,否則使用者會懷疑壞掉。
- 超過 10 秒:必須改成非同步流程,不要讓使用者盯著等。
一個 RAG 問答的預算分配範例
目標:TTFT p95 < 1200ms
前端與網路往返 120ms
身分驗證與權限查詢 40ms
查詢改寫(小模型) 180ms
向量檢索 60ms
關鍵字檢索(平行) —
重排 220ms
提示組裝 20ms
模型預填充(TTFT) 500ms
─────────────────────────────
合計 1140ms 餘裕 60ms超出預算時的處理順序
- 平行化:向量檢索與關鍵字檢索同時跑,不要序列。
- 去掉可選環節:查詢改寫在短問題上可以跳過。
- 降低規模:重排候選從 50 降到 20。
- 快取:熱門查詢直接回。
- 改成串流:讓 TTFT 成為使用者感知的時間,而非總時間。
用漸進呈現爭取時間
無法把總時間壓下來時,可以改變「感知時間」:先在 200ms 內顯示「正在查詢 3 份相關文件」,再顯示文件標題,最後才串流答案。使用者全程有回饋,體感遠優於盯著轉圈圈。
要量 p95 不要量平均
# 每一段都要有自己的計時,且要能組合成完整的火焰圖
with span('rerank'):
ranked = rerank(q, cands)
# 匯總時看各段的 p50 / p95 / p99,找出長尾來源
長尾往往來自少數環節
實務上 p99 的延遲常常集中在一兩個環節——通常是外部 API 或未設逾時的查詢。針對長尾優化的投資報酬率,往往比優化平均值高得多。
為每個環節設定獨立逾時,且總和要小於整體預算。沒有分段逾時,一個卡住的環節會吃掉全部預算。
訂閱後繼續閱讀全文
本篇為訂閱者專屬內容。訂閱後可取得下列權限:
- 解鎖全部內容權限
- 閱讀不限篇數
- 全站移除廣告
月卡
NT$240
開通 30 天
一次付清,開通 30 天
季卡
NT$620
開通 90 天
一次付清,開通 90 天,每天約 NT$7
年卡
NT$2,160
開通 365 天
一次付清,開通 365 天,每天約 NT$6
一次性付款,付款成功後立即開通,到期自動結束,不會再次扣款,也不需要取消訂閱。
立即訂閱
金額均為新臺幣(TWD),即實際扣款金額,不另收手續費
支援信用卡 · Apple Pay · Google Pay · WebATM · ATM 轉帳
購買須知與退款政策