返回AI笔记
AI Day 18

AI Day 18: LLM可观测性与监控 — 生产环境的"仪表盘"

LLM可观测性(Observability) 是对LLM应用在生产环境中"运行状态"的全面感知能力——通过Traces(链路追踪)、Metrics(指标度量)、Logs(结构化日志)三大支柱,加上LLM特有的Quality Score(质量评分)、Token Usage(令牌消耗)和Cost Attribution(成本归因),实现"发生了什么、为什么发生、花了多少钱、质量好不好"的完整可见性。它

2026-04-19
ObservabilityTracingMetricsLoggingLangSmithLangFusePhoenixTTFTTPSTokenLLM-as-JudgeCostHallucinationA/BModelFallbackCanary

日期:2026-04-19 阶段:第二阶段 — 工程实践 (Day 16-30) 标签Observability Tracing Metrics Logging LangSmith LangFuse Phoenix TTFT TPS Token Usage LLM-as-Judge Cost Attribution Hallucination Detection A/B Testing Model Versioning Fallback Canary Release


学习路径树

AI/LLM 深度技术学习 50天计划
├── 第一阶段:模型基础 (Day 1-15) ✅
│   ├── Day 1:  Transformer架构与LLM基础 ✅
│   ├── Day 2:  模型量化与本地部署 ✅
│   ├── Day 3:  训练过程深度:Pre-training / SFT / RLHF / DPO ✅
│   ├── Day 4:  Prompt Engineering与上下文学习(ICL)原理 ✅
│   ├── Day 5:  RAG架构:检索增强生成全链路 ✅
│   ├── Day 6:  向量数据库与Embedding模型 ✅
│   ├── Day 7:  Fine-tuning实战:LoRA / QLoRA / Adapter ✅
│   ├── Day 8:  推理优化:vLLM / TensorRT-LLM / SGLang ✅
│   ├── Day 9:  长上下文技术:RoPE扩展 / Ring Attention ✅
│   ├── Day 10: 多模态模型:Vision-Language架构 ✅
│   ├── Day 11: Reasoning模型:CoT / o1 / R1 / Extended Thinking ✅
│   ├── Day 12: Agent框架:ReAct / Tool Use / Planning ✅
│   ├── Day 13: MCP协议与Tool生态 ✅
│   ├── Day 14: 模型评估:Benchmark / Arena / 安全评估 ✅
│   └── Day 15: 阶段复习与架构总结 ✅
│
├── 第二阶段:工程实践 (Day 16-30)
│   ├── Day 16: LLM应用架构设计 — 微服务/网关/缓存/监控 ✅
│   ├── Day 17: LLM安全与Guardrails — 生产环境的防护体系 ✅
│   ├── Day 18: LLM可观测性与监控 — 生产环境的"仪表盘" ← 你在这里
│   ├── Day 19: 成本优化 — Token经济学/缓存策略/模型路由
│   ├── Day 20: 多模型编排 — 路由/降级/A-B测试
│   ├── Day 21-25: 生产级RAG系统(Chunking/Rerank/评估/迭代)
│   └── Day 26-30: Agent系统工程化(状态管理/错误恢复/成本控制)
│
├── 第三阶段:金融零售AI应用 (Day 31-42)
│   ├── Day 31-35: 金融AI(风控模型/智能投顾/合规/反欺诈)
│   ├── Day 36-40: 零售AI(推荐系统/智能客服/供应链预测/营销)
│   └── Day 41-42: CeFi x DeFi x AI融合架构
│
└── 第四阶段:面试冲刺 (Day 43-50)
    ├── Day 43-46: 系统设计面试(LLM平台/RAG/Agent/推荐)
    ├── Day 47-49: 产品/架构面试模拟
    └── Day 50: 总结与作品集

核心概念

一句话定义

LLM可观测性(Observability) 是对LLM应用在生产环境中"运行状态"的全面感知能力——通过Traces(链路追踪)、Metrics(指标度量)、Logs(结构化日志)三大支柱,加上LLM特有的Quality Score(质量评分)、Token Usage(令牌消耗)和Cost Attribution(成本归因),实现"发生了什么、为什么发生、花了多少钱、质量好不好"的完整可见性。它是Day 16架构、Day 17安全之后,生产级LLM系统的第三根承重柱。

金融类比

LLM可观测性 = 金融交易监控系统 —— 让每笔"AI交易"都有迹可循

银行交易监控系统:                        LLM可观测性:
├── 交易流水(Transaction Log)           ├── 请求日志(Request Log)
│   每笔交易完整记录:                   │   每次调用完整记录:
│   时间/金额/账户/渠道/状态            │   时间/Token数/模型/用户/状态
│                                        │
├── 交易链路(Transaction Chain)          ├── 链路追踪(Trace)
│   跨系统追踪一笔交易:                 │   跨组件追踪一次请求:
│   前端→网关→核心→风控→记账→回执      │   输入→Guard→Retrieve→LLM→Guard→输出
│                                        │
├── 业务仪表盘(Dashboard)               ├── 指标看板(Metrics Dashboard)
│   TPS / 成功率 / 平均耗时             │   TTFT / TPS / 成功率 / 平均延迟
│   按渠道/产品/时段统计                │   按模型/功能/用户统计
│                                        │
├── 异常告警(Alert)                      ├── 异常告警(Alert)
│   大额交易 / 失败率飙升 / 超时        │   质量下降 / 成本飙升 / 延迟上涨
│                                        │
├── 对账系统(Reconciliation)             ├── 成本归因(Cost Attribution)
│   确保"账账相符、账实相符"             │   确保"每分钱花在哪、谁花的、值不值"
│                                        │
└── 审计追溯(Audit Trail)               └── 合规审计(Audit Trail)
    满足监管要求,可追溯                     满足AI监管/安全审计要求

核心相似点:
  金融: 每笔交易都有唯一流水号(Transaction ID)
  LLM:  每次请求都有唯一追踪号(Trace ID)

  金融: 不怕交易出错,怕出了错"查不到原因"
  LLM:  不怕模型有问题,怕有问题"不知道哪里出的"

知识点1: LLM可观测性三支柱

传统可观测性 vs LLM可观测性

传统微服务可观测性已经很成熟(Prometheus/Grafana/Jaeger)
但LLM引入了全新的挑战,传统三支柱需要"升级"

