学习记录03——LangSmith

3 阅读8分钟

LangSmith 完全指南:给你的 LLM 应用装上“工程化引擎”

如果你正在构建基于大语言模型的应用,你一定碰到过这些问题:

  • 应用出错时,只知道最后结果错了,却搞不清楚是哪一步掉了链子;
  • 改了一个 Prompt,感觉效果好像变好了——但也可能只是错觉;
  • 上线之后用户反馈“回答不准”,但你却怎么也复现不出来。

这些痛点的根源在于:LLM 应用本质上是一个概率系统,传统的 debug 手段(断点、print 日志)在这里几乎失灵。而 LangChain 官方推出的 LangSmith,就是来解决这个问题的。

在这篇文章里,我会带你从零开始,弄清楚 LangSmith 是什么、它提供了哪些核心能力,并配合实战代码,演示如何用它来调试、评估和监控一个真实的多步骤 LLM 流水线。


一、LangSmith 是什么?

用一句话概括:

LangSmith 是一个面向 LLM 应用的全生命周期管理平台,覆盖开发调试、测试评估和生产监控三大阶段。

把它理解为 LLM 应用的“行车记录仪 + 智能阅卷官 + 监控预警中心”,一点也不夸张。

它最大的优势在于:几乎零侵入。只要你用 LangChain 或 LangGraph 构建应用,设置两个环境变量,所有执行细节就会自动上报到 LangSmith 平台。

export LANGCHAIN_TRACING_V2=true
export LANGCHAIN_API_KEY="ls__..."
export LANGCHAIN_PROJECT="contract-review"

不需要修改业务代码,所有链和图的执行都会被自动追踪。


二、以一个真实的流水线为例

为了把每个功能讲清楚,我们用一个 合同评审流水线 贯穿全文。这个流水线包含 8 个节点:

rag_node -> info_node -> completeness -> compliance -> risk -> consistency -> format -> scorer

即:知识库检索 → 关键信息提取 → 完整性检查 → 合规性检查 → 风险识别 → 一致性检查 → 格式检查 → 综合评分。

图定义的核心代码大致如下:

from langgraph.graph import StateGraph, END

graph = StateGraph(ContractReviewState)

graph.add_node("rag_node", rag_node)
graph.add_node("info_node", info_node)
graph.add_node("completeness", completeness_node)
graph.add_node("compliance", compliance_node)
graph.add_node("risk", risk_node)
graph.add_node("consistency", consistency_node)
graph.add_node("format", format_node)
graph.add_node("scorer", scorer_node)

graph.set_entry_point("rag_node")
graph.add_edge("rag_node", "info_node")
graph.add_edge("info_node", "completeness")
graph.add_edge("completeness", "compliance")
graph.add_edge("compliance", "risk")
graph.add_edge("risk", "consistency")
graph.add_edge("consistency", "format")
graph.add_edge("format", "scorer")
graph.add_edge("scorer", END)

app = graph.compile()

现在,我们来看看 LangSmith 如何帮我们把这条流水线从“摸黑运行”变成“透明可控”。


三、核心能力一:调试与可观测性

1. 自动追踪

只要设置了环境变量,每次执行 app.invoke(input),LangSmith 会自动生成一个 Trace,记录下整条流水线的运行全貌。

在 LangSmith 控制台中,你会看到一个树状结构:

📁 合同评审主流程 (总耗时 3.2s, 总 Token 4800)
 ├── 📄 rag_node (检索) 1.1s, 1200 token
 │    Input: "采购合同条款审查..."
 │    Output: [3份相关文档摘要]
 ├── 📄 info_node (信息提取) 0.5s, 800 token
 │    Input: [rag_node的输出]
 │    Output: {"合同金额":"100万","签订方":"A公司、B公司",...}
 ├── 📄 completeness (完整性检查) 0.3s, 400 token
 │    Input: [info_node输出]
 │    Output: {"是否完整": false, "缺失项": "验收标准"}
 ...
 └── 📄 scorer (评分) 0.2s
      Input: [前面所有节点的输出]
      Output: {"总分": 62}

你可以点开任意一个节点,查看它的完整输入输出、耗时和 Token 消耗。某个合同评分特别低?点开 completeness 节点,发现缺失了“验收标准”——问题节点直接定位,完全不用在代码里打 print

2. 零侵入的优势

这个能力的关键就在于“零侵入”。你写的业务代码里没有任何与 LangSmith 相关的 import 或装饰器。这对生产环境极其友好——你可以随时开关监控,而不影响核心逻辑。

此外,如果你使用的是 LCEL(LangChain Expression Language)构建的链,比如:

chain = prompt | llm | JsonOutputParser()

这种链的执行同样会被完整追踪,链的每一步(PromptTemplateLLMParser)都会作为独立的节点出现在 Trace 树中。


四、核心能力二:测试与评估

追踪帮你发现问题,但改完代码后如何判断效果?LangSmith 的评估体系让你用数据代替感觉

1. 构建数据集

