LangSmith:Observability、Evals 与 Deployment 指南
如果已经开始做 LLM App 或 Agent,很快会遇到几个很现实的问题:
- 这次回答为什么错了
- 是 prompt 有问题,还是工具调用有问题
- 这次改动到底让系统变好了,还是只是碰巧看起来不错
- 本地能跑,为什么一上线就开始出现奇怪问题
LangSmith 想解决的,就是这类“从开发到上线”的工程化问题。
基于官方文档,LangSmith 的定位可以概括成一句话:
它是一个与框架无关的平台,用来构建、调试、评估和部署 AI Agent 与 LLM 应用。
官方文档把它的主线能力分成几块:
Observability:看清系统每一步是怎么跑的Evaluation:系统化判断质量有没有变好Deployment:把 Agent 作为可运行服务部署到生产环境Platform setup:决定你用云托管、混合部署还是自托管
这篇文档重点放在 Observability / Evaluation / Deployment,因为这三块最容易和本专题现有的 Evals / Harness / Observability 体系形成对应关系。
1. 定位
LangSmith 不是单一 SDK,也不只是 trace 可视化工具。
它更准确的定位,是一层围绕 AI 应用运行、调试、评估、发布 的平台能力。
按照官方首页的说法,它支持:
- trace request
- evaluate outputs
- test prompts
- manage deployments
并且它是 framework-agnostic 的。
这一点很重要,因为它并不要求必须使用 LangChain 才能接入。官方文档明确支持多种 provider 和 framework,也支持手动埋点:
- 可以拿它观察 LangChain / LangGraph
- 也可以拿它观察 OpenAI、Anthropic、CrewAI 一类集成
- 如果是自研 runtime,也可以手动把 trace 送进去
所以不要把 LangSmith 理解成“LangChain 的附属工具”。
更合适的理解是,它是一套偏平台层的 AI 工程基础设施。
2. Observability、Evaluation、Deployment 各自负责什么
LangSmith 可以看成三层连续能力。
2.1 Observability:先看清发生了什么
这一层解决的是:
- 每次请求经过了哪些步骤
- 哪一步调用了模型
- 哪一步调用了工具
- 输入、输出、耗时、元数据分别是什么
- 线上问题到底卡在什么地方
官方文档把这一层描述为:
- instrument your LLM application
- investigate traces
- monitor performance in production
Observability 不只是日志存储,而是:
Tracing:记录执行轨迹Trace inspection:在 UI 或 API 里查、过滤、对比轨迹Monitoring:做 dashboard、alert、insightsAutomation:规则、webhook、在线评估Feedback collection:把人工反馈和 trace 关联起来
2.2 Evaluation:再判断系统有没有变好
这一层解决的是:
- 新 prompt 是否优于旧 prompt
- 新 agent 版本是否退化了
- 某类任务是否稳定改善
- 线上真实流量里有没有持续出现质量问题
LangSmith 官方把评估分成两类:
Offline Evaluation:上线前,用数据集做离线实验Online Evaluation:上线后,对真实运行流量做实时评估
官方给出的离线评估流程很清楚:
- 创建数据集
- 定义 evaluators
- 跑 experiment
- 分析结果
而线上评估更接近:
- 应用已部署并产生真实 run
- 在生产 trace 上自动执行 evaluators
- 实时监控异常
- 把失败案例回流进数据集
所以它不是“做一次打分”而已,而是一整套闭环。
2.3 Deployment:把 agent 运行时带到生产环境
这一层解决的是:
- Agent 不是普通无状态接口时,怎么稳定上线
- 长时运行、流式输出、并发执行怎么托管
- 怎么把本地开发、调试、部署串成同一条链路
官方把 LangSmith Deployment 定位为:
一个面向 agent workload 的 workflow orchestration runtime。
它强调的不是“帮你找个地方把 Python 服务挂起来”,而是针对 Agent 场景提供:
- durable execution
- real-time streaming
- horizontal scaling
- 从本地开发到部署的完整生命周期支持
如果系统只是一个很简单的短请求文本接口,这一层可能还不是最先需要的。
但如果已经进入:
- 多步 agent
- 持久状态
- 长任务执行
- 人工中断 / 恢复
- 多轮线程管理
那 Deployment 才会开始体现出价值。
3. Trace 是什么,为什么重要
这是理解 LangSmith 的关键。
很多人第一次看 LangSmith,会觉得它只是“把一次调用记录下来”。
但在官方概念里,它有一套比较清楚的数据结构:
Project:某个应用或服务的轨迹容器Trace:一次 operation 的完整执行轨迹Run:轨迹中的单个工作单元,类似一个 spanThread:把多轮对话中的多个 trace 串起来
3.1 Trace 记录的是“一次任务从输入到输出经历了什么”
比如一个请求经过:
- 接收用户问题
- 改写查询
- 检索知识库
- 调模型总结
- 调工具补信息
- 生成最终答案
那这些步骤不应该只体现在零散日志里,而应该被组织成一条可回放、可比较、可过滤的执行链。
这条链,就是 trace。
3.2 Run 记录的是“其中某一个具体动作”
官方把 run 解释为单个工作单元,可能是:
- 一次 LLM 调用
- 一次 prompt format
- 一次 retrieval
- 一次工具执行
- 任何离散的应用步骤
如果把 trace 理解成整场比赛,run 更接近其中每一个回合。
3.3 Thread 解决的是“多轮对话怎么串起来看”
在多轮 agent 或 assistant 场景里,单看某一轮往往不够。
通常还会想知道:
- 这轮错误是不是前几轮状态污染导致的
- 用户是不是前面已经给过关键信息
- 某个坏结果是不是长期累积出来的
这时 thread 就很有用。官方做法是用共享标识把多条 trace 连成一个会话序列。
4. Trace 能解决什么问题
如果只看最终输出,很多问题其实定位不到。
而 trace 的价值,就在于把“失败发生在哪里”暴露出来。
4.1 定位工具调用问题
例如:
- 工具选错了
- 工具参数错了
- 工具返回值为空
- 工具报错后被静默吞掉
- 拿到工具结果后模型没真正使用
这些问题只看最终回答,往往只能看到“答案不太对”。
看 trace 才能知道到底是:
- decision 错
- action 错
- observation 错
- synthesis 错
4.2 定位 RAG 问题
例如:
- 检索召回不准
- 检索到了正确信息但回答没引用
- query rewrite 把问题改偏了
- rerank 逻辑反而把好文档压掉了
如果没有 trace,你只能猜。
有 trace 之后,可以逐步看:
- 改写后的 query 是什么
- 返回了哪些文档
- 模型最终看到了哪些上下文
- 最终答案和上下文之间有没有脱节
4.3 定位 Agent 轨迹问题
例如:
- 第一步目标理解就错了
- 中间进入重复循环
- 提前停止
- 明明已经完成还继续多跑
- 多轮状态丢失
这些都属于典型的 agent runtime 问题,而不是单纯的模型问答问题。
4.4 让评估更可解释
很多评估系统只能告诉你:
- 这条样本得分低
但它不一定告诉你:
- 为什么低
- 低在哪一步
- 是检索问题、工具问题还是推理问题
有 trace 之后,eval 不再只是分数,还能回到具体执行过程做复盘。