传统三支柱:                    LLM三支柱(扩展版):
┌──────────────┐              ┌──────────────────────────────┐
│   Traces     │              │   Traces (链路追踪)           │
│   链路追踪   │   ──升级──>  │   + Span类型扩展              │
│              │              │   + Prompt/Completion记录     │
│              │              │   + Retrieval上下文追踪       │
├──────────────┤              ├──────────────────────────────┤
│   Metrics    │              │   Metrics (指标度量)           │
│   指标度量   │   ──升级──>  │   + LLM专属指标               │
│              │              │   + 质量指标(Quality Score)   │
│              │              │   + 成本指标($/request)       │
├──────────────┤              ├──────────────────────────────┤
│   Logs       │              │   Logs (结构化日志)            │
│   日志       │   ──升级──>  │   + Prompt/Completion全文     │
│              │              │   + Token用量明细             │
│              │              │   + 安全事件日志(Day 17关联)   │
└──────────────┘              └──────────────────────────────┘

新增"第四支柱":
┌──────────────────────────────┐
│   Evaluations (质量评估)      │
│   传统监控不关心"回答对不对"   │
│   LLM必须关心"输出质量好不好" │
│   + LLM-as-Judge 自动评分     │
│   + 用户反馈(Thumbs up/down)  │
│   + 幻觉检测结果              │
│   + Regression回归检测        │
└──────────────────────────────┘

LLM特有指标体系

性能指标 (Performance Metrics):
  ┌─────────────────────────────────────────────────────────────────┐
  │ TTFT (Time To First Token) — 首Token延迟                        │
  │   定义: 从发送请求到收到第一个Token的时间                        │
  │   重要性: 直接影响用户感知的"响应速度"                           │
  │   目标: Streaming场景 < 500ms, 非Streaming < 2s                 │
  │   类比: 银行柜台叫号后"开始办理"的等待时间                      │
  │                                                                  │
  │ TPS (Tokens Per Second) — 生成速率                               │
  │   定义: 模型每秒输出的Token数                                    │
  │   重要性: 影响长回复的总等待时间                                 │
  │   目标: 云API通常30-80 TPS, 本地部署10-40 TPS                  │
  │   类比: 柜员"办理业务的速度"                                    │
  │                                                                  │
  │ E2E Latency (端到端延迟)                                         │
  │   定义: 从请求到完整响应的总时间                                 │
  │   构成: TTFT + (Output Tokens / TPS)                            │
  │   目标: 简单问答 < 3s, RAG < 5s, Agent < 30s                   │
  │                                                                  │
  │ Throughput (吞吐量)                                              │
  │   定义: 系统每秒处理的请求数                                     │
  │   关注: 并发能力和排队情况                                       │
  └─────────────────────────────────────────────────────────────────┘

Token指标 (Token Metrics):
  ┌─────────────────────────────────────────────────────────────────┐
  │ Input Tokens / Request — 每次请求的输入Token数                   │
  │   包含: System Prompt + User Message + Context(RAG)             │
  │   趋势: 如果持续上涨,可能是Prompt膨胀或检索过多                │
  │                                                                  │
  │ Output Tokens / Request — 每次请求的输出Token数                  │
  │   关注: 是否有"废话"?是否太简短?                              │
  │   异常: 突然暴涨可能是模型进入循环                              │
  │                                                                  │
  │ Cache Hit Rate — 语义缓存命中率                                  │
  │   目标: 高频场景(FAQ) > 40%, 长尾场景 > 10%                    │
  │   影响: 直接关联成本和延迟                                      │
  │                                                                  │
  │ Total Token Consumption — 总Token消耗                            │
  │   按小时/天/周/月聚合                                            │
  │   用于成本预测和预算管理                                        │
  └─────────────────────────────────────────────────────────────────┘

质量指标 (Quality Metrics):
  ┌─────────────────────────────────────────────────────────────────┐
  │ Quality Score — 质量评分(通过LLM-as-Judge或人工标注)             │
  │   维度: 准确性 / 相关性 / 完整性 / 格式 / 安全性               │
  │   范围: 通常1-5分制                                              │
  │                                                                  │
  │ Hallucination Rate — 幻觉率                                      │
  │   定义: 输出中包含不可验证信息的比例                             │
  │   目标: 金融场景 < 1%, 通用场景 < 5%                            │
  │                                                                  │
  │ User Satisfaction — 用户满意度                                    │
  │   来源: Thumbs up/down, 评分, 重新生成率(Regeneration Rate)     │
  │   关联: 低满意度 → 调查 → 定位Root Cause                       │
  │                                                                  │
  │ Guardrail Trigger Rate — 安全护栏触发率                          │
  │   过高: 模型或Prompt有问题, 或护栏过于敏感                      │
  │   过低: 护栏可能形同虚设                                        │
  └─────────────────────────────────────────────────────────────────┘

业务指标 (Business Metrics):
  ┌─────────────────────────────────────────────────────────────────┐
  │ Cost per Request — 每次请求成本                                  │
  │   计算: (Input Tokens * Input Price + Output Tokens * Out Price)│
  │   + Embedding Cost(RAG) + Reranker Cost + Infra Cost            │
  │                                                                  │
  │ Cost per User — 每用户成本                                       │
  │   用于用户价值评估: LTV > CAC + AI成本 才可持续                 │
  │                                                                  │
  │ Error Rate — 错误率                                              │
  │   包含: API错误/超时/Rate Limit/Guardrail拦截                   │
  │   目标: < 0.1% (不含Guardrail正常拦截)                          │
  └─────────────────────────────────────────────────────────────────┘

知识点2: Tracing深度 — 让每次请求"透明可见"

为什么LLM Tracing比传统Tracing更重要

传统微服务:
  请求 → 服务A → 服务B → 服务C → 响应
  每步是确定性的: 输入决定输出,出错容易复现

LLM应用:
  请求 → Guard → Embed → Retrieve → Rerank → LLM → Guard → 响应
  LLM步骤是非确定性的: 同样输入可能不同输出
  且LLM是"黑盒": 你看不到模型内部推理过程

所以LLM Tracing需要记录更多上下文:
  不仅记录"经过了哪些节点"
  还要记录"每个节点看到了什么、产出了什么"
  尤其是: 发给模型的完整Prompt和模型的完整输出

Span类型体系

