目标
通过系统化的解释和代码示例,帮助初学者从零掌握 LangSmith 的使用方法,包括核心功能的配置、跟踪、调试和评估等。逐步引导学生将 LangSmith 与 LangGraph 结合应用,实现 AI 工作流的监控、优化和测试,提升开发效率和应用可靠性。
一、什么是 LangSmith?
LangSmith 是 LangChain 生态中的一个开发平台,用于调试、监控和评估 LLM(Large Language Models)应用。它提供可视化工具,帮助开发者追踪链、代理和工作流的执行过程,识别问题并优化性能。LangSmith 特别适合与 LangGraph 等组件集成,用于复杂 AI 系统的开发和维护。
LangSmith 可以被视为一个"AI 应用的仪表盘",类似于:
- 飞行员的仪表板:它不直接控制飞机,但实时显示速度、高度等指标,帮助飞行员调整路径。
- 代码调试器:它记录每个步骤的输入输出、耗时和错误,让开发者快速定位问题。
LangSmith 的核心优势:
- 可视化追踪:实时查看 LLM 调用、工具执行和状态变化。
- 调试支持:捕获异常、分析延迟,并支持重放执行。
- 评估功能:使用数据集测试模型性能,支持自定义指标。
- 协作与部署:支持团队共享项目,并集成到生产环境中。
- 集成友好:无缝与 LangGraph、LangChain 等结合。
一句话总结:LangSmith 是 AI 开发者的"监控中心"——它将黑箱般的 LLM 应用转化为可观测、可优化的系统,帮助从原型到生产的完整生命周期管理。
LangSmith 成为 65% 企业级 LLM 应用的标准调试平台。
二、LangSmith 的核心概念
2.1 Project(项目)—— 应用的组织单元
Project 是 LangSmith 中的顶级容器,用于分组相关的追踪和数据集。每个项目可以包含多个 Runs(执行记录)。
2.2 Trace/Run(追踪/运行)—— 执行记录
Run 代表一次链或 Graph 的执行,包括输入、输出、步骤和元数据(如耗时、Token 使用)。Trace 是 Runs 的集合,形成完整的执行路径可视化。
2.3 Dataset(数据集)—— 测试数据
Dataset 存储输入-输出对,用于评估和回归测试。支持上传 CSV 或手动创建。
2.4 Evaluator(评估器)—— 性能指标
内置评估器如 QA、Similarity 等,也支持自定义。用于批量运行测试并计算分数。
2.5 Hub(中心)—— 共享资源
LangSmith Hub 是一个共享提示和链的仓库,便于复用。
核心概念总览:
| 组件 | 类比 | 作用 |
|---|---|---|
| Project | 文件夹 | 组织追踪和数据集 |
| Trace/Run | 日志文件 | 记录执行细节,支持可视化 |
| Dataset | 测试用例集 | 提供评估数据,支持批量测试 |
| Evaluator | 评分系统 | 计算性能指标,如准确率、相关性 |
| Hub | 代码仓库 | 共享提示模板和链 |
三、安装与环境准备
3.1 安装 LangSmith
使用 pip 安装核心包(假设已安装 LangChain 和 LangGraph):
pip install langsmith # 使用 pip 安装 langsmith 包
3.2 代码架构
langgraph--langsimth_tutorial
│──smis/ # Graph 定义子目录,按任务分类
│ ├── simple_trace.py # 基础示例:简单追踪工作流
│ ├── dialog_with_smith.py # 实战1:对话工作流与 LangSmith 集成
│──.env # 环境变量文件(API 密钥等)
.env 示例内容(需用户填写):
LANGCHAIN_API_KEY=your_api_key_here
LANGCHAIN_TRACING_V2=true
LANGCHAIN_PROJECT=your_project_name
LANGCHAIN_ENDPOINT=https://api.smith.langchain.com
3.3 基本配置
在代码中加载环境变量:
from dotenv import load_dotenv, find_dotenv
load_dotenv(find_dotenv())
注意:需在 LangSmith 官网注册获取 API 密钥,并启用追踪。
四、简单使用 LangSmith —— “追踪 LLM 调用”
从一个基础示例开始,演示如何追踪简单 LLM 调用。
4.1 导入与配置
from langchain_ollama import ChatOllama # 导入 ChatOllama 用于 LLM
from langsmith import Client # 导入 Client 用于 LangSmith 交互
# 初始化 Ollama 模型
llm = ChatOllama(
model='qwen2.5:7b',
base_url="http://localhost:11434",
temperature=0.8
)
client = Client() # 创建 LangSmith Client 实例
4.2 执行并追踪
def simple_llm_call(): # 定义 simple_llm_call 函数
response = llm.invoke("Hello, world!") # 调用 LLM invoke 方法
return response
if __name__ == "__main__":
simple_llm_call() # 执行函数,自动追踪
运行效果:在 LangSmith 仪表盘查看 Run,包括输入、输出和 Token 使用。
关键点:设置环境变量
LANGCHAIN_TRACING_V2=true自动启用追踪。
五、实战:与 LangGraph 集成 —— “追踪对话工作流”
结合 LangGraph 的对话工作流,使用 LangSmith 追踪状态变化。
5.1 导入配置
from typing import TypedDict, Annotated
from langchain_core.messages import BaseMessage, HumanMessage, AIMessage
from langgraph.graph.message import add_messages
from langgraph.graph import StateGraph, START, END
from dotenv import load_dotenv, find_dotenv
load_dotenv(find_dotenv())
5.2 定义 State 与节点
# 定义状态
class DialogState(TypedDict):
messages: Annotated[list[BaseMessage], add_messages]
# 节点 1: 获取用户输入
def get_user_message(state: DialogState) -> DialogState:
user_input = input("\n 用户说: ")
return {"messages": [HumanMessage(content=user_input)]}
# 节点 2: AI 生成回复
def generate_response(state: DialogState) -> DialogState:
last_message = state["messages"][-1].content
ai_response = f" AI 回复: 我收到了你的消息 —— '{last_message}'"
print(f"{ai_response}")
return {"messages": [AIMessage(content=ai_response)]}
# 使用条件边判断是否继续对话
def should_continue(state: DialogState):
# 如果最后一条消息是空(比如用户输入 exit),则结束
if not state["messages"]:
return END
last_content = state["messages"][-1].content
if isinstance(state["messages"][-1], HumanMessage):
if "退出" in last_content or "exit" in last_content or "quit" in last_content:
return END
return "generate_response"
5.3 定义 Graph
# 构建图
def create_dialog_graph():
workflow = StateGraph(DialogState)
# 添加节点
workflow.add_node("get_user_message", get_user_message)
workflow.add_node("generate_response", generate_response)
# 添加边
workflow.add_edge(START, "get_user_message")
workflow.add_conditional_edges("get_user_message", should_continue)
workflow.add_edge("generate_response", "get_user_message") # 回到用户输入,形成循环
return workflow.compile()
5.4 运行并追踪
if __name__ == "__main__":
print("欢迎进入对话系统!输入 '退出'、'exit' 或 'quit' 结束对话。")
app = create_dialog_graph()
# 启动对话(初始状态)
app.invoke({"messages": []})
print("\n 对话结束,欢迎再次使用!")
关键点:LangSmith 会自动追踪每个节点的输入输出和状态,在仪表盘查看 Trace 图。
六、小节总结:LangSmith 使用知识
| 步骤 | 关键方法 | 示例应用 |
|---|---|---|
| 配置追踪 | os.environ["LANGCHAIN_TRACING_V2"]="true" |
自动记录 Run |
本教程核心收获:你现在能使用 LangSmith 监控和优化 LangGraph 工作流,从追踪到评估的全流程。实践是关键,多在真实项目中应用。