评估¶
要评估您的代理性能,您可以使用 LangSmith
评估。您首先需要定义一个评估器函数来判断代理的结果,例如最终输出或轨迹。根据您的评估技术,这可能涉及也可能不涉及参考输出。
const evaluator = async (params: {
inputs: Record<string, unknown>;
outputs: Record<string, unknown>;
referenceOutputs?: Record<string, unknown>;
}) => {
// compare agent outputs against reference outputs
const outputMessages = params.outputs.messages;
const referenceMessages = params.referenceOutputs.messages;
const score = compareMessages(outputMessages, referenceMessages);
return { key: "evaluator_score", score: score };
};
要开始使用,您可以使用 AgentEvals
包中预置的评估器。
创建评估器¶
评估代理性能的一种常用方法是将其轨迹(调用工具的顺序)与参考轨迹进行比较。
import { createTrajectoryMatchEvaluator } from "agentevals";
const outputs = [
{
role: "assistant",
tool_calls: [
{
function: {
name: "get_weather",
arguments: JSON.stringify({ city: "san francisco" }),
},
},
{
function: {
name: "get_directions",
arguments: JSON.stringify({ destination: "presidio" }),
},
},
],
},
];
const referenceOutputs = [
{
role: "assistant",
tool_calls: [
{
function: {
name: "get_weather",
arguments: JSON.stringify({ city: "san francisco" }),
},
},
],
},
];
// Create the evaluator
const evaluator = createTrajectoryMatchEvaluator({
trajectoryMatchMode: "superset", // (1)!
})
// Run the evaluator
const result = await evaluator({
outputs,
referenceOutputs,
});
- 指定轨迹将如何进行比较。
superset
将把输出轨迹视为有效,如果它是参考轨迹的超集。其他选项包括:严格匹配 (strict)、无序匹配 (unordered) 和 子集匹配 (subset)。
下一步,了解更多关于如何自定义轨迹匹配评估器的信息。
LLM 作为评判者¶
您可以使用 LLM 作为评判者评估器,该评估器使用 LLM 将轨迹与参考输出进行比较并输出分数。
import {
createTrajectoryLLMAsJudge,
TRAJECTORY_ACCURACY_PROMPT_WITH_REFERENCE
} from "agentevals";
const evaluator = createTrajectoryLLMAsJudge({
prompt: TRAJECTORY_ACCURACY_PROMPT_WITH_REFERENCE,
model: "openai:o3-mini",
});
运行评估器¶
要运行评估器,您首先需要创建一个 LangSmith 数据集。要使用预置的 AgentEvals 评估器,您需要一个具有以下模式的数据集:
- input:
{ messages: [...] }
用于调用代理的输入消息。 - output:
{ messages": [...] }
代理输出中预期的消息历史。对于轨迹评估,您可以选择只保留助手消息。
import { evaluate } from "langsmith/evaluation";
import { createTrajectoryMatchEvaluator } from "agentevals";
import { createReactAgent } from "@langchain/langgraph/prebuilt";
const agent = createReactAgent({ ... })
const evaluator = createTrajectoryMatchEvaluator({ ... })
await evaluate(
async (inputs) => await agent.invoke(inputs),
{
// replace with your dataset name
data: "<Name of your dataset>",
evaluators: [evaluator],
}
);