你可以把一批“输入-期望输出”对构建成一个数据集,作为标准化的测试集。例如,收集 50 份历史合同,并附上人工打好的参考评分。这样你就有了一个名为“合同评审回归测试集 v1”的数据集。

2. 运行实验

假设你觉得合规性检查的 Prompt 太松,于是把 Prompt 从:

“请检查是否符合公司制度。”

改为:

“请严格逐条核对,列出所有违规点,并给出法条依据。”

现在想知道新 Prompt 是否真的更好,就可以创建一个实验,用同一个数据集分别跑旧版本和新版本,并使用评估器自动打分。

常用的评估器有:

  • LLM-as-Judge:用一个更强的 LLM(如 GPT-4)当“裁判”,对输出的正确性、相关性、有害性等维度打分。
  • 自定义代码评估器:比如精确匹配、正则检测等确定性规则。

实验跑完后的对比结果可能是这样:

实验合规准确率平均耗时
旧 Prompt (v1)78%0.4s
新 Prompt (v2)91%0.5s

结论一目了然:准确率大幅提升,耗时仅轻微增加,新 Prompt 可以放心上线。

3. 校准评估器

你可能会怀疑:LLM 裁判打分可靠吗?LangSmith 提供了 Align Evals 功能:你可以让人工对一部分结果进行判断,然后与 LLM 评估器的打分进行对比。平台会自动计算“对齐分数”,帮助你迭代评估提示词,让裁判打分越来越接近人类判断。

对于你的合同评审场景,这个闭环特别有价值——你可以让法务同事对少量样本进行人工仲裁,然后校准评估器,最终实现高度自动化的质量评测。


五、核心能力三:部署与生产监控

当应用上线后,LangSmith 会持续收集所有生产流量,提供实时的监控和告警。

1. 监控看板

打开监控面板,你可以看到:

  • 过去 24 小时处理了多少次评审
  • 平均延迟、P99 延迟
  • 错误率
  • Token 消耗与成本

2. 在线评估与智能告警

你可以设置一个在线评估器,让 LangSmith 对一部分真实流量自动打分。比如,随机抽取 10% 的请求,用 GPT-4 判断“合规检查的结论是否合理”。

然后设定告警规则:“过去 1 小时内,合规合理率低于 85% 就发送告警”。

一个真实场景是:某次上线时,你不小心把合规检查 Prompt 中的“请输出 JSON”删掉了,导致模型开始输出自然语言,下游解析失败,出现大量重试。LangSmith 会同时触发两条告警:

  • 平均延迟从 4 秒飙升到 10 秒
  • 合规合理率骤降至 72%

你立刻在 Trace 中定位到问题,紧急回滚,一切恢复正常。

3. 坏例反馈闭环

最有价值的是闭环能力:你可以把出错的 Trace 一键添加进数据集,加上标签 #badcase/合规格式错误。下次上线前,运行实验就必须通过这个用例。这样,你就建立了一套不断积累、自动回归的质量防线。


六、提示词工程能力

LangSmith 还把 Prompt 当作“一等公民”来管理,这在 LLM 应用开发中至关重要。

1. 提示词游乐场

在 Playground 中,你可以:

  • 载入某个节点的当前 Prompt
  • 实时修改并运行
  • 并排对比不同模型或不同 Prompt 的输出效果

对于合同评审的 compliance_node,你可以在 Playground 里快速测试 4~5 个 Prompt 变体,从中选出效果最好的版本。

2. 提示词中心

选定的 Prompt 可以保存为版本,比如 compliance-check-v2,并附上 commit message。以后如果有问题,可以随时查看历史版本,甚至一键回滚到 v1。这让 Prompt 的管理达到了代码管理的同等水平。


七、平台与企业级功能

对于团队和企业,LangSmith 还提供了更高级的平台能力:

  • 自托管部署:通过 Helm Charts 部署在自己的 Kubernetes 集群中,满足数据合规需求。
  • Fleet 集中管理:统一注册和管理组织内所有 Agent,实现集中治理。
  • 无代码 Agent 构建器:非技术人员也能通过拖拽界面构建简单的 LLM 应用。
  • 沙箱环境:在安全隔离的环境中测试 Agent,不影响生产。

八、总结:给你的 LLM 应用装上工程引擎

LangSmith 的每一个功能,都在解决一个特定的工程问题:

功能解决问题对应阶段
Tracing“模型到底在想什么?”开发调试
Evaluation“改完效果变好了吗?”测试评估
Monitoring“上线后一直在变差吗?”生产监控
Prompt Hub“谁改了Prompt?能回滚吗?”全周期
Datasets“这个Bug下次还会复现吗?”回归测试

对于你正在构建的多步骤合同评审流水线,LangSmith 的价值体现在三个层面:

  • 开发时:通过 Trace 树快速定位哪个节点出了错、慢在哪儿;
  • 测试时:用数据集和评估器量化每次 Prompt 或模型变更的影响;
  • 上线后:持续监控质量和性能,自动告警,形成反馈闭环。

LangSmith 不是锦上添花的监控工具,而是让 LLM 应用从“凭感觉的手工作坊”走向“工程化”的核心基础设施。