前言
在上一篇文章中,我们学习了如何使用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界面
点击任意一条运行记录,你将进入详情页面,这里展示了完整的调用链路:
- 左侧面板: 展示了整个Chain的层级结构。你可以看到从
ChatPromptTemplate
到ChatOpenAI
再到StrOutputParser
的完整流程。 - 右侧面板:
- Inputs & Outputs: 点击左侧的任意组件,右侧会显示其详细的输入和输出。例如,点击
ChatOpenAI
,你可以看到它接收到的完整prompt和返回的AIMessage
。 - Metadata: 显示了运行时间、token消耗、模型名称等元数据信息。
- 错误信息: 如果某一步出错,这里会高亮显示错误详情和堆栈跟踪。
- Inputs & Outputs: 点击左侧的任意组件,右侧会显示其详细的输入和输出。例如,点击
通过这个视图,你可以清晰地理解数据在应用中的流转过程,定位性能瓶颈或错误变得前所未有的简单。
初试评估(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的翅膀吧!
...