AI News HubLIVE
站内改写2 分钟阅读

ResiliReplay:AI智能体与MCP服务器的混沌测试工具

ResiliReplay 是一个本地优先、与模型无关的 TypeScript 混沌测试工具,用于测试 AI 智能体和 MCP 服务器。它记录版本化 TraceEvent、注入由种子控制的故障、根据声明证据评估恢复能力,并将首个因果失败编译为可编辑场景与可执行 Node.js 回归测试。确定性流程无需 API 密钥或 LLM 裁判,仓库还提供演示、MCP 审计、多种报告格式和 GitHub Action。

来源Hacker News AI作者: ali110v

ResiliReplay 是一个面向 AI 智能体(AI agent)与 MCP(Model Context Protocol)服务器的混沌测试与韧性验证工具。它采用 TypeScript 实现,本地优先,且与具体模型无关。其工作流可以概括为:记录版本化的 TraceEvent,注入由种子(seed)控制的故障,依据用户声明的证据对恢复行为评分,再将首个因果失败编译为可编辑的场景和一个可执行的 Node.js 回归测试。该确定性路径完全不需要 API 密钥、付费模型、Docker、外部账户、遥测或 LLM 裁判,因此可以离线和可复现地运行。

快速开始只需 Node.js 20 或 22 与 pnpm。克隆仓库后依次执行 pnpm install --frozen-lockfile、pnpm build、pnpm demo 即可看到完整演示:demo 会在本地运行一个真实的确定性子进程,注入三个故障,同时输出一次成功恢复和一次未恢复失败的评分,生成所有报告格式,编译失败轨迹,并执行生成的回归测试。继续运行 pnpm demo:mcp 和 pnpm exec resilireplay test scenarios 可以体验 MCP 审计:它会检查一个故意存在漏洞的玩具 stdio 服务器和一个具备韧性的服务器,前者有两个预期的安全金丝雀(safe-canary)发现,后者没有。

实际使用中,可以用 record 命令录制内置的确定性 agent,并通过 replay 生成基线报告。真实 agent 框架的适配器会产生相同的版本化 TraceEvent。对于 MCP 审计,resilireplay mcp audit 默认只会读取 tools/list 的 schema,并调用名为 reliability_probe 的工具;只有在审阅工具行为后才能使用 --call-tools,因为 MCP 调用可能产生服务器端副作用。非回环的流式 HTTP 目标还需要显式指定 --allow-remote。

故障注入既可以使用内置故障,也可以使用可审阅的 YAML 场景。相同轨迹、场景和种子会产生完全相同的变更,从而保证可复现性。覆盖的故障包括有界延迟、超时、429/5xx、连接重置、截断、畸形 JSON、重复响应与过期响应,以及工具/工作流层面的错误、权限、临时文件缺失、结果损坏、副作用重复、交接丢失、错误接收者、过期状态、冲突指令和循环等。将失败轨迹升级为回归测试时,generate-test 命令会生成最小化 fixture、场景、manifest 和可执行的 node:test;manifest.json 会通过 SHA-256 哈希把源轨迹、fixture、场景和测试关联起来。

每次运行可输出终端、JSON、HTML、JUnit、SARIF 2.1.0、manifest 和 SVG 徽章等报告,便于本地检查、CI 注解和代码扫描集成。示例报告会显示恢复评分 100/100、重试 1/3、安全性合规等信息。架构上,稳定边界是严格且与供应商无关的 TraceEvent,而不是特定模型 SDK。仓库按 @resilireplay/core、trace、reporters、mcp-chaos、proxy、CLI 和 GitHub Action 等包组织,分别负责事件与故障引擎、轨迹编译、报告生成、MCP 混沌实验、回环代理、跨平台命令和 CI 集成。

安全方面,record 并不是操作系统沙箱,它只会执行用户提供的命令;因此应只审计自己拥有或已获授权的 MCP 服务器,并在使用 --call-tools 前检查工具 schema。凭据形状的值和敏感键会在写入轨迹前进行脱敏,但若源轨迹包含私有应用数据,相关报告仍应视为敏感测试证据。文件系统故障使用自有临时目录,输出路径会做包含检查,子进程有超时和清理机制,监听器默认只绑定回环地址。仓库的 SECURITY.md 和 THREAT_MODEL.md 提供了更完整的说明。

项目也坦诚列出了当前局限:Streamable HTTP 的集成覆盖不及 stdio;record 不是沙箱;MCP 工具调用可能有副作用;当适配器提供 parentId 和 causeId 时因果最小化效果最好;v0.1.0 会把流式输出聚合为响应事件;报告哈希只证明链接和完整性而非真实性;包尚未发布到 npm。CI 可以通过 pnpm quality 运行完整本地门禁,或直接使用 composite action(aliengineering-byte/[email protected])。项目采用 Apache-2.0 许可,并欢迎确定性、有界且由测试覆盖的贡献。该项目由 Ali 开发并维护。