Skip to content

评估

要评估代理的表现,您可以使用LangSmith评估功能。首先,您需要定义一个评估器函数来评判来自代理的最终输出或轨迹结果。根据您的评估方法,这可能涉及参考输出,也可能不涉及:

def evaluator(*, outputs: dict, reference_outputs: dict):
    # 比较代理输出与参考输出
    output_messages = outputs["messages"]
    reference_messages = reference["messages"]
    score = compare_messages(output_messages, reference_messages)
    return {"key": "evaluator_score", "score": score}

开始时,您可以使用AgentEvals包中预构建的评估器:

pip install -U agentevals

创建评估器

评估代理性能的一种常见方法是将其轨迹(调用工具的顺序)与参考轨迹进行比较:

import json
from agentevals.trajectory.match import create_trajectory_match_evaluator

outputs = [
    {
        "role": "assistant",
        "tool_calls": [
            {
                "function": {
                    "name": "get_weather",
                    "arguments": json.dumps({"city": "san francisco"}),
                }
            },
            {
                "function": {
                    "name": "get_directions",
                    "arguments": json.dumps({"destination": "presidio"}),
                }
            }
        ],
    }
]
reference_outputs = [
    {
        "role": "assistant",
        "tool_calls": [
            {
                "function": {
                    "name": "get_weather",
                    "arguments": json.dumps({"city": "san francisco"}),
                }
            },
        ],
    }
]

# 创建评估器
evaluator = create_trajectory_match_evaluator(
    trajectory_match_mode="superset",  # (1)!
)

# 运行评估器
result = evaluator(
    outputs=outputs, reference_outputs=reference_outputs
)
  1. 指定如何比较轨迹的方式。superset模式会接受输出轨迹为有效,如果它是参考轨迹的超集的话。其他选项包括:严格匹配无序匹配子集匹配

下一步可以了解更多关于如何自定义轨迹匹配评估器的信息。

使用LLM作为裁判

您可以使用一个将LLM作为裁判的评估器,该评估器使用LLM来比较轨迹与参考输出,并输出一个分数:

import json
from agentevals.trajectory.llm import (
    create_trajectory_llm_as_judge,
    TRAJECTORY_ACCURACY_PROMPT_WITH_REFERENCE
)

evaluator = create_trajectory_llm_as_judge(
    prompt=TRAJECTORY_ACCURACY_PROMPT_WITH_REFERENCE,
    model="openai:o3-mini"
)

运行评估器

要运行一个评估器,您首先需要创建一个LangSmith数据集。为了使用预构建的AgentEvals评估器,您需要一个具有以下模式的数据集:

  • 输入{"messages": [...]} 用于调用代理的输入消息。
  • 输出{"messages": [...]} 代理输出中预期的消息历史记录。对于轨迹评估,您可以选择只保留助手的消息。

API Reference: create_react_agent

from langsmith import Client
from langgraph.prebuilt import create_react_agent
from agentevals.trajectory.match import create_trajectory_match_evaluator

client = Client()
agent = create_react_agent(...)
evaluator = create_trajectory_match_evaluator(...)

experiment_results = client.evaluate(
    lambda inputs: agent.invoke(inputs),
    # 用您的数据集名称替换
    data="<Name of your dataset>",
    evaluators=[evaluator]
)

Comments