NoWreck:AI編碼助手的確定性驗證器
NoWreck 是一個開源工具,透過靜態程式碼分析自動驗證 AI 編碼助手的解釋與實際程式碼變更是否一致,能檢測出幻覺函式、解釋與差異不匹配等問題。
NoWreck 是一個確定性驗證器,專門用於檢查 AI 編碼助手(如 Claude Code、Copilot)生成的變更解釋是否真實反映了實際程式碼差異。當 AI 工具修改程式碼時,它通常會附帶一段解釋,但有時這些解釋會包含錯誤——例如引用了不存在的函式、聲稱呼叫了實際未呼叫的函式,或遺漏了實際做出的修改。NoWreck 透過靜態程式碼分析自動對比 AI 的宣告與真實差異,而非依賴另一個 AI 的判斷。
NoWreck 能檢測四類問題:幻覺的內部檔案、函式或類;虛假的內部 API 呼叫(引用不存在的函式);解釋與差異不一致(AI 描述了實際不存在的變更);以及未解釋的變更(AI 未提及的真實修改)。但需要注意,NoWreck 不檢測邏輯錯誤、執行時故障、安全漏洞或幻想的第三方包(後者建議使用 slopcheck 或 slop-scan)。
為了證明其有效性,開發者在真實模型上進行了測試:他們要求 AI 在 somme_file.py 中新增一個 is_valid_email 函式,並謊稱在函式內呼叫了 sanitize_input(但程式碼中不應包含該呼叫)。NoWreck 的報告顯示,一個宣告(新增函式)被確認,另一個宣告(呼叫函式)被反駁——準確抓住了幻覺。
安裝方面,可以透過 pipx 從克隆的倉庫安裝:pipx install .。配置時需要設定 API 金鑰、基礎 URL 和模型名稱。例如,使用 Groq 時設定 nowreck config set base_url https://api.groq.com/openai/v1,並指定模型。NoWreck 支援多種 OpenAI 相容的提供商,包括 OpenAI、Groq、DeepSeek、Ollama 等。
NoWreck 的工作流程分為四步:在變更前掃描倉庫(記錄符號、函式、類);將提示傳送給模型,獲取差異和結構化宣告;在變更後掃描倉庫;獨立對比 AI 宣告與實際檢測到的變更,報告每個宣告的狀態:CONFIRMED、CONTRADICTED 或 UNVERIFIABLE。所有宣告型別(如 ADD_FUNCTION、CALLS_FUNCTION)均透過直接的結構化事實驗證,而非關鍵詞猜測或語義解釋。
值得注意的是,NoWreck 提供置信度分數,反映其確定性檢查的可靠性——但並非程式碼無錯誤的保證。它的侷限性包括無法處理動態 Python 行為(如 exec/eval、動態匯入、反射),且目前僅支援 Python。
總之,NoWreck 專注於一個特定問題:AI 的解釋是否與實際變更匹配?它不生成程式碼,不進行主觀評審,而是提供一種基於靜態分析的確定性驗證方法。