LangSmith使用教程

LangSmith 核心概念、安装配置与 LangGraph 集成实战

目标

通过系统化的解释和代码示例,帮助初学者从零掌握 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 工作流,从追踪到评估的全流程。实践是关键,多在真实项目中应用。