對抗 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 --claude 或 npx 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 生成的效率不會以犧牲長期可維護性為代價。