LLM Tracing引入了特殊的Span(跨度)类型:

Trace (一次完整请求)
├── Span: CHAIN (编排链)
│   ├── Span: GUARDRAIL (输入检查)
│   │   输入: 用户原始消息
│   │   输出: 通过/拦截 + 原因
│   │   耗时: 50ms
│   │
│   ├── Span: RETRIEVAL (检索)
│   │   输入: 查询向量
│   │   输出: Top-K文档 + 相似度分数
│   │   元数据: 检索源/文档ID/Chunk信息
│   │   耗时: 120ms
│   │
│   ├── Span: RERANKING (重排)
│   │   输入: 检索结果
│   │   输出: 重排后结果 + 新分数
│   │   耗时: 80ms
│   │
│   ├── Span: LLM (模型调用)
│   │   输入: 完整Prompt(System + Context + User)
│   │   输出: 模型回复全文
│   │   元数据:
│   │     model: gpt-4o-2025-04-01
│   │     temperature: 0.3
│   │     input_tokens: 2847
│   │     output_tokens: 512
│   │     TTFT: 320ms
│   │     total_time: 2.1s
│   │     cost: $0.0089
│   │   耗时: 2100ms
│   │
│   ├── Span: GUARDRAIL (输出检查)
│   │   输入: 模型原始输出
│   │   输出: 通过/修改/拦截
│   │   耗时: 60ms
│   │
│   └── Span: TOOL_CALL (工具调用, Agent场景)
│       输入: 函数名 + 参数
│       输出: 工具返回结果
│       耗时: 800ms
│
总耗时: 3210ms
总成本: $0.0089 (LLM) + $0.0003 (Embedding) = $0.0092

主流Tracing平台对比 (2025-2026)

┌─────────────┬──────────────────┬──────────────────┬──────────────────┐
│  维度        │  LangSmith       │  LangFuse        │  Phoenix(Arize) │
├─────────────┼──────────────────┼──────────────────┼──────────────────┤
│ 定位        │ LangChain官方     │ 开源优先          │ ML+LLM统一平台  │
│ 开源        │ 部分开源          │ 完全开源(MIT)     │ 完全开源(Apache)│
│ 自托管      │ 企业版            │ 支持(Docker)      │ 支持             │
│ 框架绑定    │ LangChain生态     │ 框架无关          │ 框架无关         │
│ Tracing     │ ★★★★★           │ ★★★★☆           │ ★★★★☆          │
│ Evaluation  │ ★★★★★           │ ★★★★☆           │ ★★★★★          │
│ 成本追踪    │ ★★★★☆           │ ★★★★★           │ ★★★☆☆          │
│ Prompt管理  │ ★★★★★           │ ★★★★☆           │ ★★☆☆☆          │
│ 数据集管理  │ ★★★★★           │ ★★★☆☆           │ ★★★★☆          │
│ 企业功能    │ SSO/RBAC/合规     │ SSO/RBAC          │ 有限             │
│ 价格        │ 免费层+付费       │ 免费层+付费/自托管│ 免费/自托管      │
│ 适合场景    │ LangChain重度用户 │ 注重数据主权      │ ML团队转型LLM   │
├─────────────┼──────────────────┼──────────────────┼──────────────────┤
│ 推荐        │ 快速起步首选      │ 生产环境首选      │ 已有ML平台的团队│
└─────────────┴──────────────────┴──────────────────┴──────────────────┘

其他值得关注的工具:
  Helicone     — 代理层可观测性,零代码接入(改一行Base URL)
  Braintrust   — 强Evaluation,适合质量敏感场景
  Weights & Biases (Weave) — W&B生态,适合研究/训练团队
  OpenLLMetry  — OpenTelemetry for LLM,标准化方向
  Portkey      — AI Gateway + 可观测性一体化(Day 16提到)

链路追踪可视化示例

一个RAG客服请求的完整Trace可视化:

[Trace: abc-123-def]  总耗时: 4.2s  总成本: $0.012
│
├─ [SPAN] Input Guard                    50ms   ✅ PASS
│    input: "我的账户余额是多少?上个月有没有异常交易?"
│    output: safe (score: 0.98)
│
├─ [SPAN] Query Rewrite                  180ms  $0.0004
│    input: "我的账户余额是多少?上个月有没有异常交易?"
│    output: ["查询账户当前余额", "查询最近30天异常交易记录"]
│    model: gpt-4o-mini
│    tokens: 45 in / 28 out
│
├─ [SPAN] Parallel Retrieval             220ms
│    ├─ [SUB-SPAN] Vector Search          150ms
│    │    query: "账户余额查询"
│    │    results: 5 chunks (scores: 0.92, 0.88, 0.85, 0.79, 0.71)
│    │
│    └─ [SUB-SPAN] API Call               220ms
│         endpoint: /api/account/balance
│         response: { balance: 52380.00, currency: "CNY" }
│
├─ [SPAN] Rerank                          90ms   $0.0001
│    input: 5 chunks
│    output: 3 chunks (reranked scores: 0.95, 0.91, 0.84)
│
├─ [SPAN] LLM Generation                 3400ms  $0.0098
│    model: gpt-4o-2025-04-01
│    temperature: 0.2
│    system_prompt: [1200 tokens]
│    context: [1580 tokens]  (3 chunks + API result)
│    user_message: [32 tokens]
│    output: [280 tokens]
│    TTFT: 380ms
│    TPS: 62
│
├─ [SPAN] Output Guard                   60ms   ✅ PASS
│    hallucination_check: pass (grounded: 100%)
│    pii_check: pass (no leakage)
│    tone_check: pass (professional)
│
└─ [SPAN] Response                       0ms
     final_output: "您的当前账户余额为52,380.00元..."
     quality_score: 4.5/5 (auto-evaluated)
     user_feedback: 👍 (collected later)

成本归因 (Cost Attribution)

成本归因 = 知道"钱花在哪里"

按请求分解:
  一次RAG请求 $0.012 的构成:
  ├── Query Rewrite (gpt-4o-mini):  $0.0004  (3.3%)
  ├── Embedding:                     $0.0002  (1.7%)
  ├── Reranking:                     $0.0001  (0.8%)
  ├── LLM Generation (gpt-4o):      $0.0098  (81.7%)
  └── Infrastructure:                $0.0015  (12.5%)
  → 结论: LLM调用占绝对主导,优化重点在这里

