TL;DR:AI 应用上线后最怕「黑盒」——用户说答案不对,你却不知道是 Prompt 问题、检索问题还是模型问题。本文讲清楚如何用 LangSmith 和 Phoenix 做 AI 应用的可观测性:Trace 追踪、评估、调试,附完整代码。

1. 为什么 AI 应用需要可观测性

传统应用出错,看日志就能定位:哪行报错、什么堆栈。

AI 应用出错,情况完全不同:

  • 用户说「回答不对」——是检索到了错误文档?还是 Prompt 写错?还是模型幻觉?
  • 成本突然飙升——是哪个环节多调了一次 LLM?还是上下文窗口爆了?
  • 效果时好时坏——同样的 Prompt,不同输入结果差异巨大

没有可观测性,你就是在盲调

2. AI 可观测性的三层

层级 监控什么 工具
Trace(链路追踪) 每次请求的完整调用链 LangSmith / Phoenix
Metric(指标) Token 消耗、延迟、成功率 LangSmith / Prometheus
Eval(评估) 回答质量、准确性评分 LangSmith / Ragas

3. LangSmith:LangChain 官方可观测平台

3.1 快速接入

Python - 环境变量配置

# .env 文件
LANGCHAIN_TRACING_V2=true
LANGCHAIN_API_KEY="your-langsmith-key"
LANGCHAIN_PROJECT="my-ai-app"
LANGCHAIN_ENDPOINT="https://api.smith.langchain.com"

Python - 自动追踪 LangChain 调用

import os
from langchain_openai import ChatOpenAI
from langchain.chains import LLMChain
from langchain_core.prompts import PromptTemplate

# 设置环境变量后,LangChain 调用会自动上报到 LangSmith
os.environ["LANGCHAIN_TRACING_V2"] = "true"
os.environ["LANGCHAIN_API_KEY"] = "your-key"
os.environ["LANGCHAIN_PROJECT"] = "my-ai-app"

llm = ChatOpenAI(model="gpt-4o")
prompt = PromptTemplate.from_template("用一句话解释 {concept}")
chain = LLMChain(llm=llm, prompt=prompt)

# 这个调用会自动出现在 LangSmith 的 Trace 面板
chain.invoke({"concept": "向量数据库"})

3.2 手动追踪自定义函数

Python - @traceable 装饰器

from langsmith import traceable

"检索知识库")
def retrieve(query: str) -> list:
    """这个函数会被 LangSmith 记录为 Trace 的一个节点"""
    results = vectorstore.similarity_search(query, k=5)
    return [doc.page_content for doc in results]

"生成回答")
def generate(query: str, context: list) -> str:
    prompt = build_prompt(query, context)
    return llm.invoke(prompt).content

# 调用后,LangSmith 会显示完整的调用树
context = retrieve("公司报销流程")
answer = generate("公司报销流程", context)

3.3 LangSmith 能看到的

  • 每次请求的完整链路:检索 → 拼接 Prompt → LLM 调用 → 输出
  • 每个节点的耗时和 Token 消耗
  • 输入输出对比:检索到了什么、Prompt 拼成了什么
  • 错误定位:哪一步失败了、为什么

4. Phoenix:开源 LLM 可观测性

4.1 特点

  • 完全开源:数据保存在你本地,隐私可控
  • 支持 OpenTelemetry:不绑定 LangChain
  • LLM 专用:内置 Embedding 可视化、RAG 评估
  • 免费:无需 SaaS 账号

4.2 快速接入

Python - Phoenix + OpenInference

# 安装
# pip install arize-phoenix openinference-instrumentation-langchain

import phoenix as px
from openinference.instrumentation.langchain import LangChainInstrumentor
from phoenix.otel import register

# 启动 Phoenix(本地 Web UI:http://localhost:6006)
px.launch_app()

# 注册 tracer
tracer_provider = register(project_name="my-ai-app")
LangChainInstrumentor().instrument(tracer_provider=tracer_provider)

# 之后所有 LangChain 调用自动追踪
from langchain_openai import ChatOpenAI
llm = ChatOpenAI(model="gpt-4o")
llm.invoke("你好")  # 出现在 Phoenix UI

4.3 Phoenix 的独特能力

Embedding 投影可视化:把检索到的文档向量投影到 2D 平面,直观看检索质量。

Python - Embedding 可视化

import phoenix as px
from phoenix.experimental.evals import (
    OpenAIModel,
    llm_classify,
    RAG_RELEVANCY_PROMPT_TEMPLATE,
)

# 自动评估 RAG 检索相关性
model = OpenAIModel(model="gpt-4o")
retrieved_documents = [...]  # 你的检索结果
queries = [...]  # 对应查询

relevance = llm_classify(
    data=zip(queries, retrieved_documents),
    model=model,
    template=RAG_RELEVANCY_PROMPT_TEMPLATE,
    rails=["relevant", "irrelevant"]
)

print(relevance)

5. 用 LangSmith 做自动化评估

不止看 Trace,还要量化质量。

Python - 定义评估函数

from langsmith import Client
from langchain.smith import RunEvalConfig

client = Client()

# 定义评估器:检查回答是否包含关键信息
def contains_source(run, example) -> dict:
    """检查回答是否引用了来源"""
    output = run.outputs.get("output", "")
    has_source = "来源" in output or "[" in output
    return {"score": 1 if has_source else 0}

# 运行评估
eval_config = RunEvalConfig(
    evaluators=[contains_source],
    custom_evaluators=[]
)

client.run_on_dataset(
    dataset_name="rag-test-set",
    llm_or_chain_factory=lambda: chain,
    evaluation=eval_config,
)

6. 生产环境监控指标

指标 预警阈值 排查方向
平均延迟 > 5s 检索慢 / 模型慢 / 网络
单次 Token 消耗 > 5000 上下文窗口膨胀 / 检索过多
错误率 > 2% API Key / 模型限流 / 代码 Bug
检索命中率 < 70% 切分策略 / Embedding 模型
回答准确率 < 85% Prompt / 检索质量 / 模型

7. 实战:定位一个真实 Bug

问题:用户反馈「问报销流程,有时答非所问」

用 LangSmith 排查:

  1. 打开 Trace 面板,筛选「回答不准确」的请求
  2. 发现检索节点返回了「差旅标准」文档,而非「报销流程」
  3. 查看 Embedding 相似度:0.72(偏低,正常应 > 0.85)
  4. 结论:query 和文档语义偏差,需优化切分或换 Embedding 模型

修复:改用 BGE-M3 中文 Embedding,相似度提升到 0.91,准确率恢复 96%

8. LangSmith vs Phoenix 怎么选

维度 LangSmith Phoenix
部署 SaaS(有免费额度) 本地/自托管
隐私 数据上云 数据本地
评估功能 强大(Dataset + Eval) 基础(RAG 评估好)
上手难度 低(环境变量即可) 中(需配置 OTel)
成本 免费版够用,付费贵 开源免费

⚠️ 注意:生产环境涉及敏感数据(用户对话、内部文档),建议用 Phoenix 自托管,数据不出内网。

9. 总结

AI 应用可观测性的核心价值:把黑盒变成白盒

  • 用户说「不对」→ 你能定位是哪个环节不对
  • 成本飙升 → 你能看到是哪个调用消耗的
  • 效果下降 → 你能量化对比历史版本
入门建议:开发阶段用 LangSmith(5 分钟接入,免费额度够用);生产环境涉及隐私数据,用 Phoenix 自托管。两者都支持 OpenTelemetry,可以并存。

如果对你有帮助,欢迎在评论区聊聊你的 AI 应用监控方案。

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