- 单元测试通过使用内存中的模拟来隔离地练习代理的小的、确定性的部分,因此您可以快速、确定性地断言精确行为。
- 集成测试使用真实的网络调用测试代理,以确认组件协同工作、凭据和架构一致,并且延迟可接受。
集成测试
许多代理行为只有在使用真实的 LLM 时才会出现,例如代理决定调用哪个工具、如何格式化响应,或者提示修改是否影响整个执行轨迹。LangChain 的agentevals 包提供了专门为使用实时模型测试代理轨迹而设计的评估器。 AgentEvals 让您可以轻松地通过执行轨迹匹配或使用 LLM 评判器来评估您的代理轨迹(包括工具调用的确切消息序列): 轨迹匹配
为给定输入硬编码一个参考轨迹,并通过逐步比较来验证运行。适用于测试具有明确定义的工作流,您知道预期行为的情况。当您对应该调用哪些工具以及以何种顺序调用有特定期望时使用。此方法是确定性的、快速且经济高效的,因为它不需要额外的 LLM 调用。
LLM 评判器
使用 LLM 定性验证代理的执行轨迹。“评判器”LLM 根据提示评分标准(可以包含参考轨迹)审查代理的决策。更灵活,可以评估效率和适当性等细微方面,但需要 LLM 调用且不确定性更高。当您希望评估代理轨迹的整体质量和合理性,而没有严格的工具调用或排序要求时使用。
安装 AgentEvals
轨迹匹配评估器
AgentEvals 提供了createTrajectoryMatchEvaluator 函数,用于将您的代理轨迹与参考轨迹进行匹配。有四种模式可供选择
| 模式 | 描述 | 用例 |
|---|---|---|
严格 | 消息和工具调用按相同顺序精确匹配 | 测试特定序列(例如,授权前的策略查找) |
无序 | 允许相同工具调用以任意顺序出现 | 在顺序无关紧要时验证信息检索 |
子集 | 智能体仅调用参考中的工具(没有额外的) | 确保智能体不超过预期范围 |
超集 | 智能体至少调用参考工具(允许额外的) | 验证是否采取了最低要求的操作 |
严格匹配
严格匹配
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 函数要了解更多关于评估您的代理的信息,请参阅LangSmith 文档。
以编程方式连接这些文档到 Claude、VSCode 等,通过 MCP 获取实时答案。