按功能分账:
  ┌────────────────┬────────────┬────────────┬──────────┐
  │ 功能           │ 日均请求数 │ 日均成本   │ 单次成本 │
  ├────────────────┼────────────┼────────────┼──────────┤
  │ 智能客服       │ 50,000     │ $600       │ $0.012   │
  │ 文档摘要       │ 5,000      │ $150       │ $0.030   │
  │ 合规审查       │ 2,000      │ $200       │ $0.100   │
  │ 交易分析       │ 10,000     │ $80        │ $0.008   │
  │ 报告生成       │ 500        │ $250       │ $0.500   │
  └────────────────┴────────────┴────────────┴──────────┘
  → 结论: 报告生成单价最高,但客服总量最大
  → 优化策略: 客服加缓存降总量,报告优化Prompt降单价

按用户/租户分账:
  多租户SaaS场景尤其重要:
  → 大客户A: 月消耗$15,000 → 收费$20,000 → 毛利33%
  → 小客户B: 月消耗$50 → 收费$30 → 亏损!
  → 结论: 需要设置用量限制或差异化定价

知识点3: 质量监控 — LLM独有的"质检体系"

为什么质量监控是LLM可观测性的核心差异

传统系统: 返回200 OK + 正确数据 = 成功
LLM系统: 返回200 OK + 一段话 = 成功?

问题在于:
  HTTP 200并不代表"回答是对的"
  模型可能: 一本正经地胡说八道(幻觉)
  模型可能: 回答正确但格式错误
  模型可能: 回答正确但不够完整
  模型可能: 回答正确但用户不满意

所以LLM需要独立的"质量监控层"
  类比: 银行不仅要确保"交易成功"
       还要确保"交易金额正确"、"记账无误"

LLM-as-Judge: 用AI评估AI

核心思路: 用一个LLM来评判另一个LLM的输出质量
  → 听起来像"左手评右手",但实践证明相当有效
  → 尤其当评判模型比被评模型更强时(如用Claude评gpt-4o-mini)

评估维度:
  ┌─────────────┬─────────────────────────────────────────────────┐
  │ 维度        │ 评分标准                                         │
  ├─────────────┼─────────────────────────────────────────────────┤
  │ Faithfulness│ 回答是否忠于提供的上下文/文档?                   │
  │ 忠实度      │ 1=完全编造 2=部分编造 3=基本忠实 4=高度忠实 5=完全忠实│
  ├─────────────┼─────────────────────────────────────────────────┤
  │ Relevance   │ 回答是否切中用户问题?                            │
  │ 相关性      │ 1=完全无关 2=略有相关 3=基本相关 4=高度相关 5=精准回答│
  ├─────────────┼─────────────────────────────────────────────────┤
  │ Completeness│ 回答是否涵盖问题的所有方面?                      │
  │ 完整性      │ 1=严重遗漏 2=多处遗漏 3=基本完整 4=较完整 5=全面覆盖│
  ├─────────────┼─────────────────────────────────────────────────┤
  │ Harmlessness│ 回答是否安全无害?                                │
  │ 安全性      │ 1=有害内容 2=有隐含偏见 3=基本安全 4=安全 5=完全安全│
  ├─────────────┼─────────────────────────────────────────────────┤
  │ Coherence   │ 回答是否逻辑连贯、语言通顺?                     │
  │ 连贯性      │ 1=混乱 2=部分混乱 3=基本通顺 4=通顺 5=表达优秀  │
  └─────────────┴─────────────────────────────────────────────────┘

实现架构:
  用户请求 → 主模型回答 → 异步发送到评估管道
                                │
                                ├── Judge LLM评分 (异步,不影响延迟)
                                ├── 存储评分到数据库
                                ├── 聚合计算趋势
                                └── 触发告警(如质量下降)

关键设计决策:
  1. 同步 vs 异步: 质量评估一般异步,不阻塞用户响应
  2. 采样率: 100%评估太贵,通常10-30%采样
  3. Judge模型选择: 比被评模型高一级,或专门训练的评估模型
  4. 评估Prompt设计: 需要精心设计,包含评分标准和示例
  5. 人工校验: 定期抽查Judge评分,确保Judge本身没"走偏"

Hallucination Detection (幻觉检测)

Day 17讲了幻觉的类型和防护,今天聚焦"如何在监控中持续检测"

生产环境幻觉检测管道:

  LLM输出
    │
    ├── 方法1: Grounding Check (基于参考源)
    │   将输出每个声明(Claim)与检索的文档对比
    │   NLI模型判断: Supported / Contradicted / Not Found
    │   幻觉率 = (Contradicted + Not Found) / Total Claims
    │   适合: RAG场景,有明确参考源
    │
    ├── 方法2: Self-Consistency Check (自一致性检查)
    │   对同一问题生成3-5个回答(Temperature > 0)
    │   计算回答之间的语义一致性
    │   高一致性 → 可能是真实知识
    │   低一致性 → 可能是幻觉
    │   适合: 无参考源的通用问答
    │
    ├── 方法3: Citation Verification (引用验证)
    │   要求模型输出带引用标注 [1] [2]
    │   自动检查: 引用是否存在、内容是否匹配
    │   Anthropic Citations API / Perplexity方式
    │   适合: 要求高可信度的场景
    │
    └── 方法4: 专用检测模型
        训练小模型专门判断"可信度"
        如: Vectara Hughes Hallucination Model (HHM)
        输入: (context, answer) → 输出: hallucination_score
        适合: 大规模生产环境,低延迟要求

监控仪表盘关键指标:
  ├── 日均幻觉率(按功能/模型分)
  ├── 幻觉率趋势(是否恶化?)
  ├── 高幻觉率的具体Case(用于分析Root Cause)
  └── 告警阈值: 幻觉率 > X% → 触发P1告警

Regression Detection (回归检测)

场景: 模型更新/Prompt修改后,质量是否下降?

回归检测流程:
  1. 维护"黄金测试集"(Golden Dataset)
     → 100-500个精心标注的<问题, 期望回答>对
     → 覆盖核心业务场景
     → 包含Edge Case

  2. 每次变更前跑基线测试
     → 当前版本在Golden Dataset上的质量分
     → 作为Baseline

  3. 变更后跑回归测试
     → 新版本在Golden Dataset上的质量分
     → 与Baseline对比

  4. 自动化判定
     ├── 质量分下降 > 5% → 阻止部署(P0)
     ├── 质量分下降 2-5% → 人工审核(P1)
     ├── 质量分波动 < 2% → 允许部署
     └── 质量分上升 → 允许部署 + 更新Baseline

