AI 应用可观测性:用 LangSmith + Phoenix 监控你的 Agent,别让 Bug 藏在黑盒里
·
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 排查:
- 打开 Trace 面板,筛选「回答不准确」的请求
- 发现检索节点返回了「差旅标准」文档,而非「报销流程」
- 查看 Embedding 相似度:0.72(偏低,正常应 > 0.85)
- 结论: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 应用监控方案。
更多推荐


所有评论(0)