三只貓
Rich Mindset Zone
richmindsetzone.com
← All posts

AI Code 品質差?LLM Smells 教你捉 AI 寫嘅壞 Code

當 AI 寫嘅 Code 開始「有陣除」

2026 年,超過六成嘅 production code 由 AI 輔助生成已經唔係新鮮事。但如果你有認真 code review 過 AI 寫嘅 PR,你就會發現一個尷尬嘅事實:AI 嘅 code 通常「睇落去好掂」——function 名啱、型別到位、仲有埋 docstring——但總係有種講唔出嘅唔妥。啲 code 好似識行識走,但一改就爛,一拆就散,一上 production 就喺邊界 case 度跪低。

呢種「講唔出嘅唔妥」唔係幻覺。LLM 生成 code 嘅過程本質上係 token prediction,佢擅長模仿常見 pattern,但唔擅長理解成個 system 嘅 invariants。結果就係一批表面靚仔、內裡脆弱的 code 源源不絕地流入 codebase。業界開始將呢類反覆出現嘅 pattern 叫做 LLM Smells——AI 寫嘅 code 獨有嘅壞味道。

十種最常見嘅 LLM Smells

經過大半年嘅實戰觀察,我歸納咗十種最常喺 AI 生成 code 度見到嘅氣味:

1. Over-Engineering of Trivial Logic。AI 好鍾意將一個簡單嘅 if-else 寫成 strategy pattern,將一個 filter 寫成完整嘅 pipeline。原因係 training data 入面嘅高質素 open source project 多用 design pattern,AI 學到嘅就係「複雜=好」。

2. Hallucinated API Calls。Call 一個完全唔存在嘅 library function,或者用錯 method signature。呢個係 LLM 嘅 signature flaw——佢會自信滿滿噉生成一段從來冇存在過嘅 API 用法。

3. False Parallelism。無意義地將可以同步執行嘅 task 丟入 thread pool,為「效能」而「效能」,實際上 overhead 遠超收益。

4. Symmetrical Error Handling。每段 code 都用同一種 try-catch pattern,唔理實際需要。AI 學到嘅係「穩陣」,但實際做嘅係 noise。

5. Copy-Paste Inheritance。重複嘅 logic block 完全一致,AI 唔識得 abstract,因為佢「睇到」嘅係一個個獨立嘅 token sequence。

6. Dead Code Generation。定義咗但永遠唔會被用到嘅 function、變數、import。AI 唔擅長考慮 caller-callee 關係。

7. Wrong Abstraction Boundary。將唔應該分開嘅嘢分開,或者將唔應該黐埋嘅嘢黐埋。AI 缺乏對 domain 嘅理解。

8. Inconsistent Naming。同一樣嘢喺唔同位置用唔同嘅名,因為 LLM 唔會「記住」佢幾個 token 前用過咩名。

9. Premature Optimization。未到 bottleneck 就落手「優化」,引入 caching、lazy loading、memoization,但實際上個 function 一個鐘先 call 一次。

10. Missing Edge Cases。Happy path 行得通,但空值、邊界值、網絡斷線、rate limit——全部冇處理。AI 嘅 training data 偏向「正常」嘅 code path。

Anatomia:將壞味道變成可執行嘅檢查

發現問題係第一步,系統化咁捉問題係第二步。呢度要介紹嘅係 Anatomia——一個專為 AI-generated code 設計嘅靜態分析 pipeline。

傳統 linter 如 ESLint、PyLint 主要檢查 syntax 同 style,對 LLM Smells 基本冇反應。Anatomia 嘅做法唔同:佢唔係單純睇 syntax tree,而係分析 code 嘅結構特徵,再同 LLM-generated code 嘅統計 pattern 做比對。

具體 pipeline 分三層:

  • 第一層:Pattern Detection。用 AST-based matching 去捉 over-engineering、dead code、false parallelism 呢類結構性問題。例如 detect 到一個單純嘅 dictionary lookup 被包裝成 strategy pattern,就 raise warning。
  • 第二層:Flow Analysis。Traverse call graph 去捉 hallucinated API、wrong abstraction boundary、missing edge cases。呢層需要理解 caller-callee 關係同 data flow。
  • 第三層:Semantic Diffing。Compare AI-generated code 同 human-written code 喺同一 codebase 嘅 pattern 差異。如果 AI 寫嘅 error handling 同團隊其他人嘅風格差距過大,就要標記出嚟。

Anatomia 最值錢嘅地方係 integration 成本好低——你可以將佢塞入 CI/CD pipeline 做 pre-merge check,或者做 pre-commit hook。每一次 AI 生成 code 之後,Anatomia 會自動 scan 並產生一個 LLM Smells Report,列晒邊啲行有潛在問題、問題類別、建議修正方向。

Agent Rules:從源頭預防 AI 生成壞 Code

捉到問題之後修正係一種做法,但更好的做法係從源頭就唔好生成有問題嘅 code。呢度就輪到 Agent Rules 出場。

Agent Rules 嘅概念好簡單:喺你同 AI coding assistant(如 Cursor、Copilot、OpenCode)互動之前,先定義一組明確嘅約束規則,等 LLM 喺生成 code 嘅時候就避開常見陷阱。Agent Rules 唔係 prompt engineering 嘅 fancy 包裝,而係真係可以影響 model output 嘅結構性指引。

我喺自己嘅團隊入面用咗三個月 Agent Rules,總結幾條實證有效嘅 rule:

Rule 1: “Prefer flat code over abstraction.” 直接同 LLM 講明,除非有五個以上嘅重複,否則唔需要用 design pattern。呢條 rule 直接解決 over-engineering 問題。

Rule 2: “Use the same name for the same thing across the entire codebase.” 要求 LLM 喺生成新 function 之前先 grep 一下現有 codebase 有冇類似概念嘅命名慣例。

Rule 3: “Always handle null/empty/error cases before happy path.” 強制 LLM 先寫 edge case 再寫 main logic,反轉一般 training data 嘅順序。

Rule 4: “Do not add any import or function that is not used within the same file.” 直接消除 dead code 嘅 source。

最關鍵嘅係,Agent Rules 唔係一次性嘅 prompt,而係版本化嘅文件,同 codebase 一齊 evolve。每次有新嘅 LLM Smell 被 Anatomia detect 到,你就應該對應加一條 Agent Rule。

建立你嘅 AI Code Quality Pipeline

將呢三樣嘢組合埋一齊,你就得到一個完整嘅 AI code quality 管治體系:

  1. Agent Rules 喺生成階段預防常見問題
  2. Anatomia 喺 review 階段 detect 漏網之魚
  3. Human Review 仍然係最後把關(但 focus 可以放喺 business logic 而唔係 syntax)

2026 年嘅現實係:AI 寫 code 嘅速度唔會減慢,只會更快。與其對抗呢個趨勢,不如建立一個系統去確保 AI 生成嘅 code 達到你嘅標準。LLM Smells 係呢個系統嘅 diagnostic vocabulary,Anatomia 係檢測工具,Agent Rules 係預防疫苗。

如果你嘅 team 仲係用人手逐行 code review AI 生成嘅 code,你已經輸喺起跑線。今日就開始建立你嘅 AI code quality pipeline,等你嘅 codebase 唔會變成一條充滿 LLM Smells 嘅 technical debt 屎坑。