触发回归检测的事件:
  ├── 模型版本切换(如gpt-4o-2025-01 → gpt-4o-2025-04)
  ├── System Prompt修改
  ├── RAG数据源更新
  ├── Guardrail规则变更
  └── 依赖服务升级

A/B测试框架

LLM A/B测试的特殊挑战:
  1. 输出非确定性: 同一输入可能不同输出,增加噪声
  2. 评估困难: 不像CTR那样有明确数值指标
  3. 成本差异: 不同模型价格不同,需要同时考虑质量和成本
  4. 延迟差异: 用户可能因延迟差异而偏好某个组

A/B测试设计:
  ┌─────────────────────────────────────────────────┐
  │ 变量: Model A (gpt-4o) vs Model B (Claude Opus) │
  │ 分流: 50/50 随机分配                             │
  │ 维度: 质量 / 延迟 / 成本 / 用户满意度            │
  │ 样本: 至少10,000次请求 / 组                      │
  │ 周期: 最少7天(排除日内波动)                      │
  │ 显著性: p < 0.05                                 │
  └─────────────────────────────────────────────────┘

  评估维度矩阵:
  ┌──────────────┬─────────┬─────────┬──────────┐
  │              │ Model A │ Model B │ 胜出     │
  ├──────────────┼─────────┼─────────┼──────────┤
  │ 质量分(avg)  │ 4.2     │ 4.5     │ Model B  │
  │ TTFT(p50)    │ 350ms   │ 280ms   │ Model B  │
  │ 成本/请求    │ $0.012  │ $0.018  │ Model A  │
  │ 用户满意度   │ 82%     │ 87%     │ Model B  │
  │ 幻觉率       │ 3.2%    │ 1.8%    │ Model B  │
  └──────────────┴─────────┴─────────┴──────────┘
  决策: Model B质量显著更好,虽然成本+50%
       → 高价值场景用B,低价值场景用A

知识点4: 成本监控 — LLM时代的"财务审计"

为什么成本监控对LLM尤其重要

传统SaaS: 服务器成本基本固定,与请求量大致线性
LLM应用: 成本高度变动,取决于Token用量
  → 一个"写报告"请求可能比一个"打个招呼"贵100倍
  → 一次Prompt注入攻击可能让模型循环生成,成本爆炸
  → 模型提供商随时可能调价

金融类比:
  传统系统 = 固定租金的办公室
  LLM系统 = 按交易量收费的证券交易 → 必须实时监控"手续费"

Token用量趋势分析

监控维度:

时间维度:
  ├── 实时: 每分钟Token消耗速率(异常突增检测)
  ├── 小时: 识别用量高峰/低谷
  ├── 每日: 日环比趋势
  ├── 每周: 周环比趋势 + 周末vs工作日差异
  └── 每月: 月度预算对比 + 预测下月

告警规则:
  ┌────────────────────────────────────────────────────────┐
  │ Level 1 (INFO): 小时用量超过日均值的1.5倍              │
  │   → 可能是正常高峰,记录但不告警                       │
  │                                                        │
  │ Level 2 (WARNING): 小时用量超过日均值的3倍             │
  │   → 可能是异常,发送Slack通知                          │
  │                                                        │
  │ Level 3 (CRITICAL): 小时用量超过日均值的5倍            │
  │   → 大概率异常(攻击/bug/死循环)                       │
  │   → 自动触发Rate Limit降级                             │
  │   → 立即通知On-call                                    │
  │                                                        │
  │ Level 4 (EMERGENCY): 日预算已耗尽80%                   │
  │   → 考虑自动切换到更便宜的模型                         │
  │   → 或暂停非核心功能的LLM调用                          │
  └────────────────────────────────────────────────────────┘

按用户/功能/模型分账

多维度成本分解:

按模型分:
  gpt-4o:        $18,500/月  (62%)  — 核心对话、复杂推理
  gpt-4o-mini:   $3,200/月   (11%)  — 分类、提取、简单问答
  Claude Opus:   $5,800/月   (19%)  — 长文档分析、合规审查
  Embedding:     $1,500/月   (5%)   — 向量化
  Reranker:      $900/月     (3%)   — 重排序
  总计:          $29,900/月

按功能分:
  智能客服:      $12,000/月  (40%)  → ROI: 替代3个客服 = 节省$15K
  合规审查:      $8,000/月   (27%)  → ROI: 替代外包 = 节省$25K
  报告生成:      $5,000/月   (17%)  → ROI: 节省50%人工时间 = $10K
  内部搜索:      $3,000/月   (10%)  → ROI: 提升10%效率 = 难量化
  实验/测试:     $1,900/月   (6%)   → 必要投入

按用户层级分(多租户SaaS):
  企业版客户(50家):    $22,000/月  → 收入$45,000 → 毛利52%
  专业版客户(200家):   $6,000/月   → 收入$12,000 → 毛利50%
  免费版用户(5000人):  $1,900/月   → 收入$0      → 纯获客成本

预算告警与异常检测

预算管理架构:

  ┌─────────────────────────────────────┐
  │        月度预算: $30,000            │
  ├─────────────────────────────────────┤
  │                                     │
  │  功能预算分配:                      │
  │  ├── 智能客服: $13,000 (43%)       │
  │  ├── 合规审查: $9,000  (30%)       │
  │  ├── 报告生成: $5,000  (17%)       │
  │  └── 其他:     $3,000  (10%)       │
  │                                     │
  │  安全裕度:                          │
  │  ├── 50% 消耗 → 信息通知(月中)     │
  │  ├── 80% 消耗 → 警告通知           │
  │  ├── 95% 消耗 → 启动降级策略       │
  │  └── 100% 消耗→ 非核心功能熔断     │
  │                                     │
  └─────────────────────────────────────┘

异常检测方法:
  1. 统计异常: Z-score > 3 的请求(Token数远超平均)
  2. 模式异常: 单用户短时间大量请求(可能是脚本滥用)
  3. 内容异常: 极长输出(可能是模型进入循环)
  4. 成本异常: 单请求成本 > $1(应该非常罕见)

  金融类比: 这就是银行的"异常交易检测"
  → 信用卡突然在异地大额消费 = 用户突然发起大量LLM请求
  → 需要同样的规则引擎思维

