- 单元测试使用内存模拟对象独立测试智能体的小型、确定性部分,以便快速、确定地断言确切行为。
- 集成测试 使用真实网络调用测试智能体,以确认组件协同工作、凭证和模式匹配,以及延迟可接受。
集成测试
许多智能体行为只有在使用真实LLM时才会出现,例如智能体决定调用哪个工具、如何格式化响应,或者提示修改是否影响整个执行轨迹。LangChain的agentevals 包提供了专门设计用于使用实时模型测试智能体轨迹的评估器。
AgentEvals 允许您通过执行轨迹匹配或使用LLM法官来轻松评估智能体的轨迹(消息的确切序列,包括工具调用):
轨迹匹配
为给定输入硬编码参考轨迹,并通过逐步比较验证运行。适用于测试明确定义的工作流,其中您了解预期行为。当您对应该调用哪些工具以及调用顺序有特定期望时使用此方法。这种方法具有确定性、快速且成本效益高,因为它不需要额外的LLM调用。
LLM作为法官
使用LLM定性验证智能体的执行轨迹。“法官”LLM根据提示标准(可以包括参考轨迹)审查智能体的决策。更灵活,可以评估效率和适当性等细微方面,但需要LLM调用且确定性较低。当您希望评估智能体轨迹的整体质量和合理性,而没有严格的工具调用或顺序要求时使用。
安装 AgentEvals
轨迹匹配评估器
AgentEvals 提供createTrajectoryMatchEvaluator 函数来将智能体的轨迹与参考轨迹进行匹配。有四种模式可供选择:
| 模式 | 描述 | 使用场景 |
|---|---|---|
strict | 相同顺序的消息和工具调用的精确匹配 | 测试特定序列(例如,策略查找在授权之前) |
unordered | 相同的工具调用可以以任何顺序出现 | 验证顺序无关紧要时的信息检索 |
subset | 智能体仅调用参考中的工具(无额外工具) | 确保智能体不超过预期范围 |
superset | 智能体至少调用参考工具(允许额外工具) | 验证至少执行了所需的最小操作 |
严格匹配
严格匹配
strict 模式确保轨迹包含相同顺序的相同消息和工具调用,尽管允许消息内容存在差异。当您需要强制执行特定的操作序列时,这非常有用,例如要求在授权操作之前进行策略查找。无序匹配
无序匹配
unordered 模式允许以任何顺序进行相同的工具调用,这在您希望验证是否检索了特定信息但不关心顺序时很有帮助。例如,智能体可能需要检查城市的天气和事件,但顺序无关紧要。子集和超集匹配
子集和超集匹配
superset 和 subset 模式匹配部分轨迹。superset 模式验证智能体至少调用了参考轨迹中的工具,允许额外的工具调用。subset 模式确保智能体没有调用超出参考范围的任何工具。您还可以设置
toolArgsMatchMode 属性和/或 toolArgsMatchOverrides 来自定义评估器如何考虑实际轨迹与参考轨迹中工具调用之间的相等性。默认情况下,只有具有相同参数且调用相同工具的工具调用才被视为相等。访问仓库了解更多详情。LLM作为法官评估器
您还可以使用LLM通过createTrajectoryLLMAsJudge 函数来评估智能体的执行路径。与轨迹匹配评估器不同,它不需要参考轨迹,但如果可用,也可以提供参考轨迹。
无参考轨迹
无参考轨迹
有参考轨迹
有参考轨迹
如果您有参考轨迹,可以向提示中添加额外变量并传入参考轨迹。下面,我们使用预构建的
TRAJECTORY_ACCURACY_PROMPT_WITH_REFERENCE 提示并配置 reference_outputs 变量:有关LLM如何评估轨迹的更多可配置性,请访问仓库。
LangSmith 集成
为了随时间跟踪实验,您可以将评估器结果记录到 LangSmith,这是一个用于构建生产级LLM应用程序的平台,包括追踪、评估和实验工具。 首先,通过设置所需的环境变量来设置 LangSmith:evaluate 函数。
使用 vitest/jest 集成
使用 vitest/jest 集成
使用 evaluate 函数
使用 evaluate 函数
或者,您可以在 LangSmith 中创建一个数据集并使用 结果将自动记录到 LangSmith。
evaluate 函数: