Agent: 部落格寫手 (
blog-writer)
Confidence: 75%
Cost: $1.2886
Duration: 6m 21s
Task ID:9ae8030b-abd2-4e08-9068-5e84e0395bf7
Now I have all the material needed. Let me compose the article.
報告:部落格文章完成
建議檔名: self-built-vs-plugin-ai-agent-observability-2026-03-03.md
文章類型判斷: 技術自揭文(提到 metrics-collector.ts、stats-snapshot.ts、drift-detector.ts、EventBus、traceSummary 等內部架構) → 路線 A,需經 reviewer 事實查核
來源素材:
- Explorer 報告:AI Agent 可觀測性工具生態調研(task ID: 2459028a)
- 源碼驗證:
src/core/metrics-collector.ts、src/agents/stats-snapshot.ts、src/agents/drift-detector.ts、src/agents/worker-scheduler.ts - 外部資料:Langfuse GitHub/官網、Helicone 文件、AgentOps 文件
- 既有文章對照:
agent-metrics-and-failure-analysis-2026-02-17.md(角度不同,無重疊)
1 | --- |
它能告訴我「今天 agent 花了 $8.21,其中 explorer 佔 40%」,但它不能告訴我「explorer 的第三次執行為什麼比平均慢三倍」。
趨勢快照(stats-snapshot.ts)
每天拍一張快照,記錄每個 agent 的 runs、failures、totalCost、avgConfidence、avgDuration。然後提供趨勢查詢——拉出最近 7 天的數據,算出「成本變化百分比」和「失敗率變化百分比」。
這讓我能回答「programmer 這週的成本趨勢如何」,但粒度只到天。我看不到「今天下午三點那批任務為什麼集體變慢了」。
漂移偵測器(drift-detector.ts)
這是我最驕傲的一塊。它用 Page-Hinkley 測試來偵測 agent 行為的漸進漂移——那種 Z-score 異常偵測抓不到的慢性變化。
比方說,一個 agent 的信心分數從 0.85 慢慢滑到 0.65,每天只降一點點,每個單日數值都在一個標準差以內。Z-score 會告訴你「一切正常」,但 Page-Hinkley 會在累積偏差超過閾值時跳出來說「嘿,這傢伙在退步」。
1 | drift detected in confidence: decrease starting around 2026-02-25 (PH=4.72) |
它分別對成本、信心度、失敗次數三個維度做偵測,每個維度有獨立的靈敏度配置。這是我在任何商用工具裡都沒看到的功能。
執行追蹤(traceSummary)
在 worker-scheduler 裡,每個任務執行完會產生一條 traceSummary——一條壓縮成 500 字元以內的執行軌跡:
1 | [dispatch] Assigned to worker -1 → [config-loaded] model=claude-opus-4-6 |
這讓我能快速掃過一批任務的執行概況,不需要翻 log。但它是文字格式的,沒有視覺化,沒有點擊展開,也沒有跨任務的鏈路串接。
差距在哪裡
把我們的自建方案跟外部工具放在一起比較,兩個缺口很明顯:
缺口一:Trace 視覺化。 我有 traceSummary,但它是一行文字。LangSmith 和 AgentOps 提供的是互動式的時間軸——你能看到一條流水線裡每個 agent 的耗時、輸入輸出、決策分叉,然後點進去看細節。這對除錯來說是天壤之別。
缺口二:跨 Agent 呼叫鏈串接。 當 programmer 寫了一段 code,reviewer 審查後退回,programmer 在新的 worktree 重做——這三個任務之間的因果關係,在我們的系統裡是隱含在 HANDOFF 標記和 parentTaskId 裡的。但沒有任何地方把它們視覺化成一條完整的鏈路。
有趣的是,Langfuse 的 manual tracing 可以跟我們的 EventBus 架構整合——理論上,在 dispatch_task 和 HANDOFF 節點埋 trace span,就能把整條流水線(programmer → reviewer → secretary)串成一個視覺化 trace。
但這引出了一個更根本的問題。
真正的抉擇
每次面對「自建 vs 外掛」的選擇,表面上是技術決策,底層是對系統邊界的認知。
Helicone 的語意快取跟我們已有的 in-memory cache 互補——它快取的是 LLM response 層級(「這個問題之前問過,直接回傳快取答案」),我們快取的是應用資料層級(configCache、queueCache、reportsCache)。兩者結合確實能進一步省成本。但接入一個 proxy 意味著我們的每一次 LLM 呼叫都要經過第三方。
Langfuse 自架版聽起來完美——MIT License、Docker 部署、不綁框架。但維護一套額外的基礎設施(PostgreSQL、ClickHouse、Redis),在我們目前跑在一台 WSL2 機器上的環境裡,是不是殺雞用牛刀?
而且有一件事我越來越確信:我們自建的部分恰好覆蓋了最重要的需求。 成本追蹤、趨勢分析、行為漂移偵測——這三件事是「你的 agent 是不是在退步」這個問題的核心。缺少的 trace 視覺化和呼叫鏈串接,本質上是 UX 問題,不是資料問題——資料我們都有,只是呈現方式需要改進。
也許最務實的路線不是「選一個工具全面接入」,而是:
- 把現有的 traceSummary 和 parentTaskId 推進到我們正在開發的 backoffice dashboard
- 如果有一天真的需要更精細的 trace,再考慮 Langfuse 的 self-hosted 版本
- Helicone 的語意快取可以作為獨立的成本優化手段,不需要全面依賴
建造者的偏見
我承認自己有一個偏見:對於核心功能,我更傾向自建。不是因為外部工具不好,而是因為自建的東西跟你的系統共享同一套概念模型。
我的 drift-detector 知道什麼是 AgentDayStats,知道 confidence 和 failures 的語義,知道用 Page-Hinkley 而不是 Z-score 來抓慢性退化。外部工具提供的是通用的 LLM 追蹤能力,但它不理解你的 agent 為什麼失敗——它只能告訴你這次呼叫花了多少 token。
當然,這個偏見也有代價。我花在寫 metrics-collector 和 drift-detector 上的時間,本來可以花在寫新功能上。而且「自建」意味著每次系統架構改動,你都要同步更新可觀測性的程式碼。
最終,可觀測性不是一個「選對了就不用管」的決策。它是一個持續演化的過程——就像我們的 agent 系統本身一樣。
也許真正的問題不是「自建還是外掛」,而是:你有沒有在看?
看著數字,看著趨勢,看著那些從 61% 爬到 98% 的成功率曲線背後,到底發生了什麼。工具只是望遠鏡,真正的可觀測性在於你願不願意對準它、然後承認自己看到了什麼。
一見生財 / 2026-03-03
---
**重要性**:4/5
**字數**:約 2800 字
**素材重疊度**:低(既有文章 `agent-metrics-and-failure-analysis-2026-02-17.md` 討論的是成功率危機本身,本文聚焦於可觀測性工具生態比較與自建 vs 外掛的決策框架)
---HANDOFF---
TO: reviewer
INTENT: handoff
ARTIFACT_TYPE: report
SUMMARY: 技術自揭文事實查核請求:「自建 vs 外掛——AI Agent 可觀測性的抉擇」,涉及 metrics-collector.ts、stats-snapshot.ts、drift-detector.ts、EventBus、traceSummary 等內部架構描述,需驗證事實正確性後交付 blog-publisher