知识点5: 生产运维 — 让LLM系统"稳如磐石"

模型版本管理

LLM版本管理的特殊挑战:
  传统软件: 你控制代码版本,升级是你主动选择
  LLM API:  提供商可能随时升级/废弃模型版本
            gpt-4-0613 → gpt-4-turbo → gpt-4o → ?
            Claude 3 Opus → Claude 3.5 Sonnet → Claude Opus 4 → ?

版本管理策略:
  ┌─────────────────────────────────────────────────────────┐
  │ 1. Pin Version (锁定版本)                                │
  │    始终使用固定版本号(如gpt-4o-2025-04-01)              │
  │    避免"latest"别名 → 它随时可能变                      │
  │    类比: 生产环境锁定依赖版本(npm lock)                 │
  │                                                          │
  │ 2. Shadow Testing (影子测试)                             │
  │    新版本先在影子环境跑,不对外服务                      │
  │    对比新旧版本的质量/延迟/成本                         │
  │    确认无回归后再切换                                    │
  │                                                          │
  │ 3. Gradual Rollout (渐进发布)                            │
  │    5% → 10% → 25% → 50% → 100%                         │
  │    每步观察指标,异常立即回滚                            │
  │                                                          │
  │ 4. Version Registry (版本注册表)                         │
  │    记录每个环境用的模型版本                              │
  │    记录每次版本切换的时间和原因                          │
  │    便于事后追溯: "上周三质量下降"→"查,那天切了模型版本" │
  └─────────────────────────────────────────────────────────┘

Fallback策略

Fallback(降级回退) — LLM系统的"保险丝"

为什么比传统系统更需要Fallback:
  1. LLM API可能随时限流(Rate Limit)
  2. 提供商可能临时维护/故障
  3. 某个模型可能突然"质量变差"(模型退化)
  4. 成本可能突然飙升(提供商调价)

多层Fallback架构:
  ┌─────────────────────────────────────────────────────────┐
  │                    用户请求                              │
  │                      │                                   │
  │                 ┌────▼────┐                              │
  │                 │ 主模型   │  gpt-4o                     │
  │                 │         │  延迟 < 5s, 正常运行        │
  │                 └────┬────┘                              │
  │                      │ 失败/超时/限流                    │
  │                 ┌────▼────┐                              │
  │  Fallback L1    │ 备用模型 │  Claude Opus 4              │
  │  (同等级)       │         │  同等质量,不同提供商         │
  │                 └────┬────┘                              │
  │                      │ 也失败                            │
  │                 ┌────▼────┐                              │
  │  Fallback L2    │ 降级模型 │  gpt-4o-mini               │
  │  (低一级)       │         │  质量略降,但成本低/快速      │
  │                 └────┬────┘                              │
  │                      │ 还是失败                          │
  │                 ┌────▼────┐                              │
  │  Fallback L3    │ 缓存回复 │  返回最相似的历史回答       │
  │  (兜底)         │         │  "我理解您的问题,正转人工"  │
  │                 └────┬────┘                              │
  │                      │ 缓存也无                          │
  │                 ┌────▼────┐                              │
  │  Fallback L4    │ 静态回复 │  预设的友好提示             │
  │  (最终兜底)     │         │  "系统繁忙,请稍后再试"      │
  │                 └─────────┘                              │
  └─────────────────────────────────────────────────────────┘

Fallback触发条件:
  ├── 超时: 请求超过设定时间阈值(如10s)
  ├── 错误: 返回5xx/429等错误码
  ├── 质量: 在线质量检测分数低于阈值(实时Judge)
  ├── 限流: 达到Rate Limit
  └── 成本: 单请求成本超过上限(如$0.50)

灰度发布 (Canary Release)

LLM灰度发布流程:

Step 1: 准备 (Pre-Release)
  ├── 新版本(Prompt修改/模型切换)在staging环境测试通过
  ├── Golden Dataset回归测试通过(质量分无下降)
  └── 回滚方案准备就绪

Step 2: 金丝雀发布 (1-5%)
  ├── 将1-5%流量导入新版本
  ├── 密切监控: 质量分 / 延迟 / 错误率 / 成本
  ├── 对比指标: 新版本 vs 旧版本(实时Dashboard)
  ├── 持续时间: 至少4-24小时
  └── 异常 → 立即回滚

Step 3: 扩大范围 (10% → 25% → 50%)
  ├── 每步扩大前确认指标正常
  ├── 关注长尾效果: 某些场景可能延迟暴露问题
  └── 异常 → 回滚到上一步

Step 4: 全量发布 (100%)
  ├── 全量切换
  ├── 保留旧版本48小时(随时可回滚)
  └── 更新Version Registry

金融类比:
  这就是银行系统升级的标准流程
  → 先内部测试 → 小范围灰度(内部员工) → 部分客户 → 全量
  → 金融系统容不得"大爆炸上线"

容灾设计

LLM系统容灾层次:

L1: 单点故障(API调用失败)
  ├── 自动重试(Exponential Backoff)
  ├── 超时控制(避免Hang)
  └── 熔断器(Circuit Breaker): 连续N次失败 → 暂停调用

L2: 提供商故障(OpenAI/Anthropic宕机)
  ├── 多提供商冗余(至少2家)
  ├── 自动切换(Provider Router)
  └── 提前做好Prompt适配(不同模型可能需要微调Prompt)

L3: 区域故障(某个Region不可用)
  ├── 多区域部署
  ├── 自托管模型作为本地备份(Day 2/8知识)
  └── 降级为规则引擎(不用LLM,用传统逻辑兜底)

L4: 灾难性场景(所有LLM服务不可用)
  ├── 核心业务流程必须有"无LLM路径"
  ├── 队列暂存请求,恢复后重放
  └── 通知用户预期恢复时间

金融级容灾要求:
  RPO (Recovery Point Objective) = 0  → 不允许丢数据
  RTO (Recovery Time Objective) < 5min → 5分钟内恢复服务
  → 这意味着Fallback切换必须是自动化的,不能等人工介入

知识点6: 可观测性平台选型 (2025-2026工具对比)

