使用 LangSmith 入门
LangSmith 是一个构建生产级 LLM 应用的平台。 它允许您密切监控和评估您的应用,使您能够快速且自信地交付。 使用 LangSmith,您可以:
- 跟踪 LLM 应用:深入了解 LLM 调用和应用逻辑的其他部分。
- 评估性能:比较模型、提示和架构之间的结果,以识别最佳工作方案。
- 改进提示:快速精炼提示,以实现更准确和可靠的结果。
LangSmith + LangChain OSS
LangSmith 与 LangChain 的开源框架 langchain
和 langgraph
无缝集成,无需额外的工具。
如果您已在使用其中之一,请参阅 如何将 LangSmith 设置与 LangChain 或 如何将 LangSmith 设置与 LangGraph 的指南。
LangSmith 是一个独立平台,可以单 独使用,无论您如何创建 LLM 应用。
在本教程中,我们将带您通过使用 LangSmith SDK 记录您的第一个跟踪并运行评估以测量应用的性能。此示例使用 OpenAI API,您可以使用您选择的提供商。
1. 安装 LangSmith
- Python
- TypeScript
pip install -U langsmith openai
yarn add langsmith openai
2. 创建 API 密钥
要创建 API 密钥,请前往 设置页面。然后点击 创建 API 密钥。
3. 设置您的环境
- Shell
export LANGCHAIN_TRACING_V2=true
export LANGCHAIN_API_KEY=<your-api-key>
export OPENAI_API_KEY=<your-openai-api-key>
4. 记录您的第一个跟踪
我们提供多种方法将跟踪记录到 LangSmith。下面,我们将重点介绍如何使用 traceable()
。有关更多信息,请参见 代码注释以进行追踪 页面。
- Python
- TypeScript
import openai
from langsmith import wrappers, traceable
# Auto-trace LLM calls in-context
client = wrappers.wrap_openai(openai.Client())
@traceable # Auto-trace this function
def pipeline(user_input: str):
result = client.chat.completions.create(
messages=[{"role": "user", "content": user_input}],
model="gpt-4o-mini"
)
return result.choices[0].message.content
pipeline("Hello, world!")
# Out: Hello there! How can I assist you today?
import { OpenAI } from "openai";
import { traceable } from "langsmith/traceable";
import { wrapOpenAI } from "langsmith/wrappers";
// Auto-trace LLM calls in-context
const client = wrapOpenAI(new OpenAI());
// Auto-trace this function
const pipeline = traceable(async (user_input) => {
const result = await client.chat.completions.create({
messages: [{ role: "user", content: user_input }],
model: "gpt-4o-mini",
});
return result.choices[0].message.content;
});
await pipeline("Hello, world!")
// Out: Hello there! How can I assist you today?
了解有关跟踪的更多信息请查看可观察性 教程、概念指南 和 操作指南。
5. 查看您的跟踪
默认情况下,跟踪将记录到名为 default
的项目中。您应该看到使用上述代码记录的以下 示例输出跟踪。
6. 运行您的第一次评估
评估 有助于通过在给定输入集上测试应用性能来评估应用的表现。评估需要一个测试系统、数据作为测试用例以及评估人员来评分结果。
在这里,我们运行一个评估,针对一个示例数据集使用一个简单的自定义评估器,检查真实输出是否与我们的黄金标准输出完全匹配。
- Python
- TypeScript
from langsmith import Client, traceable
client = Client()
# 定义数据集:这些是您的测试用例
dataset = client.create_dataset(
"示例数据集",
description="LangSmith 中的一个示例数据集。",
)
client.create_examples(
inputs=[
{"postfix": "到 LangSmith"},
{"postfix": "到 LangSmith 中的评估"},
],
outputs=[
{"response": "欢迎来到 LangSmith"},
{"response": "欢迎来到 LangSmith 中的评估"},
],
dataset_id=dataset.id,
)
# 定义您的应用接口(跟踪可选)
@traceable
def dummy_app(inputs: dict) -> dict:
return {"response": "欢迎 " + inputs["postfix"]}
# 定义您的评估者
def exact_match(outputs: dict, reference_outputs: dict) -> bool:
return outputs["response"] == reference_outputs["response"]
# 运行评估
experiment_results = client.evaluate(
dummy_app, # 您的 AI 系统在这里
data=dataset, # 用于预测和评分的数据
evaluators=[exact_match], # 用于评分结果的评估者
experiment_prefix="sample-experiment", # 实验的名称
metadata={"version": "1.0.0", "revision_id": "beta"}, # 关于实验的元数据
max_concurrency=4, # 添加并发。
)
# 通过 UI 或程序化分析结果
# 如果您已安装 'pandas',您可以通过取消注释以下内容
# 将结果视为 pandas 的 DataFrame:
# experiment_results.to_pandas()
import { Client } from "langsmith";
import { EvaluationResult, evaluate } from "langsmith/evaluation";
const client = new Client();
// 定义数据集:这些是您的测试用例
const datasetName = "示例数据集";
const dataset = await client.createDataset(datasetName, {
description: "LangSmith 中的一个示例数据集。",
});
await client.createExamples({
inputs: [
{ postfix: "到 LangSmith" },
{ postfix: "到 LangSmith 中的评估" },
],
outputs: [
{ response: "欢迎来到 LangSmith" },
{ response: "欢迎来到 LangSmith 中的评估" },
],
datasetId: dataset.id,
});
// 定义您的评估者
const exactMatch = async ({ outputs, referenceOutputs }: {
outputs?: Record<string, any>;
referenceOutputs?: Record<string, any>;
}): Promise<EvaulationResult> => {
return {
key: "exact_match",
score: outputs?.response === referenceOutputs?.response,
};
};
// 运行评估
const experimentResults = await evaluate(
(inputs: { postfix: string }) => ({ response: `欢迎 ${inputs.postfix}` }),
{
data: datasetName,
evaluators: [exactMatch],
metadata: { version: "1.0.0", revision_id: "beta" },
maxConcurrency: 4,
}
);