LangSmith:LLM 可观测性平台
本节介绍 LangSmith——LangChain 官方推出的 LLM 应用可观测性平台,深入分析其功能特性、优缺点,并与 Langfuse 进行对比。
重要提醒:LangSmith 不支持自托管
LangSmith 目前不能自托管(self-host),只能使用 LangChain 官方提供的云服务。
LangChain 官方明确表示 LangSmith 是完全托管(fully-managed)的 SaaS 服务,不提供本地部署版本,也不开放源码。官方文档明确指出 LangSmith 是 hosted platform,用户只能通过 API key 使用。
为什么不能本地部署?
| 原因 | 说明 |
|---|---|
| 核心代码不开源 | LangSmith 的 UI、后端逻辑、追踪系统、评估组件等全部闭源 |
| SaaS 商业模式 | 设计为托管式服务,类似 Sentry、Datadog、Weights & Biases |
需要自托管?请使用 Langfuse
如果你需要本地追踪 / 本地评估 / 不上传数据到云端,推荐使用 Langfuse:
- 完全开源(MIT 协议)
- 支持自托管(Docker 一键启动)
- 功能与 LangSmith 非常接近:trace、prompt 管理、evaluation、token usage
- 与 LangChain/LangGraph 集成良好
- 适合处理敏感数据的场景(医疗、金融等)
详细的 Langfuse 介绍和部署指南请参见 15.2 Langfuse
概述
LangSmith 是由 LangChain 团队开发的闭源 LLMOps 平台,专为开发、调试和部署 LLM 应用而设计。作为 LangChain 生态系统的官方可观测性工具,它提供了从开发到生产的全流程支持。

graph TB
subgraph LangSmith Platform
A[Tracing 追踪] --> E[Unified Dashboard]
B[Evaluation 评估] --> E
C[Prompt Hub 提示词管理] --> E
D[Deployment 部署] --> E
end
F[LangChain App] --> A
G[LangGraph Agent] --> A
H[Custom LLM App] --> A
E --> I[Insights & Analytics]核心价值
| 能力 | 描述 |
|---|---|
| 可观测性 | 完整追踪 LLM 应用的每个步骤,快速定位问题 |
| 评估 | 跟踪质量指标,确保 AI 系统的一致性和可靠性 |
| 提示词工程 | 版本控制和协作工具,加速提示词迭代 |
| 部署 | 将 Agent 部署为生产级 Agent Server |
快速开始
环境配置
只需设置一个环境变量即可启用 LangSmith 追踪:
import os
# 设置 LangSmith 环境变量
os.environ["LANGCHAIN_TRACING_V2"] = "true"
os.environ["LANGCHAIN_API_KEY"] = "your-langsmith-api-key"
os.environ["LANGCHAIN_PROJECT"] = "my-project" # 可选,默认为 "default"使用 LangChain 自动追踪
from langchain_openai import ChatOpenAI
from langchain_core.messages import HumanMessage
# 初始化 LLM
llm = ChatOpenAI(model="gpt-4o-mini")
# 所有调用自动追踪到 LangSmith
response = llm.invoke([HumanMessage(content="Hello, world!")])
print(response.content)使用 LangGraph 追踪
from langgraph.graph import StateGraph, START, END
from typing import TypedDict
class State(TypedDict):
messages: list
def chatbot(state: State):
response = llm.invoke(state["messages"])
return {"messages": state["messages"] + [response]}
# 构建图
graph = StateGraph(State)
graph.add_node("chatbot", chatbot)
graph.add_edge(START, "chatbot")
graph.add_edge("chatbot", END)
app = graph.compile()
# 运行时自动追踪整个图的执行过程
result = app.invoke({"messages": [HumanMessage(content="Hi!")]})核心功能详解
1. 追踪 (Tracing)
LangSmith 的追踪功能提供了对 LLM 应用执行过程的完整可见性。

graph LR
A[User Input] --> B[Chain Start]
B --> C[LLM Call 1]
C --> D[Tool Call]
D --> E[LLM Call 2]
E --> F[Output]
style B fill:#e1f5fe
style C fill:#fff3e0
style D fill:#f3e5f5
style E fill:#fff3e0
style F fill:#e8f5e9追踪能力包括:
- 层级追踪:查看嵌套的调用链,从顶层 Chain 到底层 LLM 调用
- 延迟分析:每个步骤的耗时,识别性能瓶颈
- Token 统计:输入/输出 Token 数量和成本计算
- 错误追踪:捕获异常和错误信息
追踪数据示例:
Run: my-chatbot-run
├── Chain: ConversationalRetrievalChain (2.3s, $0.002)
│ ├── Retriever: VectorStoreRetriever (0.5s)
│ │ └── Query: "How to use LangGraph?"
│ ├── LLM: ChatOpenAI (1.5s, 450 tokens)
│ │ ├── Input: "Context: ... Question: ..."
│ │ └── Output: "LangGraph is..."
│ └── Output Parser (0.1s)
└── Final Output: "LangGraph is a library for..."2. 评估 (Evaluation)
LangSmith 提供在线和离线评估能力,帮助确保 LLM 应用的质量。
from langsmith import Client
from langsmith.evaluation import evaluate
client = Client()
# 定义评估器
def correctness_evaluator(run, example):
"""评估答案是否正确"""
prediction = run.outputs.get("output")
reference = example.outputs.get("answer")
# 使用 LLM 作为评判者
score = llm.invoke(
f"Compare prediction '{prediction}' with reference '{reference}'. "
f"Score from 0-1 for correctness."
)
return {"key": "correctness", "score": float(score.content)}
# 运行评估
results = evaluate(
lambda inputs: my_chain.invoke(inputs),
data="my-dataset",
evaluators=[correctness_evaluator],
)评估类型:
| 评估类型 | 描述 | 适用场景 |
|---|---|---|
| 自动评估 | 使用 LLM 作为评判者 | 语义相似度、事实准确性 |
| 规则评估 | 基于规则的评分 | 格式检查、关键词匹配 |
| 人工评估 | 人工标注队列 | 复杂任务、质量把控 |
3. 提示词管理 (Prompt Hub)
LangSmith 的 Prompt Hub 提供提示词的版本控制和团队协作功能。
from langchain import hub
# 从 Hub 拉取提示词
prompt = hub.pull("rlm/rag-prompt")
# 使用提示词
chain = prompt | llm
# 推送新版本到 Hub
hub.push("my-org/my-prompt", prompt)Prompt Hub 功能:
- 版本控制:追踪提示词的每次修改
- A/B 测试:比较不同版本的效果
- 团队协作:共享和复用提示词
- Playground:在线测试和调试
4. 监控与告警

graph TD
A[Production Traffic] --> B[LangSmith]
B --> C{Metrics Analysis}
C --> D[Latency Dashboard]
C --> E[Error Rate Monitor]
C --> F[Cost Tracker]
C --> G[Alert Rules]
G -->|Threshold Exceeded| H[Notification]监控能力:
- 实时仪表板:追踪关键业务指标
- 告警系统:问题发生时及时通知
- 自动洞察:发现相似对话的聚类,识别用户需求和系统性问题

