Skip to main content
运行评估时,你可能希望以编程方式在脚本中处理结果,而不是在LangSmith UI中查看。这在以下场景中非常有用:
  • CI/CD流水线:实现质量门控,当评估分数低于阈值时使构建失败。
  • 本地调试:无需API调用即可检查和分析结果。
  • 自定义聚合:使用自己的逻辑计算指标和统计数据。
  • 集成测试:使用评估结果来管控合并或部署。
本指南展示如何遍历和处理从 Client.evaluate() 返回的 ExperimentResults 对象中的实验结果。
本页重点介绍以编程方式处理结果,同时仍将结果上传到LangSmith。如果你想在本地运行评估而不将任何内容记录到LangSmith(用于快速测试或验证),请参考本地运行评估,它使用 upload_results=False

遍历评估结果

evaluate() 函数返回一个 ExperimentResults 对象,你可以对其进行遍历。blocking 参数控制结果何时可用:
  • blocking=False:立即返回一个迭代器,在结果生成时实时产出。这允许你在评估运行时实时处理结果。
  • blocking=True(默认):阻塞直到所有评估完成后再返回。当你遍历结果时,所有数据都已可用。
两种模式都返回相同的 ExperimentResults 类型;区别在于函数是否在返回前等待完成。使用 blocking=False 进行流式处理和实时调试,或使用 blocking=True 进行需要完整数据集的批处理。 以下示例演示了 blocking=False。它会在结果流入时进行遍历,将它们收集到列表中,然后在单独的循环中处理:
这将产生类似以下的输出:

理解结果结构

迭代器中的每个结果包含:
  • result["run"]:你的目标函数的执行记录。
    • result["run"].inputs:来自你的数据集示例的输入。
    • result["run"].outputs:你的目标函数产生的输出。
    • result["run"].id:此运行的唯一ID。
  • result["evaluation_results"]["results"]:一个 EvaluationResult 对象列表,每个评估器一个。
    • key:指标名称(来自你的评估器的返回值)。
    • score:数值分数(通常是0-1或布尔值)。
    • comment:可选的解释性文本。
    • source_run_id:评估器运行的ID。
  • result["example"]:被评估的数据集示例。
    • result["example"].inputs:输入值。
    • result["example"].outputs:参考输出(如果有)。

示例

实现质量门控

此示例使用评估结果根据质量阈值自动通过或失败CI/CD构建。脚本遍历结果,计算平均准确率分数,如果准确率低于85%,则以非零状态码退出。这确保你可以部署符合质量标准的代码更改。

使用 blocking=True 进行批处理

当你需要执行需要完整数据集的操作(如计算百分位数、按分数排序或生成摘要报告)时,使用 blocking=True 等待所有评估完成后再处理:
使用 blocking=True,你的处理代码仅在所有评估完成后运行,避免了与评估日志的混合输出。 有关在不上传结果的情况下运行评估的更多信息,请参考本地运行评估

相关链接