本文档介绍了 LangChain 的评估与测试框架,该框架提供系统方法来评估语言模型、链和应用程序针对数据集的性能。该框架与 LangSmith 集成以进行实验跟踪,并支持内置和自定义评估器。
有关核心测试基础设施和 CI/CD 流程的信息,请参阅CI/CD 和发布流程。有关在应用程序中使用特定评估模式的指南,请参阅应用程序和使用模式。
评估系统围绕三个主要组件构建:运行执行、评估逻辑和结果聚合。该框架支持同步和异步执行,并提供全面的错误处理和进度跟踪。
来源: libs/langchain/langchain/smith/evaluation/runner_utils.py1-2885
runner_utils 模块提供了核心评估执行框架。该系统处理语言模型和链的模型工厂封装、输入验证和执行编排。
| 组件 | 目的 | 关键方法 |
|---|---|---|
TestResult | 聚合评估结果 | get_aggregate_feedback(), to_dataframe() |
EvalError | 封装评估错误 | 带上下文的错误封装 |
_wrap_in_chain_factory() | 准备用于评估的模型 | 工厂模式强制执行 |
_validate_example_inputs() | 确保输入兼容性 | 格式和键验证 |
执行流程支持单个模型评估和批量处理
来源: libs/langchain/langchain/smith/evaluation/runner_utils.py65-277 libs/langchain/langchain/smith/evaluation/runner_utils.py756-961
字符串评估器系统提供了一个标准化接口,用于根据参考数据评估模型输出。该框架使用映射器类从运行和示例中提取相关数据。
运行映射器从已执行的运行中提取评估输入
| 映射器类 | 目标运行类型 | 关键方法 |
|---|---|---|
LLMStringRunMapper | LLM 运行 | serialize_inputs(), serialize_outputs() |
ChainStringRunMapper | 链运行 | _get_key(),可配置的输入/预测键 |
ToolStringRunMapper | 工具运行 | 直接输入/输出映射 |
来源: libs/langchain/langchain/smith/evaluation/string_run_evaluator.py54-190
StringExampleMapper 从数据集示例中提取参考数据
来源: libs/langchain/langchain/smith/evaluation/string_run_evaluator.py192-241
StringRunEvaluatorChain 将运行映射器、示例映射器和字符串评估器组合成一个统一的评估管道。此链实现了 LangChain 的 Chain 接口和 LangSmith 的 RunEvaluator 接口。
该链通过 _call() 和 _acall() 方法支持同步和异步评估
| 方法 | 目的 | 主要功能 |
|---|---|---|
_call() | 同步评估 | 直接调用评估器 |
_acall() | 异步评估 | 支持并发评估 |
evaluate_run() | LangSmith 接口 | 错误处理和结果封装 |
aevaluate_run() | 异步 LangSmith 接口 | 异步错误处理 |
来源: libs/langchain/langchain/smith/evaluation/string_run_evaluator.py243-434
评估系统使用配置对象来定义评估参数并加载合适的评估器。配置系统支持内置评估器类型和自定义评估器函数。
系统自动确定用于评估的输入键、预测键和参考键
| 键类型 | 确定逻辑 | 回退行为 |
|---|---|---|
input_key | 配置指定 → 单链输入 → 警告 | 使用可用输入 |
prediction_key | 配置指定 → 单链输出 → 警告 | 使用可用输出 |
reference_key | 配置指定 → 单个示例输出 → 无 | 如果不可用则跳过参考 |
来源: libs/langchain/langchain/smith/evaluation/runner_utils.py449-654
评估框架与 LangSmith 集成,用于实验跟踪、数据集管理和结果比较。该集成处理项目创建、运行追踪和结果聚合。
_prepare_eval_run() 函数负责协调设置过程
来源: libs/langchain/langchain/smith/evaluation/runner_utils.py963-1022
评估系统通过回调处理程序和结果格式化工具提供进度跟踪和用户反馈。
TestResult 类提供全面的结果分析
| 方法 | 目的 | 输出格式 |
|---|---|---|
to_dataframe() | 转换为 pandas DataFrame | 结构化表格数据 |
get_aggregate_feedback() | 统计摘要 | 分位数分析 |
| 结果索引 | 按示例 ID 访问 | 字典式访问 |
来源: libs/langchain/langchain/smith/evaluation/progress.py13-129 libs/langchain/langchain/smith/evaluation/progress.py82-153
评估系统包含全面的测试覆盖,用于输入验证、格式转换和执行流程。测试套件验证不同输入格式的正面和负面情况。
测试套件包括以下验证:
来源: libs/langchain/tests/unit_tests/smith/evaluation/test_runner_utils.py1-358 libs/langchain/tests/unit_tests/smith/evaluation/test_runner_utils.py1-27