AI 应用可观测性:用 LangSmith + Phoenix 监控你的 Agent,别让 Bug 藏在黑盒里
TL;DRAI 应用上线后最怕「黑盒」——用户说答案不对你却不知道是 Prompt 问题、检索问题还是模型问题。本文讲清楚如何用 LangSmith 和 Phoenix 做 AI 应用的可观测性Trace 追踪、评估、调试附完整代码。1. 为什么 AI 应用需要可观测性传统应用出错看日志就能定位哪行报错、什么堆栈。AI 应用出错情况完全不同用户说「回答不对」——是检索到了错误文档还是 Prompt 写错还是模型幻觉成本突然飙升——是哪个环节多调了一次 LLM还是上下文窗口爆了效果时好时坏——同样的 Prompt不同输入结果差异巨大没有可观测性你就是在盲调。2. AI 可观测性的三层层级监控什么工具Trace链路追踪每次请求的完整调用链LangSmith / PhoenixMetric指标Token 消耗、延迟、成功率LangSmith / PrometheusEval评估回答质量、准确性评分LangSmith / Ragas3. LangSmithLangChain 官方可观测平台3.1 快速接入Python - 环境变量配置# .env 文件 LANGCHAIN_TRACING_V2true LANGCHAIN_API_KEYyour-langsmith-key LANGCHAIN_PROJECTmy-ai-app LANGCHAIN_ENDPOINThttps://api.smith.langchain.comPython - 自动追踪 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(modelgpt-4o) prompt PromptTemplate.from_template(用一句话解释 {concept}) chain LLMChain(llmllm, promptprompt) # 这个调用会自动出现在 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, k5) 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不绑定 LangChainLLM 专用内置 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 UIhttp://localhost:6006 px.launch_app() # 注册 tracer tracer_provider register(project_namemy-ai-app) LangChainInstrumentor().instrument(tracer_providertracer_provider) # 之后所有 LangChain 调用自动追踪 from langchain_openai import ChatOpenAI llm ChatOpenAI(modelgpt-4o) llm.invoke(你好) # 出现在 Phoenix UI4.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(modelgpt-4o) retrieved_documents [...] # 你的检索结果 queries [...] # 对应查询 relevance llm_classify( datazip(queries, retrieved_documents), modelmodel, templateRAG_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_namerag-test-set, llm_or_chain_factorylambda: chain, evaluationeval_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 怎么选维度LangSmithPhoenix部署SaaS有免费额度本地/自托管隐私数据上云数据本地评估功能强大Dataset Eval基础RAG 评估好上手难度低环境变量即可中需配置 OTel成本免费版够用付费贵开源免费⚠️ 注意生产环境涉及敏感数据用户对话、内部文档建议用 Phoenix 自托管数据不出内网。9. 总结AI 应用可观测性的核心价值把黑盒变成白盒。用户说「不对」→ 你能定位是哪个环节不对成本飙升 → 你能看到是哪个调用消耗的效果下降 → 你能量化对比历史版本入门建议开发阶段用 LangSmith5 分钟接入免费额度够用生产环境涉及隐私数据用 Phoenix 自托管。两者都支持 OpenTelemetry可以并存。如果对你有帮助欢迎在评论区聊聊你的 AI 应用监控方案。