学习笔记 · Obsidian
LangSmith 评估体系与方法选择
核心模型
一次离线评估由三个基本对象组成:
- Dataset / Example:稳定的输入,可选 reference output;
- Target function:要测试的模型调用、组件、完整 agent 或 graph;
- Evaluator:把实际输出、reference、运行轨迹等转成反馈分数。
目标函数在 dataset 上执行后形成 experiment;同一 dataset 上的不同 experiment 用于比较 prompt、模型、代码或配置版本。评估提供连续指标,测试则把指标变成是否允许发布的断言;生产级流程通常同时使用两者。
离线与在线不是替代关系
| 维度 | 离线评估 | 在线评估 |
|---|---|---|
| 数据 | 有版本的 dataset/examples,可有 reference | 生产 tracing project 中的 runs/threads,通常无 reference |
| 时机 | 开发、发布前、CI | 发布后实时或近实时 |
| 目标 | benchmark、单测、回归、backtest | 质量监控、安全、异常检测、真实反馈 |
| 评估方式 | 批量 experiment | 规则 + 过滤 + sampling 自动运行 |
| 成本控制 | repetitions、concurrency、cache | sampling、过滤、限额与告警 |
正确闭环是:生产 trace → 线上 evaluator/人工反馈发现失败 → 加入 dataset → 离线复现与修复 → 与 baseline 比较 → 重新部署。只做离线评估会错过真实分布漂移,只做在线评分又无法稳定复现回归。
Evaluator 选择
| 类型 | 适合 | 风险与控制 |
|---|---|---|
| Code / heuristic | 格式、精确值、分类标签、工具名、延迟和成本 | 快且确定,但覆盖不了主观质量 |
| Human | 偏好、风格、安全、复杂业务判断 | 质量高但慢,需要 rubric、抽样与一致性校准 |
| LLM-as-judge | 正确性、相关性、忠实度、帮助性、完整性 | 有偏差、非确定且有成本;需人工标注集、few-shot 和审计 |
| Pairwise | 比较两个版本 | 相对判断通常比绝对分数稳定,但需控制位置/顺序偏差 |
| Trajectory | agent 工具调用路径 | 能发现内部失败,但“唯一路径”假设可能惩罚其他正确解法 |
Agent 的三层评估
- 最终结果:把 agent 当黑盒,判断任务是否完成;最接近用户体验,但慢且难定位根因。
- 单步决策:检查某一步是否选对工具及参数;快、可定位,但不代表端到端成功。
- 完整轨迹:比较工具序列、无序工具集合、错误步骤数,或让 judge 比较完整消息轨迹。严格 exact match 只适合确有唯一合法路径的任务。
复杂 agent 应把三层组合:结果指标作为发布门,关键高风险步骤使用确定性检查,轨迹指标负责诊断和安全审计。
RAG、摘要与分类
RAG 至少拆成 document relevance、answer faithfulness、helpfulness 与 correctness。前三项可做 reference-free 线上评估;正确性通常需要 reference answer。不同版本的格式或风格适合 pairwise,对事实正确性仍应使用 reference 或一致性证据。
摘要通常存在多个正确答案,优先依据原文检查事实准确、忠实与帮助性,而不是强制匹配单个 reference summary。分类若有 ground-truth 标签,应使用 accuracy/precision/recall 等确定性指标;没有标签时才让 LLM 按 rubric 分类,并持续用人工样本校准。
数据组织原则
- examples 来自人工策划、生产 traces 或合成数据;生产失败样本最能缩小离线与线上差距。
- splits 用于训练/验证、难度、领域或 staged rollout;metadata 用于来源、标签、版本和筛选。
- dataset 修改自动生成版本;CI 应固定版本或语义 tag,避免测试集变化伪装成代码回归。
- 主观指标看相对趋势,不把单次 judge 分数当绝对真相。
最短实践路径
Quickstart 的 UI 与 SDK 流程相同:准备 workspace/provider secret → 创建 prompt/target → 建 dataset → 添加 correctness evaluator → 运行 experiment → 查看结果。SDK 支持 Python 与 TypeScript;LANGSMITH_API_KEY、provider key 和可选 workspace ID 均应通过密钥管理注入,不能写入源码或数据集。