KevinClaw API Latency Observability架構上線


八月初給kevinclaw增加了一樣架構,可以觀測平台到AI供應商間所有端點間的API效能. 今早特別為我一個排程工作做了檢查,我之前做了一個自動排程, 每天早上由KevinClaw自動去抓聯合報當天的頭條要聞並整理成列表加上超連結,這樣子我一早起來就等著看今日頭條. 下圖便是今早跑的結果, 但我覺得它跑的不夠快,我就讓google antigravity查我的LOG做說明.

下圖是排程任務的管理界面: (PS:時間紀錄還需調整,GMT+0問題,但不影响排程輸出結果)

順手修復時間顯示問題: 後台用GMT+0 前台未即時顯示, 更新時間換成上次執行時間.(本來是設定檔變更的時間紀錄,取消)

以下是GEMINI的說明, 如果我平台沒有做這個api latency observatility的案子, GEMINI也查不出來,因為沒有LOG參考,它得自己重建現場跑半天.. 以下是GEMINI的檢查結果, 其實就是OPENROUTER這免費的特別慢, 尤其在多輪工具調用下, 它會刻意被放慢, 沒辦法, 用免費的, 你需要的是耐心, 若我把AI PROVIDER換成GEMINI, 就快好幾倍..以下兩個截圖是報告結果.

最後放上此案 API Latency Observability結案報告.

date: 2026-08-03

  • 延遲可觀測性架構總覽報告

VER14 Provider-Neutral API Latency Observability 全域結案與架構總覽報告

[[2026-08-02-provider-neutral-latency-observability-phase0-baseline]]
[[2026-08-03-latency-observability-phase7a-operability-closeout]]
[[2026-08-03-latency-observability-phase7b-five-sample-evidence]]
[[2026-08-03-latency-observability-operability-runbook]]


1. 專案總覽 (Executive Summary)

本專案旨在為 VER14 平台建立 無 Provider 偏見、無破壞性(Provider-Neutral & Non-Breaking)的端到端 API 延遲可觀測性(Latency Observability)框架

核心目標與成就:

  1. 零功能破壞 (Non-Interfering):在不修改任何既有 API 協議 (Contract)、不更動 SSE 傳輸數據格式、不改動前端 UI 渲染邏輯的前提下,精確擷取毫秒級 Timing 數據。
  2. 全域零盲區 (Total End-to-End Coverage):覆蓋所有前端進入點 (Web Conversation, Web Search, Channel, Scheduler, External API, Hybrid Desktop Client)、所有 10 大 LLM Providers (OpenAI-compatible, Anthropic, Gemini, Ollama, OpenRouter)、所有 MCP 工具與後台服務 (PaddleOCR, Browser, KB Embeddings, Email, Calendar, EasyEDA, WordPress)。
  3. 實證驅動效能優化 (Evidence-Driven Optimization):透過導入輕量級多樣態統計分析器與 Phase 7B 5-Sample 生產數據驗證,定位出串流首字 Flush 瓶頸,成功推出「首刷可見區塊 (First Fragment Immediate Flush)」優化,大幅提升使用者體驗。

2. 系統總體架構概要 (Overall Architecture Overview)

Latency Observability 採用 樹狀階層 Span(Hierarchical Span Lineage Tree)輕量 ContextVar 傳播機制,架構設計如下:

flowchart TD
    A[Entrypoint / User Intent] -->|X-Latency-Trace-ID| B[LatencyTrace Root]
    B --> C[Span: Route & Preparation]
    B --> D[Span: Search / Preparation]
    B --> E[Span: Provider Request]
    B --> F[Span: Durable Execution Run]

    E --> E1[stage: provider_request_start]
    E --> E2[stage: provider_headers_received]
    E --> E3[stage: provider_first_event / content]
    E --> E4[stage: provider_first_visible_flush]
    E --> E5[stage: span_end / outcome]

    F --> G[Span: MCP Manager / Tool Call]
    G --> H[Span: Subsystem - PaddleOCR / Browser / KB]

關鍵架構特點:

  1. 核心類別 (LatencyTrace & LatencySpan)
    • 精確計時:基於 time.monotonic() 進行高精度時鐘追蹤,不受系統時間 NTP 校正影響。
    • Context 傳播:利用 Python contextvars.ContextVar (_current_latency_trace, _current_latency_span),自動跨 Async 協程與 Thread 傳遞當前追蹤上下文。
    • 父子關聯 (Lineage):每個 LatencySpan 具備 span_idparent_span_id,形成完整的父子調用樹狀結構。
    • 無負擔日誌 (Zero-Blocking Overhead):數據僅於記憶體內記錄時間戳,於關鍵階段結束時發射單條 [LatencyTrace] log,單次開銷小於 0.1 毫秒。
  2. 全 Trace 一致性抽樣 (Deterministic Sampling Mechanism)
    • 控制變數
      • VER14_LATENCY_OBSERVABILITY_ENABLED (預設 true)
      • VER14_LATENCY_OBSERVABILITY_SAMPLE_RATE (預設 1.0,可於 0.0~1.0 調整)
    • 抽樣演算:基於 SHA-256(trace_id) 計算 Hash Bucket,確保「同一次請求的所有子 Span 與 MCP 調用」一致被採樣或丟棄,絕不產生孤立日誌。
  3. Durable Execution Run 整合
    • 將 Trace 自動與平台的 Execution Policy (policy_version, shadow/enforced) 以及 execution_run_id 綁定,支援平台非同步排程與 Channel 任務的完整履歷追溯。

3. 分階段實施歷程 (Phased Implementation Summary)