全景对比表

┌─────────────┬────────────┬────────────┬────────────┬────────────┬────────────┐
│ 平台        │ LangSmith  │ LangFuse   │ Phoenix    │ Helicone   │ Portkey    │
├─────────────┼────────────┼────────────┼────────────┼────────────┼────────────┤
│ 核心定位    │ 全生命周期 │ 开源可观测 │ ML+LLM    │ 零代码代理 │ AI Gateway │
│             │ LLM DevOps │ 性平台     │ 评估平台   │ 可观测性   │ +可观测性  │
├─────────────┼────────────┼────────────┼────────────┼────────────┼────────────┤
│ 开源        │ 部分       │ MIT许可    │ Apache     │ 否         │ 否         │
│ 自托管      │ 企业版     │ Docker     │ pip install│ 否         │ 否         │
├─────────────┼────────────┼────────────┼────────────┼────────────┼────────────┤
│ Tracing     │ ★★★★★    │ ★★★★☆   │ ★★★★☆   │ ★★★☆☆   │ ★★★★☆   │
│ Metrics     │ ★★★★☆    │ ★★★★☆   │ ★★★★☆   │ ★★★★★   │ ★★★★★   │
│ Evaluation  │ ★★★★★    │ ★★★★☆   │ ★★★★★   │ ★★☆☆☆   │ ★★★☆☆   │
│ Cost Track  │ ★★★★☆    │ ★★★★★   │ ★★★☆☆   │ ★★★★★   │ ★★★★★   │
│ Prompt Mgmt │ ★★★★★    │ ★★★★☆   │ ★★☆☆☆   │ ★★☆☆☆   │ ★★★★☆   │
│ Gateway     │ ★★☆☆☆    │ ★★☆☆☆   │ ★☆☆☆☆   │ ★★★★★   │ ★★★★★   │
├─────────────┼────────────┼────────────┼────────────┼────────────┼────────────┤
│ 接入方式    │ SDK/装饰器 │ SDK/OTEL   │ SDK/OTEL   │ 代理URL    │ 代理URL    │
│ 框架绑定    │ LangChain  │ 无         │ 无         │ 无         │ 无         │
├─────────────┼────────────┼────────────┼────────────┼────────────┼────────────┤
│ 免费额度    │ 5K traces  │ 50K obs    │ 无限(自托) │ 10K req    │ 10K req    │
│ 付费起步    │ $39/月     │ $59/月     │ 免费       │ $20/月     │ $49/月     │
├─────────────┼────────────┼────────────┼────────────┼────────────┼────────────┤
│ 最佳场景    │ LangChain  │ 数据主权   │ 研究/评估  │ 快速接入   │ 多模型管理 │
│             │ 生态用户   │ 敏感数据   │ ML团队     │ 零侵入     │ 路由+监控  │
└─────────────┴────────────┴────────────┴────────────┴────────────┴────────────┘

2025-2026新兴趋势:
  1. OpenTelemetry for LLM (OpenLLMetry)
     → 标准化LLM可观测性数据格式
     → 一次接入,多平台消费(类似传统OTEL)
     → 2025年生态快速成熟,多数平台已支持

  2. Braintrust
     → 2025年增长最快的LLM评估平台
     → 强项: Eval + Prompt Playground + Dataset管理
     → 适合质量敏感、频繁迭代的团队

  3. W&B Weave
     → Weights & Biases推出的LLM Tracing产品
     → 优势: 与W&B训练/实验管理无缝集成
     → 适合同时做训练和部署的团队

选型决策树

你的LLM可观测性平台该怎么选?

START
  │
  ├── 数据必须留在本地? (金融合规/隐私要求)
  │   ├── 是 → LangFuse (Docker自托管) 或 Phoenix (pip install)
  │   └── 否 ↓
  │
  ├── 已经用LangChain?
  │   ├── 是 → LangSmith (生态最深度集成)
  │   └── 否 ↓
  │
  ├── 需要AI Gateway功能? (多模型路由/Fallback)
  │   ├── 是 → Portkey (Gateway+监控一体)
  │   └── 否 ↓
  │
  ├── 希望零代码接入?
  │   ├── 是 → Helicone (改Base URL即可)
  │   └── 否 ↓
  │
  ├── 重点是Evaluation/质量?
  │   ├── 是 → Braintrust 或 Phoenix
  │   └── 否 ↓
  │
  └── 通用选择 → LangFuse (开源、灵活、社区活跃)

金融行业推荐组合:
  LangFuse(自托管) + Portkey(Gateway) + 自建成本Dashboard
  → LangFuse: 满足数据主权,Tracing+Eval
  → Portkey:  多模型路由+Fallback+成本控制
  → 自建:     成本归因到业务维度(按产品线/客户)

今日思考

思考1: 可观测性是LLM应用的"核心竞争力"而非"锦上添花"

很多团队的误区: "先把功能做出来,可观测性以后加"
  → 这在传统软件中勉强可行
  → 在LLM应用中会付出巨大代价

为什么LLM可观测性必须Day 1就建立:
  1. 成本不可预测: 没有监控,月底账单可能让你"心跳加速"
  2. 质量不可感知: 模型可能"悄悄变差",用户流失才发现
  3. 问题不可复现: LLM输出非确定性,没有日志就无法Debug
  4. 优化无从下手: 不知道延迟花在哪里,就无法优化

金融行业经验:
  银行系统从第一天就有完整的交易日志和监控
  → 不是因为"有时间",而是因为"没有这些就不能上线"
  → LLM应用应该用同样的标准要求自己

思考2: LLM-as-Judge的"信任但验证"

LLM-as-Judge解决了"大规模自动评估"的问题
但也引入了新的风险:

  1. Judge模型本身可能有偏见
     → GPT-4评分时可能偏好"GPT风格"的回答
     → 解决: 用不同提供商的模型交叉评估

  2. Judge Prompt的质量决定评估质量
     → 模糊的评分标准 → 不一致的评分
     → 解决: 精心设计、包含示例、定期校准

  3. 过度依赖自动评估可能"自我欺骗"
     → 自动评估说4.5分,但用户觉得不好用
     → 解决: 始终保持人工抽查(至少5%的样本)

  4. 评估成本也是成本
     → 每次用GPT-4评估一条回复约$0.01
     → 10万条/天 → $1000/天 的纯评估成本
     → 解决: 采样评估 + 轻量级模型做初筛

