什么是 LangSmith
LangSmith 是 LangChain 团队推出的 LLM 应用可观测性与评估平台,用于追踪(trace)、调试、测试和监控基于 LLM 的应用。它不要求应用一定使用 LangChain 或 LangGraph 构建——任何调用 LLM 的代码都可以接入 LangSmith,但与 LangChain / LangGraph 的集成是开箱即用的。
核心定位:LLM 应用的"生产环境可观测性 + 离线评估"工具,解决 LLM 应用调试困难、行为不透明、质量难以量化的问题。
官方仓库 / 产品:langchain-ai/langsmith-sdk(SDK 开源,平台本身为托管 SaaS,也提供自托管方案)。
为什么需要 LangSmith
传统软件的日志和监控体系(APM、ELK 等)不足以覆盖 LLM 应用的调试需求:
- 多步骤链路不透明:一次 Agent 调用可能包含多次 LLM 请求、工具调用、检索操作,普通日志难以还原完整调用树
- Prompt 调试依赖人工:Prompt 的微小改动可能显著影响输出质量,缺乏系统化的对比手段
- 输出质量难以量化:LLM 输出是非确定性的自然语言,传统的断言测试不适用
- 成本和延迟不可见:Token 消耗、模型延迟分散在各次调用中,难以聚合分析
LangSmith 针对这些痛点提供了追踪、数据集管理、评估和监控能力。
核心功能
1. Tracing(追踪)
记录一次请求内所有 LLM 调用、工具调用、检索操作的完整调用树,包括输入、输出、耗时、Token 用量。
import os
os.environ["LANGCHAIN_TRACING_V2"] = "true"
os.environ["LANGCHAIN_API_KEY"] = "your-api-key"
os.environ["LANGCHAIN_PROJECT"] = "my-project"
# LangChain / LangGraph applications are traced automatically
# once the environment variables above are set
from langchain_openai import ChatOpenAI
llm = ChatOpenAI(model="gpt-4")
result = llm.invoke("Explain what LangSmith does")
对于不使用 LangChain 的代码,可以用 @traceable 装饰器手动接入:
from langsmith import traceable
@traceable
def retrieve_documents(query: str) -> list[str]:
# custom retrieval logic
return search_index(query)
@traceable
def generate_answer(query: str, docs: list[str]) -> str:
# custom LLM call
return call_llm(query, docs)
2. Datasets(数据集)
将真实调用中的输入输出保存为测试用例,用于回归测试和评估。
from langsmith import Client
client = Client()
dataset = client.create_dataset(
dataset_name="qa-eval-set",
description="Regression set collected from production traces"
)
client.create_example(
inputs={"question": "What is LangSmith?"},
outputs={"answer": "An LLM observability and evaluation platform."},
dataset_id=dataset.id,
)
3. Evaluation(评估)
对数据集运行自动化评估,支持内置评估器(如正确性、相关性)和自定义评估函数,也支持用另一个 LLM 作为评委(LLM-as-judge)。
from langsmith.evaluation import evaluate
def correctness_evaluator(run, example):
predicted = run.outputs["answer"]
expected = example.outputs["answer"]
score = 1.0 if predicted.strip() == expected.strip() else 0.0
return {"key": "correctness", "score": score}
results = evaluate(
lambda inputs: {"answer": generate_answer(inputs["question"], [])},
data="qa-eval-set",
evaluators=[correctness_evaluator],
)
4. Monitoring(监控)
生产环境的实时监控面板,展示请求量、延迟、错误率、Token 消耗和成本趋势,支持按 tag、metadata 过滤。
5. Prompt Hub
集中管理和版本化 Prompt 模板,支持团队协作和 Prompt 的 A/B 对比。
与 LangGraph 集成
LangGraph 应用开启 LANGCHAIN_TRACING_V2 后,图中每个节点的执行都会被记录为独立的 span,可以在 LangSmith 中直接查看状态在各节点间的流转:
import os
os.environ["LANGCHAIN_TRACING_V2"] = "true"
os.environ["LANGCHAIN_API_KEY"] = "your-api-key"
# after running app.invoke(inputs), the full graph execution
# (node inputs/outputs, conditional edges taken) appears in LangSmith
result = app.invoke(inputs)
优势与劣势
优势
- 调试效率高:完整调用树 + 输入输出回放,排查 Agent 异常行为比读日志快得多
- 与 LangChain / LangGraph 无缝集成:只需设置环境变量,无需改动业务代码
- 支持非 LangChain 项目:通过
traceable装饰器可接入任意 Python/JS 代码 - 评估体系完整:数据集、评估器、LLM-as-judge 覆盖离线测试到线上监控全链路
劣势
- 托管版为付费 SaaS:免费额度有限,生产环境用量大时成本上升
- 额外依赖:引入外部服务依赖,需要考虑数据隐私和网络可用性
- 自托管配置复杂:企业自托管方案部署和维护成本高于直接使用 SaaS
使用建议
适合接入 LangSmith 的场景:
- ✅ 使用 LangChain / LangGraph 构建的多步骤 Agent,调试调用链路
- ✅ 需要系统化评估 Prompt 或模型效果(回归测试、A/B 对比)
- ✅ 生产环境需要监控 LLM 调用的延迟、成本、错误率
可以不引入 LangSmith 的场景:
- ❌ 简单的单次 LLM 调用,日志已足够定位问题
- ❌ 对数据外发有严格合规要求且未评估自托管方案
- ❌ 团队已有成熟的自建可观测性体系,接入成本大于收益
总结
LangSmith 补齐了 LLM 应用从开发调试到生产监控的可观测性缺口:调用链路靠 Tracing 还原,输出质量靠 Datasets + Evaluation 量化,线上表现靠 Monitoring 持续观察。它不绑定 LangChain 生态,但与 LangChain、LangGraph 的集成成本最低,是这套技术栈里天然的调试搭子。