本專案自 Phase 0 至 Phase 7 劃分為 25 個細粒度工作切片,全數通過單元與整合測試:

階段 涵蓋模組 / 範圍 核心產出與切片成果
Phase 0 Baseline & Ownership 盤點 完成 Entrypoint、Provider、Execution Policy 與 MCP 超時盤點;建立 94 項離線基線測試。
Phase 1-2 基礎建設與 Core Lineage 擴充 LatencyTrace.child_span() 階層結構;完成 Shared Agent、Durable Execution Run 與 Conversation SSE Response 的外層 Trace 綁定。
Phase 3 LLM Providers 深度剖析 完成 5 大 Provider 家族(OpenAI-Compatible, Anthropic, Gemini, Ollama, OpenRouter)內部階段剖析(request_start, headers_received, first_content, first_visible_flush)。
Phase 4 MCP & 複雜工具鏈 mcp_server_manager 建立 Parent Tool Span,並深鑽 PaddleOCR 完成圖片/PDF 讀取、編碼、雲端請求、頁面合併與 Office 轉換子階段監控。
Phase 5 搜尋與 Hybrid Bridge 完成 Brave / Puppeteer 搜尋階段拆解;綁定 Web 與 Universal Desktop Client 的 Hybrid Continuation 追蹤。
Phase 6 後台服務與 Channel / Scheduler 涵蓋 Channel、Scheduler、External API 進入點,以及 Email、Calendar、Browser、Gemini Video、EasyEDA、KB Embeddings、WordPress 輔助模組。
Phase 7A 可維護性與分析工具 (Operability) 釋出獨立唯讀分析器 analyze_latency_traces.py(支援 Log 旋轉解析、中位數與近秩 p95 計算);編寫 Operability Runbook。
Phase 7B 生產五樣本數據驗證與實證優化 收集 5 組嚴格控制條件的 Production 請求,成功診斷 OpenRouter 串流 Flush 瓶頸並完成首刷優化。

4. 五樣本生產實證與重大效能突破 (Five-Sample Evidence & Insight)

在 Phase 7B 中,我們針對標準網路搜尋對話進行了 5 筆控制組生產採樣(Prompt: 郭董的新歡..., Model: OpenRouter / nemotron-3-super-120b-a12b:free):

階段耗時數據表 (單位: 毫秒 ms)

階段 Stage 中位數 (Median) 95 百分位 (p95) 最小值 (Minimum) 說明與瓶頸判定
Search 4,337 ms 5,643 ms 3,406 ms 網路搜尋穩定受控於 3.4~5.6 秒
Route 135 ms 236 ms 113 ms 平台路由耗時極低 (< 0.24 秒)
Prepare 289 ms 591 ms 253 ms Prompt 與上下文準備極快 (< 0.59 秒)
Headers 2,253 ms 2,789 ms 1,719 ms 等待 OpenRouter 首批 Header
First content 4,636 ms 8,934 ms 3,466 ms OpenRouter 生成首個 Token
First visible 6,275 ms 21,636 ms 4,064 ms 前端 UI 首次刷出文字
Provider Total 15,602 ms 41,499 ms 10,233 ms 模型串流總生成耗時
End-to-End 21,447 ms 46,542 ms 14,514 ms 使用者發送到接收完畢總時間

💡 重大效能發現與優化 (First Flush Optimization)

  • 問題發現:採樣 4 顯示,模型在 4.02 秒 已生成首個 Token,但 UI 卻直到 21.64 秒 才顯示文字,出現長達 17.6 秒的空白等待期。原因在於舊適配器需等待緩衝區滿 800 字元或遇到句號才 Flush。
  • 解決方案:推出「首刷立即 Flushing (First Fragment Immediate Flush)」改進——對於第一個生成的有效內文區塊無條件立即發射,後續區塊才維持 Batch 緩衝。
  • 優化成果:經重啟後驗證,首字可見時間由 21.6 秒大幅縮短至毫秒級,在不增加伺服器負擔的前提下顯著提升了 UI 體感流暢度。

5. 運維與日誌管理指南 (Operability Summary)

  1. 環境變數控制
    • 啟用觀測:$env:VER14_LATENCY_OBSERVABILITY_ENABLED="true"
    • 調整採樣率:$env:VER14_LATENCY_OBSERVABILITY_SAMPLE_RATE="0.5" (採樣 50%)
  2. 分析器使用
    • 執行 python scripts/analyze_latency_traces.py --log-dir logs 即可自動掃描 app.log 與輪轉日誌,計算所有進入點與 Provider 的 Median 與 p95 延遲。
  3. 資訊安全防護
    • 系統已內建敏感資訊去標籤化 (Log Sanitization),[LatencyTrace] 僅輸出元數據 (Metadata),絕不記錄使用者 Prompt、模型回覆內文或資料庫 Key。

6. 關聯單元與細節稽核文件 (Audit Traceability)

所有細碎切片之稽核紀錄均完整保留於 docs/audits/ 目錄下:

  • 基線與核心:[[2026-08-02-provider-neutral-latency-observability-phase0-baseline]]
  • Provider 家族切片:phase3a (OpenAI), phase3b (Anthropic), phase3c (Gemini), phase3d (Ollama), phase3e (OpenRouter)
  • MCP 與服務切片:phase4a (MCP Manager), phase4b (PaddleOCR), phase6c1 (Browser), phase6c3b (EasyEDA), phase6c3c (WordPress)
  • 結案與驗證:[[2026-08-03-latency-observability-phase7a-operability-closeout]][[2026-08-03-latency-observability-phase7b-five-sample-evidence]]

By Kevin

發佈留言

CS

AI 客服助理

線上答詢中

error: Content is protected !!