LangSmith 进阶:数据集与评估
第 14 章讲了用 LANGCHAIN_* 环境变量接入 LangSmith 做追踪。光看单次调用还不够——你想知道「改完提示词后,整体质量有没有变好」。这就需要数据集(Dataset)与评估(Evaluation)。
1. 创建数据集
数据集是一组「输入 → 期望输出」的样本,相当于链的单测用例:
import { Client } from "langsmith";
const client = new Client();
const dataset = await client.createDataset("qa-eval");
await client.createExamples({
datasetId: dataset.id,
inputs: [
{ question: "退款多久到账?" },
{ question: "支持哪些支付方式?" },
],
outputs: [
{ answer: "通常 3-5 个工作日" },
{ answer: "微信、支付宝、银行卡" },
],
});2. 定义评估函数并跑评估
评估函数对「链输出 vs 参考答案」打分,可调用模型做语义评判:
import { evaluate } from "langsmith/evaluation";
async function correctness({ inputs, outputs, referenceOutputs }: any) {
// 简单包含判定,生产可用 LLM 做语义评分
const hit = String(referenceOutputs.answer).includes(
String(outputs.answer).slice(0, 6)
);
return { key: "correctness", score: hit ? 1 : 0 };
}
await evaluate(
async (input: any) => chain.invoke(input),
{
data: "qa-eval",
evaluators: [correctness],
}
);ℹ️evaluate 做了什么
它按数据集逐条跑你的链,记录每次输入/输出/延迟,并调用评估函数打分,结果直接落在 LangSmith 面板上可做版本对比。
3. 典型评估维度
| 维度 | 说明 |
|---|---|
| 正确性 | 输出与参考答案是否一致 |
| 相关性 | 是否回答了问题、无幻觉 |
| 延迟/成本 | 单条耗时与 Token 消耗 |
💡把它当回归测试
每次改提示词或换模型,都跑一遍同一数据集,分数下降就是「回归」。可接进 CI,质量门禁自动化。
⚠️评估函数别太松
用「简单包含」判分会漏判。关键场景请用 LLM-as-judge 或更严格指标,否则分数好看但线上仍出错。
🎯练习
把第 17 章问答 Bot 接进一个 5 条样本的数据集,用 LLM 评估函数给「相关性」打分,对比改提示词前后的得分。
小结
- 数据集 = 链的输入/期望输出样本,相当于单测
evaluate按数据集跑链并调用评估函数自动打分- 常见维度:正确性、相关性、延迟与成本
- 接 CI 做质量回归门禁
- 下章补充非结构化文档加载能力 →