AgentSpec:AI代理的测试框架(用于非确定性行为的Jest)
AgentSpec 是一个专为AI代理设计的测试框架,灵感来自Jest,能够处理非确定性输出。它提供YAML定义测试、丰富的断言(如contains、regex、semantically_similar)、LLM-as-judge评估、行为差异报告以及CI/CD集成,帮助开发者在生产环境之前捕捉AI行为变化。
AgentSpec 是一个专门为 AI 代理设计的测试框架,旨在解决传统测试工具无法处理 AI 系统非确定性行为的问题。AI 代理在提示词、模型或工具变更时,其行为可能发生不可预测的变化,AgentSpec 允许开发者编写测试用例,在生产环境部署前捕捉这些变化。
该框架的快速入门非常简单:通过 npm 全局安装 agentspec,运行 agentspec init 创建一个 agentspec.yaml 配置文件,然后使用 agentspec run 执行测试。测试用例采用 YAML 格式定义,包含输入和期望断言。AgentSpec 提供了丰富的断言类型,不仅限于简单的字符串相等,还包括检查输出是否包含特定内容(contains)、不包含特定内容(not_contains)、包含任意一个元素(contains_any)、匹配正则表达式(regex)、语义相似度(semantically_similar)、JSON 路径和值验证(json_path, json_value)、工具调用检测(tool_called)以及最大延迟时间(max_latency_ms)等。这些断言针对 AI 输出的可变性进行了优化。
AgentSpec 的一个重要特色是集成 LLM-as-judge 功能。开发者可以使用本地 Ollama 模型作为评判者,通过 --judge-endpoint 和 --judge-model 参数指定,从而在不产生 API 成本且保护隐私的前提下评估响应质量。例如,可以定义测试用例要求响应必须包含“如何重置密码”的解释,然后由本地模型进行判断。
行为差异报告是另一个关键功能。AgentSpec 会存储每个测试用例的最后一次通过输出。当行为发生变化时,报告会详细显示新增和移除的内容,帮助开发者快速定位回归问题。例如,输出中“你需要在安全设置中刷新令牌”可能变为“您的令牌已过期,请联系支持”,报告会清晰列出这些差异。
对于真实代理的测试,AgentSpec 提供了 --endpoint 参数,支持测试任何 HTTP 可访问的代理。框架会向指定端点发送 {input: "..."} 并期望返回 {output: "..."}。CI/CD 集成方面,AgentSpec 支持退出码(失败时返回 1)、JUnit XML 输出、JSON 输出以及 GitHub Action。CLI 命令包括 run、init、list 和 version,并支持测试过滤、监听模式等高级功能。
AgentSpec 的路线图包括从对话历史自动生成测试、Python 代理支持、Web 仪表板、GitHub PR 集成等。该项目采用 MIT 许可,主要使用 TypeScript 开发,托管在 GitHub 上。