Skip to main content
某些指标只能在整体实验级别定义,而不是针对实验的各个运行。例如,您可能希望计算评估目标在整个数据集所有样本上的总体通过率或 F1 分数。这类指标被称为汇总评估器。

基础示例

这里,我们将计算 F1 分数,它是精确率和召回率的综合指标。 这类指标只能在整个实验的所有样本上计算,因此我们的评估器接收一个输出列表和一个参考输出列表。
def f1_score_summary_evaluator(outputs: list[dict], reference_outputs: list[dict]) -> dict:
    true_positives = 0
    false_positives = 0
    false_negatives = 0

    for output_dict, reference_output_dict in zip(outputs, reference_outputs):
        output = output_dict["class"]
        reference_output = reference_output_dict["class"]

        if output == "Toxic" and reference_output == "Toxic":
            true_positives += 1
        elif output == "Toxic" and reference_output == "Not toxic":
            false_positives += 1
        elif output == "Not toxic" and reference_output == "Toxic":
            false_negatives += 1

    if true_positives == 0:
        return {"key": "f1_score", "score": 0.0}

    precision = true_positives / (true_positives + false_positives)
    recall = true_positives / (true_positives + false_negatives)
    f1_score = 2 * (precision * recall) / (precision + recall)

    return {"key": "f1_score", "score": f1_score}
然后,您可以将此评估器传递给 evaluate 方法,如下所示:
from langsmith import Client

ls_client = Client()
dataset = ls_client.clone_public_dataset(
    "https://smith.langchain.com/public/3d6831e6-1680-4c88-94df-618c8e01fc55/d"
)

def bad_classifier(inputs: dict) -> dict:
    return {"class": "Not toxic"}

def correct(outputs: dict, reference_outputs: dict) -> bool:
    """行级正确性评估器。"""
    return outputs["class"] == reference_outputs["label"]

results = ls_client.evaluate(
    bad_classified,
    data=dataset,
    evaluators=[correct],
    summary_evaluators=[pass_50],
)
在 LangSmith UI 中,您将看到汇总评估器的分数以对应的键名显示。 summary_eval.png

汇总评估器参数

汇总评估器函数必须具有特定的参数名称。它们可以接受以下任意子集的参数:
  • inputs: list[dict]:对应数据集中单个样本的输入列表。
  • outputs: list[dict]:每个实验在给定输入上产生的字典输出列表。
  • reference_outputs/referenceOutputs: list[dict]:与样本关联的参考输出列表(如果可用)。
  • runs: list[Run]:两个实验在给定样本上生成的完整 Run 对象列表。如果您需要访问每个运行的中间步骤或元数据,请使用此参数。
  • examples: list[Example]:所有数据集 Example 对象,包括样本输入、输出(如果可用)和元数据(如果可用)。

汇总评估器输出

汇总评估器应返回以下类型之一: Python 和 JS/TS
  • dict:形式为 {"score": ..., "name": ...} 的字典,允许您传递数值或布尔分数以及指标名称。
目前仅限 Python
  • int | float | bool:这被解释为可以求平均值、排序等的连续指标。函数名称用作指标的名称。