评估¶
要评估代理的性能,可以使用 LangSmith
评估。您需要首先定义一个评估器函数来判断代理的结果,例如最终输出或轨迹。根据您的评估技术,这可能涉及或不涉及参考输出。
def evaluator(*, outputs: dict, reference_outputs: dict):
# compare agent outputs against reference outputs
output_messages = outputs["messages"]
reference_messages = reference["messages"]
score = compare_messages(output_messages, reference_messages)
return {"key": "evaluator_score", "score": score}
要开始使用,您可以使用 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"}),
}
},
],
}
]
# Create the evaluator
evaluator = create_trajectory_match_evaluator(
trajectory_match_mode="superset", # (1)!
)
# Run the evaluator
result = evaluator(
outputs=outputs, reference_outputs=reference_outputs
)
下一步,了解如何自定义轨迹匹配评估器。
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 参考: 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),
# replace with your dataset name
data="<Name of your dataset>",
evaluators=[evaluator]
)