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 開發並維護。