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(成本优化)
→ 今天建立了成本监控体系,明天聚焦"如何降低成本"
→ 可观测性告诉你"钱花在哪了",成本优化告诉你"怎么少花钱"
→ 监控数据是优化决策的基础: 不能优化你看不到的东西