<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>SLO on YennJ12 Engineering Blog</title><link>https://yennj12.js.org/yennj12_blog_V4/tags/slo/</link><description>Recent content in SLO on YennJ12 Engineering Blog</description><generator>Hugo -- gohugo.io</generator><language>en-us</language><lastBuildDate>Mon, 08 Jun 2026 11:00:00 +0800</lastBuildDate><atom:link href="https://yennj12.js.org/yennj12_blog_V4/tags/slo/feed.xml" rel="self" type="application/rss+xml"/><item><title>FDE 面試準備指南（四十一）：RKK 實戰——分散式 AI 系統的故障排查：結構化診斷框架與五種常見失效模式</title><link>https://yennj12.js.org/yennj12_blog_V4/posts/fde-interview-guide-part41-troubleshooting-zh/</link><pubDate>Mon, 08 Jun 2026 11:00:00 +0800</pubDate><guid>https://yennj12.js.org/yennj12_blog_V4/posts/fde-interview-guide-part41-troubleshooting-zh/</guid><description>「AI 系統出問題了」不是問題描述，是症狀描述。
在沒有找到根因之前，任何修復都是猜測。
結構化的故障排查不是把所有可能都試一遍，
而是用最少的資訊快速縮小到一個節點。
面試情境 面試官：「你們的 AI 客服系統，今天早上 9 點開始，客戶回報：系統變慢了，有時候會給出奇怪的答案。你不在現場，只能遠端處理。請一步一步說明你的排查思路，以及你平時會怎麼設計可觀測性來讓這類問題更快被找到。」
一、AI 系統故障排查的特殊性 傳統系統 vs AI 系統的故障特性對比： 維度 傳統系統 AI 系統 ────────────────────────────────────────────────────────────── 確定性 相同輸入 = 相同輸出 LLM 輸出有隨機性，問題可能間歇出現 錯誤信號 明確 Error Code（500/404） 品質問題沒有 Error Code，只有「感覺不對」 根因數量 通常在代碼或配置 分佈在：模型、Retrieval、Tool、基礎設施 「正確」定義 有明確的正確答案 需要評估，不是二元對錯 ────────────────────────────────────────────────────────────── 最重要的 AI 特有洞察： ┌──────────────────────────────────────────────────────────────┐ │ Retrieval 失敗 → 「奇怪的答案」 │ │ │ │ Vector Search 返回 0 個結果 │ │ ↓ │ │ LLM Context 是空的 │ │ ↓ │ │ LLM 沒有 Context，靠「自己的知識」猜測 │ │ ↓ │ │ 症狀：「答非所問」「答案不基於我們的資料」 │ │ Error Log：沒有任何錯誤 ← 這就是難以發現的原因 │ │ │ │ 只有 Trace 才能發現： │ │ vector_search Span → result_count=0（返回 0 結果） │ └──────────────────────────────────────────────────────────────┘ 三個常見的排查誤區： 誤區 1：「LLM 模型一定有問題」 → 不一定。延遲問題通常是基礎設施；品質問題可能是 Retrieval 失敗 誤區 2：「昨天還好，一定是昨晚的部署造成的」 → 不一定。流量模式改變（如特定類型查詢增多）也能觸發潛在問題 誤區 3：「重啟一下試試」 → 可能暫時緩解（Cold Start 問題除外），但根因沒找到必定再發 二、三個可觀測性成熟度階段 ╔══════════════════════════════════════════════════════════════╗ ║ Phase 1：基礎可觀測性（POC / 初期上線） ║ ║ 「能知道系統壞了」 ║ ╚══════════════════════════════════════════════════════════════╝ 元件： ├── 結構化日誌（JSON 格式，帶 timestamp、level、service 欄位） ├── 基本 Metrics（Error Rate、P50 Latency、Uptime） └── 簡單 Alert（Error Rate &amp;gt; 5% → 發 Email） 能解決的問題： ├── 「系統是不是掛了？」（Uptime 告警） └── 「有沒有大量錯誤？」（Error Rate 告警） 無法解決的問題： ├── 「哪個 Step 慢？」（沒有 Trace） └── 「品質退化了嗎？」（沒有 Eval 指標） ╔══════════════════════════════════════════════════════════════╗ ║ Phase 2：生產級可觀測性（正式上線後） ║ ║ 「能知道系統為什麼慢，慢在哪裡」 ║ ╚══════════════════════════════════════════════════════════════╝ 新增元件（在 Phase 1 基礎上）： ├── Distributed Tracing（OTel + Cloud Trace） │ 每個 LLM 呼叫、Tool 呼叫、Vector Search 都有獨立 Span ├── 完整 Metrics 儀表板 │ P50/P95/P99 延遲、Token 消耗趨勢、快取命中率、Error Rate by type ├── 告警精細化 │ P95 &amp;gt; 5s 持續 5 分鐘 → PagerDuty │ Error Rate &amp;gt; 1% 持續 2 分鐘 → Slack └── 日誌結構化增強（加入 trace_id，可與 Trace 關聯） 能解決的問題： ├── 「哪個 Span 是延遲瓶頸？」（瀑布圖） ├── 「哪個 Tool 最常失敗？」（tool.</description></item></channel></rss>