评估器¶
简介¶
Evaluator
类是 EvoAgentX 框架中的一个基础组件,用于评估工作流和动作图在基准测试上的性能。它提供了一种结构化的方式来衡量 AI 代理在特定任务上的表现,通过运行测试数据并计算指标。
架构¶
评估器架构¶
Evaluator
由几个关键组件组成:
-
LLM 实例:
用于在评估期间执行工作流的语言模型:
- 提供工作流执行所需的推理和生成能力
- 可以是任何遵循
BaseLLM
接口的实现
-
代理管理器:
管理评估期间工作流图使用的代理:
- 提供工作流执行所需的代理访问
- 仅在评估
WorkFlowGraph
实例时需要,评估ActionGraph
实例时可以忽略
-
数据处理函数:
在评估期间准备和处理数据的函数:
collate_func
:为工作流执行准备基准测试示例output_postprocess_func
:在评估前处理工作流输出
评估流程¶
评估流程遵循以下步骤:
- 数据处理:从基准测试数据集中获取示例,并将其处理成工作流图或动作图期望的格式
- 工作流执行:通过工作流图或动作图运行每个示例
- 输出处理:将输出处理成基准测试期望的格式
- 指标计算:通过比较输出与真实值来计算性能指标
- 结果聚合:将单个指标聚合成整体性能分数
使用方法¶
基本评估器创建与执行¶
from evoagentx.evaluators import Evaluator
from evoagentx.models import OpenAILLMConfig, OpenAILLM
from evoagentx.agents import AgentManager
from evoagentx.workflow.workflow_graph import WorkFlowGraph
from evoagentx.benchmark import SomeBenchmark
from evoagentx.core.callbacks import suppress_logger_info
# 初始化 LLM
llm_config = OpenAILLMConfig(model="gpt-4o-mini", openai_key="xxx")
llm = OpenAILLM(llm_config)
# 初始化代理管理器
agent_manager = AgentManager()
# 加载工作流图
workflow_graph = WorkFlowGraph.from_file("path/to/workflow.json")
# 将代理添加到代理管理器
agent_manager.add_agents_from_workflow(workflow_graph, llm_config=llm_config)
# 创建基准测试
benchmark = SomeBenchmark()
# 创建评估器
evaluator = Evaluator(
llm=llm,
agent_manager=agent_manager,
num_workers=4, # 使用 4 个并行工作器
verbose=True # 显示进度条
)
# 运行评估并抑制日志
with suppress_logger_info():
results = evaluator.evaluate(
graph=workflow_graph,
benchmark=benchmark,
eval_mode="test", # 在测试集上评估(默认)
sample_k=100 # 使用 100 个随机示例
)
print(f"评估结果: {results}")
自定义数据处理¶
from evoagentx.evaluators import Evaluator
from evoagentx.models import OpenAILLMConfig, OpenAILLM
from evoagentx.agents import AgentManager
from evoagentx.core.callbacks import suppress_logger_info
# 自定义整理函数来准备输入。键应该匹配工作流图或动作图的输入参数。返回值将直接传递给工作流图或动作图的 `execute` 方法。
def custom_collate(example):
return {
"input_text": example["question"],
"context": example.get("context", "")
}
# 自定义输出处理,`output` 是工作流的输出,返回值将传递给基准测试的 `evaluate` 方法。
def custom_postprocess(output):
if isinstance(output, dict):
return output.get("answer", "")
return output
# 使用自定义函数创建评估器
evaluator = Evaluator(
llm=llm,
agent_manager=agent_manager,
collate_func=custom_collate,
output_postprocess_func=custom_postprocess,
num_workers=4, # 使用 4 个并行工作器
verbose=True # 显示进度条
)
评估动作图¶
from evoagentx.workflow.action_graph import ActionGraph
from evoagentx.evaluators import Evaluator
from evoagentx.models import OpenAILLMConfig, OpenAILLM
from evoagentx.core.callbacks import suppress_logger_info
# 初始化 LLM
llm_config = OpenAILLMConfig(model="gpt-4o-mini", openai_key="xxx")
llm = OpenAILLM(llm_config)
# 加载动作图
action_graph = ActionGraph.from_file("path/to/action_graph.json", llm_config=llm_config)
# 创建评估器(动作图不需要 agent_manager)
evaluator = Evaluator(llm=llm, num_workers=4, verbose=True)
# 运行评估并抑制日志
with suppress_logger_info():
results = evaluator.evaluate(
graph=action_graph,
benchmark=benchmark
)
异步评估¶
import asyncio
from evoagentx.evaluators import Evaluator
from evoagentx.models import OpenAILLMConfig, OpenAILLM
from evoagentx.agents import AgentManager
from evoagentx.workflow.workflow_graph import WorkFlowGraph
from evoagentx.benchmark import SomeBenchmark
from evoagentx.core.callbacks import suppress_logger_info
# 初始化 LLM 和组件
llm_config = OpenAILLMConfig(model="gpt-4o-mini", openai_key="xxx")
llm = OpenAILLM(llm_config)
agent_manager = AgentManager()
workflow_graph = WorkFlowGraph.from_file("path/to/workflow.json")
benchmark = SomeBenchmark()
# 创建评估器
evaluator = Evaluator(
llm=llm,
agent_manager=agent_manager,
num_workers=4
)
# 运行异步评估
async def run_async_eval():
with suppress_logger_info():
results = await evaluator.async_evaluate(
graph=workflow_graph,
benchmark=benchmark
)
return results
# 执行异步评估
results = asyncio.run(run_async_eval())
访问评估记录¶
from evoagentx.evaluators import Evaluator
from evoagentx.models import OpenAILLMConfig, OpenAILLM
from evoagentx.benchmark import SomeBenchmark
from evoagentx.core.callbacks import suppress_logger_info
# 初始化组件
llm_config = OpenAILLMConfig(model="gpt-4o-mini", openai_key="xxx")
llm = OpenAILLM(llm_config)
benchmark = SomeBenchmark()
evaluator = Evaluator(llm=llm)
# 运行评估并抑制日志
with suppress_logger_info():
evaluator.evaluate(graph=graph, benchmark=benchmark)
# 获取所有评估记录
all_records = evaluator.get_all_evaluation_records()
# 获取特定示例的记录
example = benchmark.get_test_data()[0]
record = evaluator.get_example_evaluation_record(benchmark, example)
# 通过示例 ID 获取记录
record_by_id = evaluator.get_evaluation_record_by_id(
benchmark=benchmark,
example_id="example-123",
eval_mode="test"
)
# 访问工作流图评估的轨迹
if "trajectory" in record:
for message in record["trajectory"]:
print(f"{message.role}: {message.content}")
Evaluator
类提供了一种强大的方式来评估工作流和动作图的性能,使 EvoAgentX 框架中的定量比较和改进跟踪成为可能。