Skip to content

可观测性与 LLM 追踪

五层读懂一个词。这次拆的是:LLM 可观测性--从「能跑」到「可控」的关键一跃。LLM 调用栈不是传统的请求-响应,而是 LLM 调用 → 工具调用 → 检索 → 又一轮 LLM → 输出——一条链可能十几次 API 调用。可观测性 = 追踪(Trace 每条链的每一步)+ 评估(自动打分)+ 监控(异常告警)+ 调试(定位问题)。核心工具:LangSmith / Langfuse / Weights & Biases / OpenTelemetry。


L1 · 一句话点破

LLM 可观测性 = 分布式追踪 + 质量评估 + 成本监控 + 异常告警的融合。因为 LLM 应用不是单体函数调用,而是一串 LLM/检索/工具调用的 pipeline——你需要看到每一步的输入、输出、延迟、token 消耗、中间结果。LangSmith(LangChain 生态)和 Langfuse(开源、自托管)是当前两大主流方案。没有可观测性,LLM 应用上线就是盲飞。


L2 · 通俗类比

传统应用的监控很简单:

[请求] → [查数据库] → [返回响应]

    延迟 10ms,结果 1 条

监控延迟、错误率、吞吐量就够了。

LLM 应用的监控像「团队协作项目」的追踪

用户: "分析这份财报" →
  [LLM 调用 1: 理解任务, 0.5s, 200 token] →
  [检索: 向量搜索, 0.1s, 5 docs] →
  [LLM 调用 2: 分析文档 1-2, 1.2s, 500 token] →
  [工具调用: 计算器, 0.05s] →
  [LLM 调用 3: 综合所有分析, 0.8s, 400 token] →
  输出: "这份财报显示..."

你需要知道:

  • 每一步花了多少时间?(慢在哪一步)
  • 每一步消耗了多少 token?(成本多少)
  • 检索到了什么?(搜对了吗)
  • LLM 中途的思考是什么?(中间结果对了吗)
  • 最终质量怎么样?(Faithfulness / Relevance)

LangSmith/Langfuse = 为 LLM 管道装的「行车记录仪」

  • 记录每一步的输入输出
  • 可视化整个调用链
  • 自动评分
  • 发现问题时可以回放整个 trace

三支柱

支柱语言具体
Trace(追踪)查调用链每个请求的完整链路
Evaluate(评估)测质量自动打分 + 人工标注
Monitor(监控)看趋势延迟/cost/质量曲线

对比

维度传统监控(Datadog/Prometheus)LLM 可观测性(LangSmith/Langfuse)
追踪粒度服务级(API 延迟)调用级(每次 LLM/检索/工具)
评估内容错误率/延迟/吞吐+ token 消耗 + 质量分数 + 忠实度
调试方式看日志 → grep看 trace 树 → 点开每一步
数据形式JSON 日志结构化 Trace(input/output/metadata)

代价

  • 集成成本(框架适配)
  • 额外的延迟(trace 上报有少量开销)
  • 工具成熟度(LLM 可观测性仍在快速迭代)
  • 数据隐私(trace 数据可能包含敏感内容)

适用

  • 所有 LLM 应用的开发、测试、上线
  • RAG 管道的质量监控
  • Agent 系统的行为审计
  • 成本分析(哪个环节最费 token)

L3 · 正经定义

LLM 可观测性(LLM Observability):指对 LLM 应用的内部运行状态进行结构化记录、可视化和分析的能力。核心包括:

  • Trace:记录一次请求的完整调用链路(LLM 调用、检索、工具调用、中间结果),树状结构
  • Span:Trace 中的单个步骤(如一次 LLM 调用、一次检索)
  • Feedback:对 Trace 输出的人工或自动评分(如 thumbs up/down、RAGAS 分数)
  • Monitor:在反馈和指标之上构建的监控面板和告警

主流工具

工具定位开源核心特色
LangSmithLangChain 官方❌(SaaS)LangChain 深度集成
Langfuse开源可观测性自托管、OAS 兼容
Weights & BiasesMLOps部分Traces + 模型训练
OpenTelemetry通用标准厂商中立
HeliconeLLM API 代理轻量、API 层
Phoenix (Arize)LLM 可观测Embedding 可视化
BraintrustLLM 评估平台Eval-driven 开发

参考资料


L4 · 原理深挖

4.1 Trace 的核心结构

Trace = 树状的 Span 层级

Trace (run_id: xxx, user: "alice", session: "chat-123")
├── Span: LLM Call (name: "gpt-4", model: "gpt-4", tokens: 350)
│   input: "分析财报..."
│   output: "我需要先搜索相关数据..."

├── Span: Retriever (name: "vector_search", top_k: 3)
│   input: "Q3 财报 营收"
│   output: [{doc_1}, {doc_2}, {doc_3}]

├── Span: LLM Call (name: "gpt-4", model: "gpt-4", tokens: 1200)
│   input: [检索结果 + 分析指令]
│   output: "根据财报数据,Q3 营收增长了 15%..."

└── Span: Tool (name: "calculator")
    input: "15 / 100 * 100"
    output: "15"

每个 Span 记录

  • name:步骤名(LLM 调用 / 检索 / 工具)
  • input / output:该步骤的输入输出
  • metadata:模型名、参数、token 数、延迟
  • parent_span_id:父子关系
  • error:如果失败,记录错误信息

4.2 LangSmith 集成示例

python
from langsmith import traceable, Client

# 自动追踪
@traceable(name="rag_pipeline")
def rag_pipeline(question: str):
    # Step 1: 检索
    docs = search(question)
    # Step 2: 生成
    answer = llm.generate(question, docs)
    return answer

# 或显式记录
from langsmith import trace

with trace(name="user_query", inputs={"question": question}) as rt:
    docs = search(question)
    rt.add_metadata({"num_docs": len(docs)})

    answer = llm.generate(question, docs)
    rt.end(outputs={"answer": answer, "num_tokens": 350})

在 LangSmith UI 中查看

  • Trace 瀑布图(每步的延迟和重叠)
  • 搜索/筛选(找所有 Faithfulness < 0.5 的 trace)
  • 对比两个 trace(查看 A/B 测试差异)
  • 添加人工标注(👍 / 👎 + 理由)

4.3 Langfuse 集成示例

python
from langfuse import Langfuse

langfuse = Langfuse(
    public_key="pk-...",
    secret_key="sk-...",
)

# 创建 trace
trace = langfuse.trace(
    name="rag_pipeline",
    user_id="user_123",
    session_id="chat_456",
)

# 添加 span
span = trace.span(
    name="retrieve",
    input={"query": question},
)
docs = search(question)
span.end(output={"documents": docs})

span2 = trace.span(
    name="generate",
    input={"question": question, "documents": docs},
)
answer = llm.generate(question, docs)
span2.end(
    output={"answer": answer},
    metadata={"model": "gpt-4", "tokens": 350, "latency_ms": 800},
)

# 评分
trace.score(name="faithfulness", value=0.85)
trace.score(name="user_feedback", value=1)  # 👍

Langfuse 的优势

  • 开源可自托管(数据不出企业)
  • OpenAI API 格式兼容(可作代理自动追踪)
  • 自带评估功能(可关联 RAGAS/LangChain eval)
  • 成本追踪(按 model × tokens 自动计算花费)

4.4 评估(Evaluation)

在线评估(每次请求自动评分):

python
# 每次 RAG 调用后自动打分
score = ragas.evaluate(question, answer, contexts)
langfuse.score(
    trace_id=trace.id,
    name="ragas_faithfulness",
    value=score["faithfulness"],
)
langfuse.score(
    trace_id=trace.id,
    name="ragas_relevance",
    value=score["answer_relevancy"],
)

离线评估(定期全量评估):

python
# 每晚从生产日志中采样 100 条
samples = get_production_samples(n=100)
eval_result = evaluate(samples, metrics)

# 对比上周
if eval_result["faithfulness"] < last_week * 0.9:
    alert("Faithfulness degradation detected")

人工评估(关键 case 人工复核):

  • LangSmith/Langfuse 提供标注队列
  • 对自动评分低的 case 做人工复核
  • 积累人工标注数据 → 改进自动评估

4.5 监控(Monitoring)

关键指标

