前言

在上一篇文章中,我们学习了如何使用LangChain快速构建LLM应用。然而,当应用变得复杂时,跟踪其内部发生了什么、调试错误、评估性能就成了一大挑战。LLM应用的“黑盒”特性,使得传统的调试工具捉襟见肘。为了解决这一问题,LangChain团队推出了 LangSmith——一个专为LLM应用设计的可观测性(Observability)平台。

本文将带你入门LangSmith,了解如何用它来调试、评估和监控你的LangChain应用,让你对应用的内部状态了如指掌。

什么是LangSmith?

LangSmith是一个全方位的LLM运维平台,它提供了以下核心功能:

  • 追踪(Tracing): 详细记录LLM应用中每一步的输入、输出、耗时和token消耗,形成清晰的调用链路。
  • 调试(Debugging): 直观地展示错误发生的位置和上下文,帮助你快速定位问题。
  • 评估(Evaluation): 创建数据集,对应用的输出进行自动或人工评估,量化应用性能。
  • 监控(Monitoring): 提供仪表盘,实时监控应用的延迟、成本和成功率等关键指标。
  • 数据集管理(Dataset Management): 创建和管理用于测试和评估的示例数据集。

简而言之,LangSmith是你开发、部署和维护生产级LLM应用的得力助手。

准备工作

1. 注册LangSmith账户

首先,你需要访问 LangSmith官网 并注册一个账户。注册过程很简单,你可以使用GitHub、Google账户或邮箱直接登录。

2. 创建API密钥

登录后,进入 “Settings” -> “API Keys” 页面,创建一个新的API密钥。请妥善保管这个密钥,我们马上会用到它。

3. 配置环境变量

将LangSmith相关的环境变量添加到你的环境中。这样,LangChain应用就会自动将追踪数据发送到你的LangSmith项目。

export LANGCHAIN_TRACING_V2="true"
export LANGCHAIN_API_KEY="ls__..." # 替换为你的LangSmith API Key
export LANGCHAIN_PROJECT="My First Project" # 可以自定义项目名称
  • LANGCHAIN_TRACING_V2="true": 启用LangSmith追踪功能。
  • LANGCHAIN_API_KEY: 你在上一步创建的密钥。
  • LANGCHAIN_PROJECT: 指定一个项目名称,用于在LangSmith中组织你的运行记录。如果项目不存在,它会被自动创建。

将LangSmith集成到LangChain应用

集成过程非常简单。只要你正确设置了上述环境变量,任何LangChain应用(使用LCEL构建)的运行记录都会被自动捕获。

让我们以上一篇文章中的简单问答机器人为例:

import os
from langchain_openai import ChatOpenAI
from langchain.prompts import ChatPromptTemplate
from langchain.schema.output_parser import StrOutputParser

# 确保你的OpenAI API密钥也已设置
# os.environ["OPENAI_API_KEY"] = "sk-..."

# 设置LangSmith环境变量 (如果在脚本中设置)
os.environ["LANGCHAIN_TRACING_V2"] = "true"
os.environ["LANGCHAIN_API_KEY"] = "ls__..." # 替换为你的Key
os.environ["LANGCHAIN_PROJECT"] = "My Q&A Bot"

# 初始化模型和prompt
llm = ChatOpenAI(model="gpt-3.5-turbo", temperature=0.7)
prompt = ChatPromptTemplate.from_template(
    "你是一个知识渊博的助手。请用一句话回答关于“{topic}”的问题。"
)
chain = prompt | llm | StrOutputParser()

# 调用chain
chain.invoke({"topic": "黑洞"})
chain.invoke({"topic": "DNA"})

当你运行这段代码后,登录你的LangSmith账户,在"Projects"标签页下找到名为"My Q&A Bot"的项目。点击进入,你会看到两次运行记录(Traces)。

探索LangSmith界面

点击任意一条运行记录,你将进入详情页面,这里展示了完整的调用链路:

LangSmith Trace View

  • 左侧面板: 展示了整个Chain的层级结构。你可以看到从 ChatPromptTemplateChatOpenAI再到 StrOutputParser的完整流程。
  • 右侧面板:
    • Inputs & Outputs: 点击左侧的任意组件,右侧会显示其详细的输入和输出。例如,点击 ChatOpenAI,你可以看到它接收到的完整prompt和返回的 AIMessage
    • Metadata: 显示了运行时间、token消耗、模型名称等元数据信息。
    • 错误信息: 如果某一步出错,这里会高亮显示错误详情和堆栈跟踪。

通过这个视图,你可以清晰地理解数据在应用中的流转过程,定位性能瓶颈或错误变得前所未有的简单。

初试评估(Evaluation)

LangSmith的另一个强大功能是评估。假设我们想测试我们的问答机器人对特定问题的回答质量。

1. 创建数据集

在LangSmith中,进入"Datasets"页面,点击"New Dataset"创建一个名为"Tech Q&A"的数据集。然后,我们可以添加一些示例,每个示例包含输入(topic)和我们期望的参考输出(可选)。

topic (input) expected_answer (output)
LangChain 一个简化LLM应用开发的开源框架。
Docker 一个开源的应用容器引擎。

2. 运行评估

现在,我们可以编写一个脚本,让我们的 chain处理数据集中的每一个问题,并将结果与参考答案进行比较。LangSmith提供了评估器(Evaluators)来帮助我们自动化这个过程。

from langsmith import Client
from langchain.smith import run_on_dataset, RunEvalConfig

# 初始化LangSmith客户端
client = Client()

# 定义评估配置,这里使用默认的评估器,
# 它会检查输出是否包含参考答案中的关键词等
evaluation_config = RunEvalConfig.from_defaults()

# 在数据集上运行你的chain
run_on_dataset(
    client=client,
    dataset_name="Tech Q&A", # 你创建的数据集名称
    llm_or_chain_factory=chain, # 你的应用
    evaluation=evaluation_config,
    project_name="Q&A Bot Evaluation", # 为本次评估创建一个新项目
)

运行后,在"Q&A Bot Evaluation"项目中,你不仅能看到每次运行的追踪,还能看到自动评估的结果,比如"Correctness"等指标的得分。这为量化和迭代优化你的应用提供了坚实的数据基础。

总结

LangSmith为LLM应用开发带来了现代化的可观测性和运维能力。通过本次入门,我们学习了如何:

  • 配置环境变量,将LangChain应用与LangSmith无缝集成。
  • 使用追踪视图来调试和理解应用的内部工作流。
  • 创建数据集并运行评估,以量化应用的性能。

随着你的应用日益复杂,LangSmith将成为你不可或缺的工具。它能帮你更快地迭代,构建更可靠、更高效的AI产品。现在就开始,为你的下一个LangChain项目插上LangSmith的翅膀吧!