對抗 AI Slop:介紹 aislop,專為 AI 生成程式碼異味設計的 CLI

AI 編碼代理(如 Claude Code、Cursor 等)的興起,從根本上改變了我們編寫軟體的方式。雖然這些工具可以生成通過測試和 linting 的功能性程式碼,但它們經常會引入一種特定的技術債,稱為「AI slop」。這種程式碼雖然可以運作,但其編寫模式是任何經驗豐富的工程師都不會選擇的:敘述性的註解(僅重述顯而易見的事實)、吞掉異常(exceptions)以及模糊實際邏輯的冗餘防護措施。

為了對抗這一點,aislop 作為一種確定性的 CLI 工具應運而生,旨在於這些特定的「程式碼異味」(code smells)腐蝕你的程式碼庫之前將其攔截。與許多由 AI 驅動的工具不同,aislop 在其運行路徑中不使用 LLM,從而確保相同的程式碼始終會產生相同的評分。

什麼是「AI Slop」?

AI slop 並非指錯誤(bugs);而是指品質與可維護性。它體現在幾個明顯的模式中:

  • 敘述性過度註解:註解僅在描述程式碼「在做什麼」(這應該從程式碼本身就能看出來),而不是在描述「為什麼」要這樣做。
  • 適應不良的容錯機制:有一種「將異常掃到地毯下」的傾向,即僅捕獲錯誤並記錄警告,而不是在應該發生故障時讓系統大聲地失敗。
  • 冗餘的防護措施:過度依賴 null coalescing operators 並使用防禦性回退(fallbacks),將每個值都視為可選,這往往模糊了「正常路徑」(happy path)與「非正常路徑」(unhappy path)之間的界線。
  • 機械性浪費:幻覺出的 import、重複的輔助函數,以及在 TypeScript 中繞過類型系統的 as any 強制轉換。

aislop 如何運作

aislop 並非依賴另一個 LLM 來審查程式碼(這既耗費 token 又不具確定性),而是結合使用了 Regex、抽象語法樹(AST)以及現有的業界標準工具。它會並行運行六個確定性引擎:

Engine Focus Tools Used
Formatting 風格一致性 Biome, ruff, gofmt, cargo fmt, 等
Linting 特定語言的問題 oxlint, ruff, golangci-lint, clippy, 等
Sloppiness AI 特有的模式 針對敘述性註解、TODO stubs 等的自定義規則
Code Quality 複雜度與死碼 Knip, 函數/檔案大小限制, 深層嵌套
Security 漏洞 依賴項審計, eval/innerHTML 檢查
Architecture 結構化規則 自定義的 import 禁令與分層規則

整合至開發者工作流

aislop 最強大的功能之一,是它能夠直接整合進開發者與 AI 代理之間的反饋迴圈中。

1. 品質閘門 (The Quality Gate)

透過在 .aislop/config.yml 檔案中實作 failBelow 閾值,團隊可以將 AI slop 視為 CI 失敗。如果代理產生的 PR 將程式碼庫評分降至某個閾值以下(例如 80/100),建置就會失敗,迫使代理(或人類)清理 slop。

2. 代理交接 (Agent Handoff)

當 aislop 識別出它無法透過機械方式修復的問題(例如設計不良的重試機制)時,它會提供直接的交接。像 npx aislop fix --claudenpx aislop fix --cursor 這樣的命令會將診斷資訊傳回給代理,有效地告訴 AI:「你留下了這個 slop;現在去修復它。」

3. 即時掛鉤 (Real-time Hooks)

對於使用 Claude Code 等代理的使用者,aislop 可以安裝掛鉤,在每次編輯後運行。這會建立一個即時的反饋迴圈,讓代理能即時收到關於其程式碼品質不佳的通知,讓其在產生 slop 的同時避免技術債的累積。

社群觀點與挑戰

雖然該工具因其速度與確定性而受到讚譽,但社群也指出了檢測 AI slop 的幾項挑戰:

  • 誤報 (False Positives):部分使用者回報,特定的函式庫方法(例如 SQLModel 的 exec)可能會被誤認為是危險的內建函數(例如 Python 的 exec())。
  • 「人類 Slop」悖論:一些開發者指出,該工具偶爾會將人類編寫的程式碼標記為 AI slop,而一些真正懶惰的 AI 程式碼卻能溜掉,這顯示人類與 AI 的「不整潔」往往是重疊的。
  • 邏輯的細微差別:正如一位使用者所言,AI 經常難以區分「正常路徑」與「非正常路徑」,從而產生過於安全而導致無法使用的程式碼。這種模式比起敘述性註解,更難透過確定性 linter 捕捉。

結語

隨著我們邁向代理式軟體工程(agentic software engineering)的世界,瓶頸不再是程式碼生成的速度,本身,而是程式碼審查的速度。像 aislop 這樣的工具將審查的負擔從人類轉移到確定性的閘門,確保 AI 生成的效率不會以犧牲長期可維護性為代價。

Sources