指标类型指标告警条件
质量Faithfulness< 0.7 持续 1 小时
质量Answer Relevance< 0.6
延迟P99 LLM 延迟> 5s
延迟P99 总延迟> 10s
成本每小时 token 消耗> 预算 × 1.2
成本每次请求平均成本> $0.01
错误LLM 调用失败率> 1%
错误检索返回空率> 5%

Dashboards

  • 延迟分布(P50/P90/P99)
  • 成本趋势(按日/按模型/按用户)
  • 质量趋势(Faithfulness/Relevance 随时间变化)
  • 用户反馈(👍/👎 比例)
  • Token 消耗热力图(哪个环节最费 token)

4.6 成本追踪

LLM 调用的成本不可忽视

python
# 自动追踪每个请求的成本
cost = (
    prompt_tokens / 1000 * PROMPT_PRICE +
    completion_tokens / 1000 * COMPLETION_PRICE
)

# GPT-4: prompt $0.03/K, completion $0.06/K
# 一个 RAG 请求: 500 prompt + 200 completion + 2 次检索
# = 0.7K prompt tokens × 2 + 0.2K completion × 2
# = $0.042 + $0.024 = $0.066/请求
# 1 万次请求/天 = $660/天 = $20,000/月

成本优化

  • 用 LangSmith/Langfuse 的 cost 面板识别最费钱的环节
  • 是否检索太多文档(top_k 设太大)
  • 是否 Prompt 太长(减少 few-shot 示例数)
  • 是否 LLM 调用太多(Agent 循环过度)

4.7 调试

典型调试流程

用户反馈: "RAG 回答不对"

1. 在 LangSmith 搜索该用户的 session_id
2. 找到对应的 trace
3. 展开 trace,查看每一步:
   - 检索到了什么?(Context Precision 低?)
   - LLM 的中间推理是什么?
   - Token 消耗正常吗?
4. 定位问题 → 修复 → 重新部署
5. 对这类 case 添加回归测试

常见问题定位

现象在 Trace 中看什么
回答不对检查检索结果是否包含正确信息
回答太慢查看 LLM 调用的延迟占比
成本暴涨查看 token 消耗异常的那一步
Agent 循环不停止查看循环的 Span 数量和 Thought
输出格式错查看最后一步 LLM 的 output

4.8 局限

局限 1: 数据隐私。Trace 中可能有用户输入、文档内容等敏感信息。自托管 Langfuse 是更好选择。

局限 2: 额外的延迟。trace 上报增加 ~50-200ms(取决于网络和工具)。对延迟敏感的场景要注意。

局限 3: 工具碎片化。LangSmith/Langfuse/W&B/Helicone/Phoenix——生态不统一,切换成本高。

局限 4: 自动评估的准确性。LLM-as-Judge 评分 ~85% 准确,不是 100%。

局限 5: 只追踪框架内的调用。原生 OpenAI API 调用需要手动插桩。

局限 6: 告警阈值调优。太敏感 → alert fatigue,太宽松 → 漏掉问题。

局限 7: 历史数据管理。Trace 数据量大(每天万级),存储成本高。

局限 8: 隐私合规(GDPR 等)。Trace 中可能有 PII,需要考虑数据治理。


L5 · 沿革与坑

5.1 沿革

  • 2023-07:LangSmith 内测(LangChain),首次提出 LLM 可观测性概念
  • 2023-09:Langfuse 开源,自托管替代方案
  • 2023-12:Helicone 发布,API 层轻量追踪
  • 2024-02:LangSmith GA,添加自动评估和人工标注
  • 2024-03:OpenTelemetry GenAI 工作组成立(标准化 LLM trace 语义)
  • 2024 中:W&B Weave、Arize Phoenix 等加入
  • 2024-2025:LLM 可观测性从「nice-to-have」变为「必备」

5.2 常见坑

坑 1: 上线了 LLM 应用但不加可观测性。出了问题无法排查。上线前就集成。

坑 2: 只追踪 LLM 调用不追踪检索。定位不全面。检索质量是 RAG 的关键。

坑 3: 把 token 消耗等同于用户输入。系统消息、历史对话等都消耗 token。要全量追踪。