定价方案
| 方案 | 价格 | Traces | 适用对象 |
|---|---|---|---|
| Developer | 免费 | 5k/月 | 个人开发者 |
| Plus | $39/席位/月 | 10k/月 | 成长中的团队 |
| Enterprise | 定制 | 无限制 | 大型企业 |
注意事项:
- 超出基础配额后按 $0.50/1k traces 计费
- Enterprise 版支持自托管和 SSO
- 有专门的 Startup 和教育优惠计划
LangSmith 优点
1. 与 LangChain/LangGraph 深度集成
# 只需一个环境变量,零代码改动
os.environ["LANGCHAIN_TRACING_V2"] = "true"
# 自动追踪所有 LangChain 组件
chain = prompt | llm | parser # 自动追踪
agent = create_react_agent(...) # 自动追踪
graph = StateGraph(...) # 自动追踪这是 LangSmith 最大的优势——对于 LangChain 生态用户来说,几乎是零配置即可使用。
2. 功能全面的一站式平台
graph LR
A[开发] --> B[调试]
B --> C[评估]
C --> D[部署]
D --> E[监控]
E --> A
style A fill:#e3f2fd
style B fill:#fff3e0
style C fill:#e8f5e9
style D fill:#fce4ec
style E fill:#f3e5f5覆盖 LLM 应用的完整生命周期:
- 开发:Prompt Playground
- 调试:详细追踪
- 评估:自动化测试
- 部署:Agent Server
- 监控:生产仪表板
3. 企业级安全合规
- HIPAA 合规:医疗数据安全
- SOC 2 Type 2:安全控制审计
- GDPR 合规:欧洲数据保护
- 不使用用户数据训练模型
4. 零延迟设计
# SDK 使用异步回调发送追踪数据
# 不影响应用的响应延迟
response = llm.invoke(message) # 追踪在后台异步进行5. OpenTelemetry 支持
# 支持 OTel 标准,不限于 Python/TypeScript
from opentelemetry import trace
from langsmith.otel import wrap_opentelemetry
# 集成现有的 OTel 基础设施
tracer = trace.get_tracer(__name__)
wrapped_tracer = wrap_opentelemetry(tracer)LangSmith 缺点
1. 闭源与厂商锁定
graph TD
A[LangSmith 闭源] --> B[无法查看源码]
A --> C[依赖 LangChain 公司]
A --> D[迁移成本高]
B --> E[安全审计困难]
C --> F[定价可能变化]
D --> G[切换框架时数据不可迁移]影响:
- 无法自定义核心功能
- 切换到其他框架时,LangSmith 的洞察无法复用
- 企业可能对闭源解决方案有顾虑
2. 自托管需要企业版授权
| 部署方式 | LangSmith | Langfuse |
|---|---|---|
| 云托管 | 所有方案 | 所有方案 |
| 自托管 | 需企业授权 | 免费开源 |
对于需要数据不离开自己环境的团队,LangSmith 的成本显著更高。
3. 框架耦合性
虽然 LangSmith 支持任意 LLM 应用,但:
- 与 LangChain/LangGraph 的集成最为流畅
- 使用其他框架(如 LlamaIndex、Haystack)需要额外配置
- 如果未来迁移框架,LangSmith 的价值会大打折扣
4. 定价对中小团队可能偏高
场景:中型团队,月均 100k traces
LangSmith Plus:
- 3 席位 × $39 = $117/月
- 额外 90k traces × $0.50/1k = $45/月
- 总计: ~$162/月
Langfuse 自托管:
- 服务器成本: ~$50-100/月
- 无 trace 限制5. 实时防护能力有限
LangSmith 主要是事后可观测性工具,而非实时防护系统:
- 缺少实时 Guardrails
- 无法在请求时拦截问题内容
- 主要用于分析和调试,而非主动防护
LangSmith vs Langfuse 对比
详细的 Langfuse 介绍请参见 15.2 Langfuse
核心差异总览
graph TB
subgraph LangSmith
LS1[闭源]
LS2[LangChain 原生]
LS3[付费自托管]
LS4[深度集成]
end
subgraph Langfuse
LF1[开源 MIT]
LF2[框架无关]
LF3[免费自托管]
LF4[灵活集成]
end详细对比表
| 维度 | LangSmith | Langfuse |
|---|---|---|
| 开源状态 | 闭源 | MIT 开源 |
| 自托管成本 | 需企业授权 | 免费 |
| LangChain 集成 | 原生支持 | 良好支持 |
| 框架无关性 | 一般 | 优秀 |
| 社区活跃度 | 官方维护 | 社区活跃 |
| 数据控制 | 云端为主 | 完全控制 |
| 企业功能 | 全面 | 基础 |
| Prompt Hub | 内置 | 需外部方案 |
| Agent 部署 | 内置 | 需外部方案 |
如何选择?
flowchart TD
A[开始选择] --> B{使用 LangChain/LangGraph?}
B -->|是| C{需要自托管?}
B -->|否| D{框架多样性重要?}
C -->|是| E{预算充足?}
C -->|否| F[LangSmith Plus]
E -->|是| G[LangSmith Enterprise]
E -->|否| H[Langfuse 自托管]
D -->|是| H
D -->|否| I{看重一站式体验?}
I -->|是| F
I -->|否| H选择 LangSmith 的场景:
- 全力投入 LangChain/LangGraph 生态
- 追求开箱即用的体验
- 需要 Prompt Hub 和 Agent 部署功能
- 预算充足,看重官方支持
选择 Langfuse 的场景:
- 使用多种 LLM 框架
- 需要自托管且预算有限
- 看重开源和数据控制
- 希望保持框架灵活性
实战示例:LangGraph Agent 追踪
以下是一个完整的 LangGraph Agent 示例,展示 LangSmith 如何追踪复杂的 Agent 执行过程:
"""
LangGraph Agent with LangSmith Tracing
展示如何使用 LangSmith 追踪 Agent 的执行过程
"""
import os
from typing import TypedDict, Annotated
from langchain_openai import ChatOpenAI
from langchain_core.messages import HumanMessage, SystemMessage
from langchain_core.tools import tool
from langgraph.graph import StateGraph, START, END
from langgraph.prebuilt import ToolNode
import operator
# ========== 1. 配置 LangSmith ==========
os.environ["LANGCHAIN_TRACING_V2"] = "true"
os.environ["LANGCHAIN_API_KEY"] = "your-langsmith-api-key"
os.environ["LANGCHAIN_PROJECT"] = "langgraph-agent-demo"
# ========== 2. 定义工具 ==========
@tool
def search_weather(city: str) -> str:
"""查询指定城市的天气信息"""
# 模拟天气 API
weather_data = {
"北京": "晴天,25°C,空气质量良好",
"上海": "多云,28°C,湿度较高",
"深圳": "小雨,30°C,建议带伞",
}
return weather_data.get(city, f"未找到{city}的天气信息")
@tool
def calculate(expression: str) -> str:
"""计算数学表达式"""
try:
result = eval(expression)
return f"{expression} = {result}"
except Exception as e:
return f"计算错误: {str(e)}"
@tool
def search_knowledge(query: str) -> str:
"""搜索知识库"""
# 模拟知识库
knowledge = {
"LangGraph": "LangGraph 是一个用于构建有状态多 Actor 应用的库",
"LangSmith": "LangSmith 是 LangChain 的可观测性平台",
}
for key, value in knowledge.items():
if key.lower() in query.lower():
return value
return "未找到相关信息"
tools = [search_weather, calculate, search_knowledge]
# ========== 3. 初始化 LLM ==========
llm = ChatOpenAI(model="gpt-4o-mini", temperature=0)
llm_with_tools = llm.bind_tools(tools)
# ========== 4. 定义 State ==========
class AgentState(TypedDict):
messages: Annotated[list, operator.add]
# ========== 5. 定义节点函数 ==========
def call_model(state: AgentState) -> dict:
"""调用 LLM"""
messages = state["messages"]
response = llm_with_tools.invoke(messages)
return {"messages": [response]}
def should_continue(state: AgentState) -> str:
"""判断是否需要继续调用工具"""
last_message = state["messages"][-1]
if hasattr(last_message, "tool_calls") and last_message.tool_calls:
return "tools"
return END
# ========== 6. 构建 Graph ==========
graph = StateGraph(AgentState)
# 添加节点
graph.add_node("agent", call_model)
graph.add_node("tools", ToolNode(tools))
# 添加边
graph.add_edge(START, "agent")
graph.add_conditional_edges(
"agent",
should_continue,
{"tools": "tools", END: END}
)
graph.add_edge("tools", "agent")
# 编译
agent = graph.compile()
# ========== 7. 运行 Agent ==========
if __name__ == "__main__":
# 测试 1: 天气查询
print("=" * 50)
print("测试 1: 天气查询")
print("=" * 50)
result = agent.invoke({
"messages": [
SystemMessage(content="你是一个有用的助手,可以查询天气、计算数学表达式、搜索知识。"),
HumanMessage(content="北京今天天气怎么样?")
]
})
print(f"回答: {result['messages'][-1].content}\n")
# 测试 2: 多工具调用
print("=" * 50)
print("测试 2: 多工具调用")
print("=" * 50)
result = agent.invoke({
"messages": [
SystemMessage(content="你是一个有用的助手,可以查询天气、计算数学表达式、搜索知识。"),
HumanMessage(content="请帮我做三件事:1) 查询上海的天气 2) 计算 123 * 456 3) 介绍一下 LangGraph")
]
})
print(f"回答: {result['messages'][-1].content}\n")
print("=" * 50)
print("追踪数据已发送到 LangSmith")
print("访问 https://smith.langchain.com 查看详细追踪")
print("=" * 50)LangSmith 追踪视图
运行上述代码后,在 LangSmith 控制台可以看到:
Run: langgraph-agent-demo
├── Graph: AgentState (2.5s, $0.003)
│ ├── Node: agent (0.8s)
│ │ └── LLM: ChatOpenAI
│ │ ├── Input: "你是一个有用的助手..."
│ │ └── Output: [tool_calls: search_weather]
│ ├── Node: tools (0.1s)
│ │ └── Tool: search_weather
│ │ ├── Input: {"city": "北京"}
│ │ └── Output: "晴天,25°C,空气质量良好"
│ └── Node: agent (0.6s)
│ └── LLM: ChatOpenAI
│ └── Output: "北京今天天气晴朗..."
└── Final Output: "北京今天天气晴朗,温度25°C..."总结
LangSmith 定位
LangSmith 是 LangChain 生态的官方可观测性平台,为使用 LangChain/LangGraph 的团队提供:
- 零配置的深度追踪
- 一站式的开发-调试-评估-部署体验
- 企业级的安全合规保障
适用场景
| 推荐使用 | 考虑替代方案 |
|---|---|
| 全栈 LangChain 项目 | 多框架混合项目 |
| 快速原型开发 | 严格的成本控制 |
| 需要 Prompt Hub | 需要完全数据控制 |
| 有预算的企业团队 | 开源优先的团队 |
下一步
在 15.2 Langfuse 中,我们将详细介绍开源替代方案 Langfuse,帮助你做出更适合自己项目的选择。