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 上。