坑 4: 监控告警阈值拍脑袋。设了阈值但没验证 → alert 没意义。要基于历史数据设 P95/P99。

坑 5: 不做定期离线评估。在线反馈稀疏(用户很少点 👍/👎),需要离线批量评估补足。

坑 6: LangSmith vs Langfuse 纠结太久。两个都行。要自托管选 Langfuse,和 LangChain 深度绑定选 LangSmith。

坑 7: 忽略 trace 的存储成本。每天几十万的 trace,存储量 TB 级。要设保留策略。

坑 8: 生成评估的 prompt 不看。自动评估用的 prompt 是默认的,可能不适合你的领域。要定制。

坑 9: 用户反馈收集不做结构化。👍/👎 太粗糙。让用户写一句话说明为什么差。

坑 10: 看成本指标但不管。成本涨了 50% 但质量没涨?要分析每类请求的 ROI。

坑 11: 离线评估用不同模型。评估用的 LLM 和生产环境不同 → 指标不可比。要统一。

坑 12: A/B 测试不做可观测性对比。换了个 RAG 策略但不知道效果。要在 trace 上加 tag 区分。

5.3 面试怎么考

  1. LLM 可观测性包含什么? 答:Trace(完整调用链记录)、Evaluate(自动/人工评分)、Monitor(指标趋势+告警)、Cost(token 消耗)。四者融合,不是单独的日志系统。
  2. LangSmith 和 Langfuse 的区别? 答:LangSmith 是 LangChain 官方 SaaS,与 LangChain 深度集成;Langfuse 开源可自托管,兼容 OpenAI API。前者方便,后者灵活。
  3. 一个 RAG Trace 里有哪些 Span? 答:用户请求 → LLM 规划 → 检索(向量搜索)→ LLM 生成 → (可选工具调用)→ 最终回复。也有评估 Span(事后打分)。
  4. 可观测性怎么帮助调试? 答:用户反馈问题 → 搜 session 找到 trace → 展开每一步的输入/输出 → 定位问题(检索错误?LLM 编造?)→ 修复 → 回归验证。
  5. Cost 追踪为什么重要? 答:LLM 应用的成本是隐藏的(token 消耗),不同请求成本差异大(Agent 循环 vs 简单 QA)。追踪成本才能优化 ROI。

速记卡

可观测性三支柱 + 成本

Trace(追踪): 树状记录每个请求的完整链路
Evaluate(评估): 自动打分 + 人工标注
Monitor(监控): 指标趋势 + 异常告警
Cost(成本): token 消耗 + 费用归因

Trace 树示例

Trace
├── Span: LLM Call (0.5s, 200 tok)
├── Span: Retriever (0.1s, 5 docs)
├── Span: LLM Call (1.2s, 500 tok)
├── Span: Tool (0.05s)
└── Span: LLM Call (0.8s, 400 tok)

主流工具

工具开源特点
LangSmith❌ SaaSLangChain 深度集成
Langfuse自托管,OAS 兼容
W&B Weave部分Traces + 模型训练
HeliconeAPI 层轻量
PhoenixEmbedding 可视化

关键监控指标

维度指标
质量Faithfulness, Relevance
延迟P50/P99 LLM延迟, 总延迟
成本Token消耗/请求, $/天
错误LLM失败率, 检索空率

一句话记忆:LLM 可观测性 = Trace(完整调用链)+ Evaluate(质量评分)+ Monitor(指标告警)+ Cost(token 成本)。因为 LLM 应用是多步 pipeline(LLM→检索→LLM→工具→LLM),需要看到每一步的输入、输出、延迟、token。LangSmith(SaaS + LangChain 深度集成)和 Langfuse(开源自托管 + OpenAI 兼容)是两大主流。没有可观测性 = LLM 应用盲飞。用于开发期调试、上线期监控、迭代期 A/B 对比。局限:数据隐私、额外延迟、自动评估 85% 准确、工具碎片化。


上一篇:RAGAS RAG 评估框架 -- RAGAS 测 RAG 质量,可观测性把它集成到生产监控中。下一篇预告:多模态专题 -- ViT / CLIP / Stable Diffusion / 多模态 LLM,从文本走向视觉。

内容采用 CC BY-SA 4.0,代码采用 MIT。