<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Observability on YennJ12 Engineering Blog</title><link>https://yennj12.js.org/yennj12_blog_V4/tags/observability/</link><description>Recent content in Observability on YennJ12 Engineering Blog</description><generator>Hugo -- gohugo.io</generator><language>en-us</language><lastBuildDate>Sat, 04 Jul 2026 12:00:00 +0800</lastBuildDate><atom:link href="https://yennj12.js.org/yennj12_blog_V4/tags/observability/feed.xml" rel="self" type="application/rss+xml"/><item><title>Kubernetes Autoscaling Complete Guide (Part 4): Monitoring, Alerting &amp; Threshold Tuning</title><link>https://yennj12.js.org/yennj12_blog_V4/posts/kubernetes-autoscaling-complete-guide-part4-monitoring-alerting/</link><pubDate>Sun, 09 Nov 2025 18:00:00 +0800</pubDate><guid>https://yennj12.js.org/yennj12_blog_V4/posts/kubernetes-autoscaling-complete-guide-part4-monitoring-alerting/</guid><description>Part 4 of the Kubernetes Autoscaling series: Complete guide to monitoring EKS autoscaling with Prometheus and Grafana. Includes CDK setup, alerting rules, custom dashboards, and threshold tuning strategies for production-grade observability.</description></item><item><title>FDE 面試準備指南（十一）：RKK 實戰——AI Agent 線上除錯與故障排除</title><link>https://yennj12.js.org/yennj12_blog_V4/posts/fde-interview-guide-part11-agent-debugging-zh/</link><pubDate>Wed, 03 Jun 2026 10:00:00 +0800</pubDate><guid>https://yennj12.js.org/yennj12_blog_V4/posts/fde-interview-guide-part11-agent-debugging-zh/</guid><description>Agent debugging 和傳統程式 debug 的本質差異：
傳統程式出錯，你找 stack trace。
Agent 出錯，LLM 的「決策過程」是不透明的——你找不到 stack trace。
所以你必須在設計時就把觀測能力建進去，而不是出問題後再想怎麼查。
一、核心問題：為什麼 Agent 難 debug 傳統程式： Input → [確定性邏輯] → Output ↑ 出錯有 stack trace Agent： Input → [LLM 決策] → [Tool Call] → [LLM 決策] → ... → Output ↑ ↑ 決策過程不透明 中間狀態沒有自動記錄 三個讓 Agent debugging 特別難的原因：
非確定性：同樣的 input 可能產生不同的執行路徑 多步驟：一個錯誤可能在步驟 1 發生，但直到步驟 8 才顯現 工具依賴：問題可能在 LLM 層、工具層、還是 data 層——不好定位 二、系統全貌：觀測性架構 解決思路：在 Agent 的每個關鍵節點插入觀測點。
用戶請求 │ ▼ ┌──────────────────────────────────────────┐ │ Agent Execution │ │ │ │ ┌─────────┐ ┌──────────────────┐ │ │ │ LLM │ │ Tool Gateway │ │ │ │ │ ←→ │ (instrumented) │ │ │ └─────────┘ └──────────────────┘ │ │ │ │ │ │ ▼ ▼ │ │ ┌──────────────────────────────────┐ │ │ │ Trace Collector │ │ │ │ 每一步的 thought/action/result │ │ │ └──────────────────────────────────┘ │ └──────────────────────────────────────────┘ │ ▼ ┌─────────────────────────────────────────────┐ │ Observability Stack │ │ │ │ ┌──────────┐ ┌──────────┐ ┌──────────┐ │ │ │ Metrics │ │ Traces │ │ Logs │ │ │ │ (Grafana)│ │(Langfuse)│ │(Cloud │ │ │ │ │ │ │ │ Logging) │ │ │ └──────────┘ └──────────┘ └──────────┘ │ │ │ │ │ │ │ ▼ ▼ ▼ │ │ 系統健康狀態 單次請求路徑 詳細事件記錄 │ └─────────────────────────────────────────────┘ │ ▼ ┌─────────────────────────────────────────────┐ │ Alerting Layer │ │ threshold breach → PagerDuty / Slack alert │ └─────────────────────────────────────────────┘ 三、觀測性三層：各層收集什麼 Layer 1：Metrics（系統健康） 關鍵指標 Dashboard： 延遲 成本 品質 ───────────── ────────────── ────────────── TTFT p50: 450ms input tokens/req: 2500 loop_rate: 0.</description></item><item><title>FDE 面試準備指南（十二）：RKK 實戰——AI Agent 統計評估與品質量化</title><link>https://yennj12.js.org/yennj12_blog_V4/posts/fde-interview-guide-part12-agent-evaluation-zh/</link><pubDate>Wed, 03 Jun 2026 11:00:00 +0800</pubDate><guid>https://yennj12.js.org/yennj12_blog_V4/posts/fde-interview-guide-part12-agent-evaluation-zh/</guid><description>你怎麼知道 Agent 可以上線？
直覺不算，「感覺還不錯」不算。
FDE 的工作是把感覺轉成數字，把數字轉成信心——讓客戶的工程團隊能基於證據做決定。
一、核心問題：「夠好」的標準是什麼 Agent 評估的難點不是「怎麼算分」，而是「對誰問什麼問題，要達到什麼分才算夠好」。
三個不同維度的「夠好」：
評估的三個維度（缺一不可） ┌───────────────────┐ ┌───────────────────┐ ┌───────────────────┐ │ 效能（Performance）│ │ 品質（Quality） │ │ 業務（Business） │ │ │ │ │ │ │ │ 快不快？ │ │ 對不對？ │ │ 有沒有用？ │ │ 貴不貴？ │ │ 準不準？ │ │ 用戶滿不滿意？ │ │ │ │ │ │ │ │ tokens/sec │ │ Faithfulness │ │ Task completion │ │ p95 latency │ │ Relevance │ │ User retention │ │ cost/request │ │ Groundedness │ │ Escalation rate │ └───────────────────┘ └───────────────────┘ └───────────────────┘ ↑ ↑ ↑ 系統層關心 工程師關心 客戶關心 只看品質、不看效能：上線後延遲爆炸。</description></item><item><title>FDE 面試準備指南（十九）：RKK 實戰——Multi-Agent 系統的統計評估與細粒度追蹤</title><link>https://yennj12.js.org/yennj12_blog_V4/posts/fde-interview-guide-part19-multiagent-eval-tracing-zh/</link><pubDate>Thu, 04 Jun 2026 12:00:00 +0800</pubDate><guid>https://yennj12.js.org/yennj12_blog_V4/posts/fde-interview-guide-part19-multiagent-eval-tracing-zh/</guid><description>評估 RAG 系統：一個問題進去，一個答案出來，量化兩者的關係。
評估 Multi-Agent 系統：一個問題進去，4 個 Agent 跑了 10 次工具，最後出來一個答案。
中間任何一個環節出了問題，你都看不到——除非你事先設計好追蹤架構。
面試情境 面試官： 「這是一個由 4 個 Agent 組成、包含 10 次 Tool-calling 的複雜工作流。客戶說最終答案正確率很低。你如何建立統計評估管線？如何進行 Granular Tracing 抓出是哪個 Agent 或哪次 Tool-calling 出問題？」
一、核心問題：Multi-Agent 的評估為什麼比 RAG 難一個量級 RAG 評估的輸入/輸出模型： Input: Query ↓ [Single Pipeline] ↓ Output: Answer 評估點：3 個指標（Context Relevance, Faithfulness, Answer Relevance） 定位問題：要麼是 Retrieval，要麼是 Generation Multi-Agent 評估的現實： Input: User Request ↓ Router Agent → 分派 ├── Agent A → Tool 1 → Tool 2 → Output A ├── Agent B → Tool 3 → Tool 4 → Tool 5 → Output B └── Agent C → Tool 6 → Output C ↓ Synthesis Agent → 整合 A + B + C → Final Answer 評估點： ├── Router 的分派決策對不對？（Routing Accuracy） ├── Agent A 的工具呼叫成功率？（Tool Success Rate） ├── Agent B 是不是最慢的瓶頸？（Latency by Agent） ├── Agent C 的輸出品質？（Output Quality by Agent） └── Synthesis Agent 整合時有沒有幻覺？（Faithfulness） 問題可能在 10 個地方的任何一個 二、可觀測性架構：三層追蹤設計 ┌──────────────────────────────────────────────────────────────┐ │ User Request 進入 │ │ 分配唯一的 trace_id（e.</description></item><item><title>FDE core topic - RAG Triad Metrics：上下文相關度、忠實度與答案相關度的可觀測性追蹤</title><link>https://yennj12.js.org/yennj12_blog_V4/posts/fde-core-concept-20-rag-triad-metrics-zh/</link><pubDate>Mon, 08 Jun 2026 10:00:00 +0800</pubDate><guid>https://yennj12.js.org/yennj12_blog_V4/posts/fde-core-concept-20-rag-triad-metrics-zh/</guid><description>RAG 系統沒有「準確率」這個單一指標——你需要三把尺同時量：檢索對了嗎？答案有根據嗎？答案回答了問題嗎？少量其中任何一把，幻覺或廢話就悄悄進入生產。
一、為什麼面試官問這個 面試官問 RAG 評估指標，真正在測試的是以下三件事：
你能否把「LLM 答得好不好」拆解成可量化的子問題。 弱答案：「我們用 ROUGE 或 BLEU 評估。」——這是序列生成指標，對 RAG 完全不適用，暴露了對 RAG 工作流程的根本誤解。 你是否理解幻覺的成因與偵測手段。 弱答案：「幻覺是 LLM 的問題，換模型就好。」——強答案會指出 Groundedness（忠實度）是反幻覺的核心指標，並說明如何用 NLI 模型逐句驗證。 你能否把評估指標接進可觀測性管道（OTel → Prometheus → Grafana），讓它在生產中持續追蹤而非一次性評測。 弱答案只談離線評測；強答案談 span attributes、rolling average dashboard、以及 alert threshold。 二、核心原理與技術深度 RAG 三角指標的數學基礎 RAG Triad 由 TruEra（現為 Snowflake 旗下）提出，對應 RAG pipeline 的三個環節：
使用者查詢 (Query) │ ▼ ┌──────────────────────┐ │ Retriever │ ← 指標 1：Context Relevance │ 向量搜尋 / BM25 │ retrieved chunks 與 query 的相似度 └──────────┬───────────┘ │ retrieved context ▼ ┌──────────────────────┐ │ LLM Generator │ ← 指標 2：Groundedness（忠實度） │ Gemini / GPT-4o │ answer 中每個宣稱是否有 context 支撐 └──────────┬───────────┘ │ generated answer ▼ ┌──────────────────────┐ │ Answer Evaluation │ ← 指標 3：Answer Relevance │ Embed / LLM Judge │ answer 是否真正回答了 query └──────────────────────┘ 指標 1：Context Relevance（上下文相關度） 定義：檢索到的 chunks 中，真正與查詢相關的比例。</description></item><item><title>FDE core topic - Structured Troubleshooting：自上而下分層排錯與 AI 系統觀測方法論</title><link>https://yennj12.js.org/yennj12_blog_V4/posts/fde-core-concept-22-structured-troubleshooting-zh/</link><pubDate>Mon, 08 Jun 2026 10:00:00 +0800</pubDate><guid>https://yennj12.js.org/yennj12_blog_V4/posts/fde-core-concept-22-structured-troubleshooting-zh/</guid><description>核心定義：Structured Troubleshooting 是一種「永不猜測、逐層消除」的診斷哲學——從用戶可見的症狀出發，沿著系統堆疊自上而下，在每一層用可量測的指標排除假說，直到根因被隔離為止。
一、為什麼面試官問這個 面試官測試的不是你背了多少 Cloud 工具名稱，而是你在凌晨三點 PagerDuty 響起時思考的順序是否可預測、可重複、可教給初級工程師。
測試診斷紀律：弱答案是「我會先看 logs」或「我會重啟服務」——沒有層次、沒有假說優先順序、沒有消除邏輯。強答案明確說出「Layer 4 quota 佔 80% 的 Agent 慢案例，我的第一個動作是打開 Vertex AI quota dashboard 看 TPM 消耗曲線，而不是翻 application log」。這句話背後是數據，不是直覺。 測試可觀測性設計意識：面試官想知道你是否在架構設計時就預埋了排錯所需的 trace / metric / log，而不是等到出事才臨時加 print()。可觀測性是一個設計決策，需要在 Day 1 就被納入 API 規格、tool wrapper 合約、和部署 checklist。 測試成本意識：每一層的排錯工具有不同的費用曲線（Cloud Trace ingestion $0.20/百萬 spans、外部 HTTP check 每分鐘觸發一次約 $0.01/check/月）。強候選人知道在什麼層次停下來，不做過度觀測，也知道哪些 error path 值得 100% 採樣。 弱回答：「我會看 error logs，然後試著在本地重現問題。」
強回答：「我先確認 TTFT 是否超過 3 秒的 SLO 閾值。如果是，立刻拉 Vertex AI quota dashboard 看 TPM 消耗曲線——因為 80% 的 slow-agent 案例根因在 Layer 4 quota 耗盡。確認 quota 正常後，我才打開 Cloud Trace，找哪個 tool call span 攜帶 status_code=429 或 latency_ms &amp;gt; 3000，這樣平均 15 分鐘內可以隔離根因。」</description></item><item><title>FDE 面試準備指南（二十八）：顧問實戰——生產事故診斷與客戶溝通語言</title><link>https://yennj12.js.org/yennj12_blog_V4/posts/fde-interview-guide-part28-incident-communication-zh/</link><pubDate>Thu, 04 Jun 2026 20:00:00 +0800</pubDate><guid>https://yennj12.js.org/yennj12_blog_V4/posts/fde-interview-guide-part28-incident-communication-zh/</guid><description>技術問題，工程師能解。
但客戶打電話來的時候，他不想聽技術。
他想知道：這個問題嚴不嚴重？會影響我的業務嗎？你什麼時候能修好？
FDE 要能同時給工程師一個診斷計畫，給客戶一個聽得懂的答案。
面試情境 面試官：「你的客戶在生產環境上部署了一個 RAG-based 問答 Agent。上線三週後，客戶的工程師傳訊息說：每天凌晨 2 點到 4 點，P95 延遲從平常的 800ms 跳到 4 秒，然後自己恢復正常。這個問題已經發生三天了，今天下午客戶的 CTO 要開檢討會。你怎麼處理？」
一、FDE 在這個場景中要做兩件事 事情 1：技術診斷 ├── 找出根因假設（2 小時內） ├── 確認診斷路徑（不停機） └── 給工程師可執行的排查步驟 事情 2：客戶溝通 ├── 在 CTO 會議前準備好說法 ├── 用業務語言描述問題嚴重性 └── 給出有承諾的 Next Step（不是「我們在看」） 兩件事要同時跑。不能只顧技術，忘了客戶在等； 也不能只顧安撫客戶，卻說不出診斷計畫。 二、技術診斷：系統化的假設樹 看到「特定時間窗延遲飆高，自動恢復」這個 Pattern，要有一個系統化的思考框架：
延遲異常 Pattern 分類： Pattern A：週期性（固定時間，固定症狀） → 最常見原因：排程任務衝突、快取過期、Token Refresh → 本題特徵符合：凌晨 2-4 點，每天發生 Pattern B：隨機性（不定時，難以復現） → 最常見原因：資源爭用、External API 不穩定 Pattern C：累積性（越用越慢，重啟恢復） → 最常見原因：記憶體洩漏、連線池耗盡 本題是 Pattern A。先排查週期性原因。</description></item><item><title>AI 工程從零開始｜Phase 14 Part 4：Agent 生產化 — 可靠性、可觀測性與成本控制</title><link>https://yennj12.js.org/yennj12_blog_V4/posts/ai-eng-from-scratch-phase14-part4-production-zh/</link><pubDate>Mon, 22 Jun 2026 00:00:00 +0800</pubDate><guid>https://yennj12.js.org/yennj12_blog_V4/posts/ai-eng-from-scratch-phase14-part4-production-zh/</guid><description>大多數團隊把 Agent 推上生產後就等著看它出問題； 正確的做法是在部署前設計可觀測性、預算上限、Guardrails； 差別不在於 Agent 多聰明，而在於系統多可靠； 沒有監控的 Agent，是一顆定時炸彈，不是產品。
面試情境 「你們的 AI Agent 在 staging 表現很好，但上線兩週後 token 費用暴增 400%，還出現幾次無限迴圈。你作為 tech lead，怎麼設計一個生產級的 Agent 系統架構來防止這些問題？請從可觀測性、成本控制、安全護欄三個維度說明，並說明你會如何科學地評估新 Agent 策略的效果。」
一、核心問題：Agent 生產化為什麼比模型部署難十倍 一般的 API 服務失敗模式很簡單：請求進來、計算、回應。延遲 p95 &amp;gt; 500ms 就告警，error rate &amp;gt; 1% 就回滾。背後的心智模型是「函數式」的：相同輸入，相同輸出，相同成本。
Agent 的失敗模式完全不同，它是「狀態機式」的：每一步的輸出決定下一步走哪條路。
問題一：非確定性執行路徑。 同一個輸入，Agent 可能走 3 步或 15 步。一個客服 Agent 回答「退貨政策」應該 2 步搞定，但如果 LLM 判斷需要查訂單狀態再查庫存再查物流，就變成 12 步、花了 $0.08 而非 $0.01。乘以每天 5,000 個請求，這個差距是 $350 vs $50，每月差 $9,000。
問題二：無限迴圈風險。 Agent 的 ReAct 迴圈沒有硬性上限時，一個錯誤的工具呼叫結果可能讓 Agent 不斷重試同一個動作。真實案例：一個資料分析 Agent 因為 SQL 工具回傳空結果，誤判為「需要更多查詢」，觸發 87 次 LLM 呼叫，花費 $23 才被手動停止。</description></item><item><title>FDE 面試準備指南（三十五）：RKK 實戰——生產級可觀測性設計：Granular Tracing、Span 樹與 Cloud Trace 整合</title><link>https://yennj12.js.org/yennj12_blog_V4/posts/fde-interview-guide-part35-granular-tracing-zh/</link><pubDate>Fri, 05 Jun 2026 13:00:00 +0800</pubDate><guid>https://yennj12.js.org/yennj12_blog_V4/posts/fde-interview-guide-part35-granular-tracing-zh/</guid><description>面試官問「P95 延遲突然升高，你怎麼辦？」
多數人說「我去看 Logs」。
強力雇用的答案是：「我打開 Trace，找哪個 hop 吃掉了時間。」
Log 告訴你發生了什麼；Trace 告訴你在哪裡、花了多少。
面試情境 面試官：「你幫客戶部署了一個 ADK Multi-Agent 系統：並行查三個後端、彙整後做決策。上線後客戶回報：有時候 2 秒，有時候 15 秒。你不在客戶現場。你如何在 5 分鐘內定位問題？你的可觀測性設計是什麼？」
一、為什麼 Log 不夠，需要 Trace Log 的問題：只記錄「發生了什麼」，不記錄「在哪裡、花了多久」 一個 Multi-Agent 請求的真實路徑： User Query │ ▼ Orchestrator Agent ├── LLM Call #1（決策） ?ms ├── ParallelAgent │ ├── Sub-Agent A ?ms │ │ ├── Embedding Call │ │ ├── Vector Search ← 瓶頸在這裡？ │ │ └── LLM Call #2 │ ├── Sub-Agent B ?</description></item><item><title>AI 工程從零開始｜Phase 17 Part 2：AI 系統可觀測性 — 當模型行為成為監控對象</title><link>https://yennj12.js.org/yennj12_blog_V4/posts/ai-eng-from-scratch-phase17-part2-observability-zh/</link><pubDate>Mon, 22 Jun 2026 03:00:00 +0800</pubDate><guid>https://yennj12.js.org/yennj12_blog_V4/posts/ai-eng-from-scratch-phase17-part2-observability-zh/</guid><description>大多數工程師把 LLM 呼叫當成黑箱：記錄 HTTP 狀態碼、回應時間，然後就沒了。 正確的做法是：追蹤每一個 Prompt 版本、每一次工具呼叫、每一個 Token 成本，並量化模型行為漂移。 傳統 APM 只告訴你系統「掛了沒」；AI 可觀測性要告訴你模型「答得好不好」。 沒有這層監控，你永遠不知道提示更新讓答案品質下降了 12%，還是模型供應商悄悄換了版本。
面試情境 面試官問：「你們的 RAG 問答系統上線後，客服主管反應『最近答案怪怪的』，但 p99 延遲和錯誤率都正常。你身為 SRE/AI 工程師，會怎麼設計可觀測性系統來定位這類問題？請說明你的 Traces 設計、漂移偵測機制，以及如何在成本和覆蓋率之間取得平衡。」
一、核心問題：AI 系統的可觀測性為什麼與傳統系統不同 傳統服務的可觀測性三支柱——Metrics、Logs、Traces——在 AI 系統上全都「不夠用」，但原因各不相同。
傳統系統的失敗模式是二元的：請求成功或失敗，HTTP 200 或 500，延遲高或低。失敗有明確的邊界。當資料庫 query 耗時 800ms，你知道哪裡壞了。
AI 系統的失敗模式是漸進的、語意的：
模型回傳 HTTP 200，但答案從準確滑向「有點對但不夠精確」 Prompt 被改了一個詞，召回率悄悄下降 8% 供應商在 2AM 更新基礎模型，語氣風格改變，用戶滿意度在 48 小時後才反映在 CSAT Token 用量因為對話上下文累積，每週成本靜靜地增長 15% 這就是為什麼 AI 可觀測性需要新的維度：
維度 傳統系統 AI 系統 品質訊號 Error rate, p99 latency 語意相似度、答案忠實度、幻覺率 版本追蹤 Code git SHA Prompt version + Model version + RAG index version 成本單元 CPU/Memory/Network Input tokens + Output tokens + Embedding calls 漂移型態 無（確定性系統） 概念漂移、分佈漂移、模型版本漂移 告警閾值 靜態（&amp;gt; 500ms alert） 動態（品質分數 7 日移動平均下降 &amp;gt; 5%） 面試官問的「答案怪怪的」就是典型的語意品質退化。系統層面一切正常，但輸出品質已悄悄崩潰。沒有 AI-native 可觀測性，這種問題的 MTTR 往往超過 3 天。</description></item><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><item><title>FDE 面試指南 Part 50：生產環境 GenAI 自動化評估管線與 LLM-as-a-Judge 漂移監控</title><link>https://yennj12.js.org/yennj12_blog_V4/posts/fde-interview-guide-part50-llm-judge-evaluation-zh/</link><pubDate>Mon, 08 Jun 2026 09:00:00 +0800</pubDate><guid>https://yennj12.js.org/yennj12_blog_V4/posts/fde-interview-guide-part50-llm-judge-evaluation-zh/</guid><description>多數工程師的做法：每次模型更新後，手動抽幾十筆對話，憑感覺評估品質有沒有退步。 問題是，樣本量不足無法代表真實用戶分佈，而且人工評估無法在 CI/CD 流程中自動執行。 正確的做法：建立三層自動化評估管線，用統計學方法精準抽樣 5% 送 LLM 裁判， 其餘 95% 走免費傳統指標，並在 Sigma 2 漂移時自動觸發 PagerDuty 警報。
面試情境 你的團隊正在維護一個 B2B SaaS 平台上的 RAG Agent，每天處理約 50 萬筆客戶支援對話。 上週你們將底層模型從 Gemini 1.5 Pro 升級至 Gemini 2.0 Flash，同時調整了 System Prompt。 產品團隊要求你在 48 小時內確認新系統的回答品質沒有惡化，並建立一套長期可用的 自動化觀測機制。你有 Vertex AI 的使用權限，預算受限，你會怎麼設計這套系統？
一、核心問題：為什麼 GenAI 的品質監控比傳統服務更難？ 傳統後端服務的品質監控相對直觀：HTTP 4xx/5xx 錯誤率、P99 延遲、資料庫查詢失敗數。 這些指標全都是客觀的、可計算的、接近零成本的。
GenAI 系統的品質卻天生是主觀的：一個回答是否「夠好」，取決於事實準確度、 語氣適切性、上下文相關性、甚至法律合規性。這帶來三個根本性挑戰：
挑戰一：評估本身就需要智慧 你無法用 if response == expected_answer 來評分自由文本。傳統 BLEU / ROUGE 指標 只能衡量字面重疊，無法判斷語意正確性。唯一可靠的裁判是另一個 LLM——但這就是 評估成本 ≥ 生產成本的陷阱：</description></item><item><title>Auto Agent System - Part 4 - 生產化之路:Langfuse 可觀測性、Docker 瘦身與 AWS 部署</title><link>https://yennj12.js.org/yennj12_blog_V4/posts/auto-agent-system-part4-production-zh/</link><pubDate>Sat, 04 Jul 2026 12:00:00 +0800</pubDate><guid>https://yennj12.js.org/yennj12_blog_V4/posts/auto-agent-system-part4-production-zh/</guid><description>「在我電腦上跑得起來」和「能給一群人用」之間,隔著四道牆: 你看得到它在做什麼嗎(可觀測性)?它打包起來多大、部署多快(image)? 它能自動擴縮、掛了會自己重啟嗎(部署)?誰能用、能用什麼由誰決定(權限)? 這一篇,就是 agent_auto_system 翻過這四道牆的過程。
前三篇我們把系統的「能力」講完了:架構(Part 1)、可靠性引擎(Part 2)、實戰任務(Part 3)。這一篇談的是另一個維度——生產化(productionization):讓這套系統能被真實地、多人地、可維運地跑起來。四個主題,對應四個 merged PR。
一、Langfuse 可觀測性:在唯一的漏斗上掛 trace 對應 PR #19:feat(harness): add Langfuse LLM-observability integration
Part 2 我們反覆強調:LLM 的「錯」不是當機,而是品質退化——HTTP 200,但答案是編的。你需要一種能看見「品質」的監控,這就是 LLM 可觀測性,而 Langfuse 是這個領域的代表工具。
這個 PR 最漂亮的地方,是它的 PR 描述本身就是一堂架構課:
「CrewAI 1.x 直接呼叫各家原生 provider SDK(不走 litellm),所以要把 Langfuse 掛在 executor——這個已經知道 model、tokens、cost、eval score、status 的唯一漏斗。」
拆解這句話為什麼重要:
很多人以為的 Langfuse 接法: 在「LLM 呼叫的那一行」自動攔截(靠 litellm 之類的中介層) 但 CrewAI 1.x 直接打原生 SDK,沒有那個中介層可攔 │ ▼ 聰明的做法:不在「呼叫點」攔,而在「執行點」記 │ ▼ executor 是所有任務的必經之路,而且它手上早就有: model + tokens + cost + eval score + status → 在這裡發一條 trace,一次到位、還帶品質分數 ┌─────────────────────────────────────────────────┐ │ executor.</description></item><item><title>Langfuse 入門 Part 4 — 監控與 Prompt 管理:把實驗成果變成生產循環</title><link>https://yennj12.js.org/yennj12_blog_V4/posts/langfuse-intro-part4-monitoring-prompt-management-zh/</link><pubDate>Tue, 30 Jun 2026 14:30:00 +0800</pubDate><guid>https://yennj12.js.org/yennj12_blog_V4/posts/langfuse-intro-part4-monitoring-prompt-management-zh/</guid><description>很多團隊把 prompt 當成「寫死在程式裡的字串」,改一個字就要改程式、跑 CI、重新部署。 也有很多團隊上線後從不看成本,直到月底收到一張嚇人的 API 帳單。 這篇講的就是讓 LLM 應用「可營運」的最後兩塊拼圖:看得見的監控,與管得動的 prompt。
一、從「會用」到「營運得起來」 Part 2 讓資料進來、Part 3 讓品質可評,這最後一篇處理的是長期營運:當你的 LLM 應用每天服務真實使用者,你需要兩件事——
┌─────────────────────────────────────────────┐ │ 監控(Monitoring) │ │ 「現在花多少錢?多慢?品質有沒有退化?」 │ ├─────────────────────────────────────────────┤ │ Prompt 管理(Prompt Management) │ │ 「改 prompt 不必改程式、不必重新部署」 │ └─────────────────────────────────────────────┘ 二、監控:LLM 應用要盯的三個維度 傳統服務盯 error rate、latency、throughput。LLM 應用在這之上,多了一個你絕不能忽略的維度:成本。Langfuse 的儀表板原生圍繞三個維度:
┌──────────┬──────────────────────────────────────┐ │ 維度 │ 為什麼要盯 │ ├──────────┼──────────────────────────────────────┤ │ 成本 Cost │ token 用量直接換算成 $$;一個爛 prompt│ │ │ 可能讓成本翻數倍而你毫無感覺 │ │ 延遲 Lat. │ LLM 呼叫是秒級的;哪一步拖慢、p95 多少│ │ 品質 Qual.</description></item><item><title>Langfuse 入門 Part 2 — 三行程式碼開始追蹤:SDK 整合與 Tracing 實戰</title><link>https://yennj12.js.org/yennj12_blog_V4/posts/langfuse-intro-part2-tracing-sdk-zh/</link><pubDate>Tue, 30 Jun 2026 13:30:00 +0800</pubDate><guid>https://yennj12.js.org/yennj12_blog_V4/posts/langfuse-intro-part2-tracing-sdk-zh/</guid><description>可觀測性最大的阻力,從來不是「值不值得」,而是「要改多少程式碼」。 Langfuse 的設計哲學是:讓你從「完全沒追蹤」到「完整 trace」,只需要加幾行——甚至一行。 這篇就帶你把第一個 trace 送上儀表板。
一、起手式:安裝與設定 Part 1 講完概念,這篇全是實作。先裝套件、設好金鑰。
1pip install langfuse 到 Langfuse Cloud(免費)或你自架的實例,建一個專案,拿到一組金鑰,放進環境變數:
1LANGFUSE_PUBLIC_KEY=&amp;#34;pk-lf-...&amp;#34; 2LANGFUSE_SECRET_KEY=&amp;#34;sk-lf-...&amp;#34; 3LANGFUSE_BASE_URL=&amp;#34;https://cloud.langfuse.com&amp;#34; # 自架的話填你的網址 SDK 會自動讀這些環境變數,所以程式裡通常不必硬寫金鑰。接下來有三種接法,由淺入深。
二、接法一:@observe 裝飾器(最省力) 最快的方式:在你想追蹤的函式上加一個 @observe() 裝飾器。它會自動把這個函式變成一個 observation,捕捉輸入、輸出、執行時間。
1from langfuse import observe, get_client 2 3@observe() 4def retrieve_docs(query: str) -&amp;gt; list[str]: 5 # 你的檢索邏輯 6 return [&amp;#34;doc1&amp;#34;, &amp;#34;doc2&amp;#34;] 7 8@observe() 9def generate_answer(query: str, docs: list[str]) -&amp;gt; str: 10 # 你的生成邏輯 11 return &amp;#34;答案...&amp;#34; 12 13@observe() # 最外層 → 這會是一個 Trace 14def handle_request(query: str) -&amp;gt; str: 15 docs = retrieve_docs(query) # 巢狀的 Observation 16 answer = generate_answer(query, docs) 17 return answer 18 19handle_request(&amp;#34;分析這份財報的風險&amp;#34;) 關鍵在於:巢狀的函式呼叫會自動形成巢狀的 observation 樹。 你不需要手動串接 parent/child——handle_request 成為 trace,裡面的 retrieve_docs 和 generate_answer 自動成為它的子 observation。這正是 Part 1 講的那棵樹,而你只加了三個裝飾器。</description></item><item><title>Langfuse 入門 Part 1 — 為什麼 LLM 應用需要可觀測性?核心概念與資料模型</title><link>https://yennj12.js.org/yennj12_blog_V4/posts/langfuse-intro-part1-concepts-zh/</link><pubDate>Tue, 30 Jun 2026 13:00:00 +0800</pubDate><guid>https://yennj12.js.org/yennj12_blog_V4/posts/langfuse-intro-part1-concepts-zh/</guid><description>傳統後端壞掉:噴 500、log 一條 stack trace、監控告警響——你馬上知道。 LLM 應用壞掉:回了一段「看起來很合理但其實是編的」答案,HTTP 200,沒有任何錯誤。 你的使用者知道它錯了,但你的系統不知道。這就是為什麼 LLM 需要一種全新的可觀測性。
一、傳統監控為什麼救不了 LLM 應用 先想一個問題:一個傳統 API 壞掉,你怎麼發現?
傳統後端 ───────────────────────────── 輸入 → 確定性邏輯 → 輸出 │ ├─ 壞了 → throw Exception → 500 → 告警響 └─ 對了 → 200 錯誤是二元的、確定的:不是對就是錯,壞了會噴例外。你的 APM(Datadog、Sentry)抓得到。
但 LLM 應用不是這樣:
LLM 應用 ───────────────────────────── 輸入 → Prompt → LLM(機率性) → 輸出 │ ├─ 幻覺(編造事實) → HTTP 200 ✅ ├─ 答非所問 → HTTP 200 ✅ ├─ 語氣不對/拒答 → HTTP 200 ✅ └─ 完美回答 → HTTP 200 ✅ 所有情況都是 HTTP 200。 沒有例外、沒有 stack trace、沒有錯誤碼。LLM 的「錯」不是當機,而是輸出品質的退化——而品質是連續的、主觀的、機率性的。傳統監控的整套工具(看 error rate、看 5xx)在這裡完全失效。</description></item><item><title>ChatPDF RAG 優化（三）：可觀測性與評估 —— Langfuse 追蹤、評估歷史、即時評分</title><link>https://yennj12.js.org/yennj12_blog_V4/posts/chatpdf-rag-optimization-part3-observability-eval-zh/</link><pubDate>Tue, 30 Jun 2026 11:00:00 +0800</pubDate><guid>https://yennj12.js.org/yennj12_blog_V4/posts/chatpdf-rag-optimization-part3-observability-eval-zh/</guid><description>多數 RAG 專案上線後,優化全憑「感覺答案變好了」。 但你說不出 faithfulness 是 0.6 還是 0.9,也不知道上次調 alpha 是讓 nDCG 上升還是下降。 這篇講的就是把「感覺」換成「數字」:追蹤每一次 LLM 呼叫、持久化每一次評估、即時評每一個答案——讓優化變成可被驗證的循環。
一、為什麼可觀測性是 RAG 的最後一哩 第一篇解決切塊與檢索品質,第二篇補上 production 防線。但還缺一塊:你怎麼知道這些優化真的有效?
RAG 的恐怖之處在於它「永遠會給出一個看起來合理的答案」。沒有量測,你根本分不清:
調了 hybrid_alpha,到底是變好還是變壞? 某個答案是基於檢索內容,還是 LLM 自己編的(hallucination)? 這次改動,整體 nDCG@k 的趨勢是上升還是下降? PR #4 補上三層可觀測性:
┌──────────────────────────────────────────────────────┐ │ 三層可觀測性 │ ├──────────────────────────────────────────────────────┤ │ 1. 即時聊天 每個回答附信心分數(faithfulness 等) │ │ 2. 評估工具 每次評估的彙總指標持久化,追蹤趨勢 │ │ 3. Langfuse 所有 LLM 呼叫被追蹤(延遲/token/成本) │ │ ── 設定才開,不設定零開銷 │ └──────────────────────────────────────────────────────┘ 二、Langfuse 追蹤:opt-in 且零開銷 設計原則:不設定 = 完全無感 可觀測性工具最怕的就是「為了觀測而拖慢主流程」。chatPDF 的 Langfuse 整合是完全 opt-in:沒設定環境變數時,它是一個 no-op,零開銷、零風險。</description></item><item><title>Building Centralized Grafana + Prometheus Monitoring with AWS CDK: Multi-Service Observability Platform</title><link>https://yennj12.js.org/yennj12_blog_V4/posts/centralized-grafana-prometheus-monitoring-aws-cdk/</link><pubDate>Sat, 17 Jan 2026 11:00:00 +0800</pubDate><guid>https://yennj12.js.org/yennj12_blog_V4/posts/centralized-grafana-prometheus-monitoring-aws-cdk/</guid><description>Comprehensive guide to architecting a production-ready centralized Prometheus + Grafana monitoring platform using AWS CDK that aggregates metrics from multiple services, clusters, and infrastructure components with federation, remote storage, and advanced alerting.</description></item><item><title>Building a Centralized Monitoring System with AWS CloudWatch and Grafana using CDK</title><link>https://yennj12.js.org/yennj12_blog_V4/posts/centralized-monitoring-system-aws-cloudwatch-grafana-cdk/</link><pubDate>Sun, 30 Nov 2025 14:00:00 +0000</pubDate><guid>https://yennj12.js.org/yennj12_blog_V4/posts/centralized-monitoring-system-aws-cloudwatch-grafana-cdk/</guid><description>🎯 Introduction In distributed systems running on AWS, observability is critical for maintaining reliability, debugging issues, and ensuring optimal performance. A centralized monitoring system provides:
Unified Visibility: Single pane of glass for all services, applications, and infrastructure Proactive Alerting: Detect and respond to issues before they impact users Performance Optimization: Identify bottlenecks and optimization opportunities Cost Management: Track resource utilization and spending patterns Compliance: Meet audit and regulatory requirements for logging Troubleshooting: Quickly diagnose and resolve production issues This comprehensive guide demonstrates how to build a production-ready centralized monitoring system using AWS CloudWatch and Grafana, deployed with CDK (TypeScript).</description></item><item><title>Building Production Kubernetes Platform on AWS EKS</title><link>https://yennj12.js.org/yennj12_blog_V4/posts/building-production-kubernetes-platform-aws-eks-cdk/</link><pubDate>Sat, 30 Aug 2025 15:19:09 +0800</pubDate><guid>https://yennj12.js.org/yennj12_blog_V4/posts/building-production-kubernetes-platform-aws-eks-cdk/</guid><description>Deep dive into architecting a comprehensive Kubernetes platform on AWS EKS with integrated data processing, monitoring, and observability using infrastructure as code.</description></item><item><title>Building Centralized Logging with OpenSearch and AWS CDK</title><link>https://yennj12.js.org/yennj12_blog_V4/posts/building-centralized-logging-opensearch-aws-cdk/</link><pubDate>Sun, 15 Dec 2024 14:30:00 +0800</pubDate><guid>https://yennj12.js.org/yennj12_blog_V4/posts/building-centralized-logging-opensearch-aws-cdk/</guid><description>Deep dive into architecting a production-ready centralized logging solution using OpenSearch, Kinesis Data Firehose, and AWS CDK for comprehensive Kubernetes cluster observability.</description></item></channel></rss>