最佳实践:
  "信任自动评估的趋势,但验证具体分数"
  → 关注: 评分趋势是否下降(相对变化)
  → 抽查: 具体个案是否合理(绝对校准)

思考3: 从"监控"到"闭环" — 可观测性驱动优化

可观测性的最终目的不是"看到问题",而是"解决问题"

闭环优化流程:
  Monitor (监控) → Detect (发现) → Diagnose (诊断) → Fix (修复) → Verify (验证)

  具体示例:
  1. Monitor: 发现"合规审查"功能质量分从4.3降到3.8
  2. Detect:  定位到下降发生在4月10日
  3. Diagnose: 追溯发现4月10日RAG数据源更新了新法规文档
              → 新文档格式不同,Chunking效果变差
              → 检索到了错误的Context
  4. Fix:     调整Chunking策略,重新处理新文档
  5. Verify:  质量分恢复到4.4

  这个闭环的每一步都依赖可观测性:
  → 没有质量监控 → 不知道分数下降
  → 没有Tracing → 不知道是哪个环节的问题
  → 没有版本记录 → 不知道什么变更导致的
  → 没有回归测试 → 不知道修复是否有效

金融类比:
  银行的"运营风险管理": 事件发生 → 分析原因 → 改进流程 → 验证效果
  → LLM运维需要同样的PDCA循环

面试高频题

Q1: "如何为LLM应用设计可观测性方案?"

面试回答框架 (2分钟版):

"我会从四个层面设计LLM可观测性:

第一,基础设施层: 传统的Prometheus+Grafana监控CPU/内存/网络,
确保底层服务健康。

第二,请求链路层: 使用LangFuse或LangSmith做Tracing,
记录每次请求从输入到输出的完整链路——
包括Guardrail检查、Retrieval、LLM调用、Tool调用,
每个Span记录输入输出、耗时、Token数和成本。

第三,质量评估层: 这是LLM特有的,
通过LLM-as-Judge做异步质量评估,
监控Faithfulness、Relevance等维度的趋势,
同时收集用户反馈做校准。

第四,业务指标层: 把成本归因到功能和用户维度,
监控Cost/Request和Cost/User,
设置预算告警和异常检测。

关键是: 可观测性不是事后补的,
而是系统架构的一部分,从Day 1就要建立。
这和金融系统的交易监控思路一样——
不怕出问题,怕出了问题查不到原因。"

Q2: "LLM应用的质量如何持续监控?"

"LLM质量监控的核心挑战是: HTTP 200不代表回答正确。

我的方案是三层防线:

1. 实时检测: 输出时做轻量级检查——
   Grounding Check验证是否有据可查,
   PII检测防止泄露,格式验证确保结构正确。

2. 异步评估: 采样20-30%的请求,
   用更强的模型做LLM-as-Judge评分,
   监控质量趋势和异常。

3. 回归测试: 每次Prompt/模型/数据变更前,
   在Golden Dataset上跑基线对比,
   质量分下降超5%阻止部署。

同时维护一个Feedback Loop:
  用户反馈 → 标注数据 → 更新Golden Dataset → 校准Judge
  形成持续改进的闭环。"

Q3: "如何控制LLM应用的成本?"

"LLM成本控制我从监控和优化两个维度来做:

监控维度:
  1. 实时Token消耗仪表盘,按功能/模型/用户多维分解
  2. 预算告警: 日/周/月预算消耗到80%时预警
  3. 异常检测: 单请求成本或用户用量突增时告警

优化维度(这个Day 19会深入):
  1. 语义缓存: 相似问题复用历史回答,命中率30-40%
  2. 模型路由: 简单问题用小模型,复杂问题用大模型
  3. Prompt压缩: 减少不必要的Context,控制输入Token
  4. 批量处理: 非实时场景用Batch API,通常半价

关键认知: LLM成本不是固定的基础设施成本,
而是类似金融交易的'按量计费'——
需要用交易监控的思维来管理。"

资源推荐

必读

资源类型说明
LangFuse文档文档开源LLM可观测性平台,架构设计参考
LangSmith文档文档LangChain官方,功能最全面
OpenLLMetry开源OpenTelemetry for LLM,标准化方向
Hamel Husain: Your AI Product Needs Evals博客Eval体系设计的最佳实践文章

推荐

资源类型说明
Phoenix (Arize)开源ML+LLM可观测性,强Evaluation
Helicone工具零代码LLM监控,改一行URL即可
Portkey文档文档AI Gateway+可观测性一体化
Braintrust工具2025年增长最快的Eval平台
Eugene Yan: Patterns for Building LLM-based Systems博客LLM工程模式总结,监控部分很好
Anthropic: Evaluating AI Systems论文AI系统评估方法论
Weights & Biases Weave工具W&B的LLM Tracing产品
Confident AI: DeepEval开源LLM评估框架,支持多种评估器

实操建议

1. 搭建LangFuse(本地):
   docker compose up -d
   → 创建项目 → 获取API Key
   → 在代码中集成LangFuse SDK
   → 发送几次请求,在UI中查看Trace

2. 实现LLM-as-Judge:
   → 设计评分Prompt(包含维度和标准)
   → 用Claude/GPT-4评估一批历史回答
   → 与人工评分对比,校准Judge质量

3. 搭建成本Dashboard:
   → 在LangFuse/Helicone中查看Token统计
   → 按模型/功能维度分解成本
   → 设置一个简单的预算告警

4. 模拟Fallback测试:
   → 设置一个LLM调用的超时时间(如5s)
   → 人为制造超时(断网或调用不存在的模型)
   → 验证Fallback是否正确触发
   → 观察Trace中的Fallback记录

明日预告

Day 19: 成本优化 — Token经济学/缓存策略/模型路由

预习问题:
1. 如何在不损失质量的前提下降低LLM调用成本50%?
2. Semantic Cache的命中率取决于哪些因素?
3. 什么样的请求应该路由到大模型,什么应该路由到小模型?

连接点:
  Day 18(可观测性) → Day 19(成本优化)
  → 今天建立了成本监控体系,明天聚焦"如何降低成本"
  → 可观测性告诉你"钱花在哪了",成本优化告诉你"怎么少花钱"
  → 监控数据是优化决策的基础: 不能优化你看不到的东西