使用生成式 AI 的底層邏輯

上個月我讓 AI 生成了一段程式碼。看起來很完美——格式工整、邏輯清晰、註解詳細。我興奮地跑測試,結果失敗了一堆。

那一刻我意識到:AI 不是魔法,是工具。 用對了是槓桿,用錯了是坑。過去半年我在專案裡大量使用 AI,踩過坑也找到了節奏。這篇文章想分享什麼時候 AI 真的有用,什麼時候只是在浪費時間。

AI 什麼時候是槓桿?

真正放大工程師價值的場景

過去半年用 AI 的經驗讓我發現,AI 是「放大器」,不是「替代品」。它能放大你的專業判斷,但無法取代思考。

1. 提升效率:自動化重複勞動

上個月我接到一個需求:兩天內補完 50 個 API 的文件。以前我會加班到天亮,這次讓 Cursor 的 Agent mode 生成初稿,自己負責審查調整。第一天下午就完成了,而且 AI 還發現了幾個我忽略的 edge cases。

  • 生成 API 文件、單元測試
  • 批量重構相似的程式碼模式
  • 自動產生 boilerplate code

2. 擴展能力邊界:快速學習新領域

有次 PM 要我研究「賭博成癮者的多巴胺機制」來設計防沉迷功能。我用 Perplexity 查詢,兩小時就理解了核心概念:不只贏錢會產生快感,連「預期會贏」這個念頭都會產生多巴胺。這個知識直接用在設計「冷靜期」功能上。

AI 加速學習:

  • 透過 Felo、Perplexity 等工具快速掌握跨領域知識
  • 從「不懂」到「能應用」,縮短好幾天的學習曲線

3. 降低門檻:快速驗證想法

上週我想驗證「卡片滑動審查程式碼」的想法。用 v0 輸入描述,5 分鐘就有了可互動的原型。試了三個版本,15 分鐘內發現這個想法不適合。快速失敗比慢慢實作好。

快速驗證工具:

  • v0、Bolt.new、Loveable 快速產生可互動原型
  • 讓初學者也能產出可用成果
  • 資深工程師更快完成概念驗證

關鍵是專業判斷: AI 生成初稿,人類把關品質。沒有 AI 做不到這麼快;沒有人類審查,產出不能用。

什麼時候 AI 變成負擔?

但不是每次都順利。兩個月前我讓 AI 重構一個舊模組,它重寫了大量程式碼,看起來很乾淨。我直接 commit 了。隔天測試報告:一堆失敗。

花了兩天 debug 才發現,AI 在「優化」時改變了邊界條件的處理。那些「醜陋」的舊程式碼其實處理了很多歷史問題。

常見的反模式:

1. 產出品質不佳

  • AI 生成的程式碼充滿 bug 或技術債
  • 反而花更多時間修正

2. 過度依賴失去思考

  • 團隊有個實習生,任何功能都先問 AI
  • 我問他「為什麼這裡要用 useMemo?」他答不出來
  • 兩週後他寫的頁面超級卡,因為用錯了地方

3. 錯誤的應用場景

  • 複雜架構設計不適合直接問 AI
  • 需要深度理解業務邏輯的任務

4. 工具即答案的迷思

  • 誤以為「有 AI 就能解決一切」
  • 忽略專業判斷與流程設計

記住:你是 committer,要對程式碼負責。 AI 是輔助,不是替罪羊。

LLM 的本質:為什麼 AI 會瞎掰?

機率模型的特性

用了半年 AI,我理解了它的本質:機率模型,不是推理引擎。

想像你有個朋友,他記憶超強、讀過所有文件,但回答問題時會擲骰子。有時超準,有時一本正經地胡說八道。同一個問題,今天問是 A 答案,明天問是 B 答案。

更準確地說,LLM 每次生成時都從機率分佈中採樣。這個分佈受 prompt、temperature、訓練資料等因素影響。它沒有「知識庫」,只是根據統計規律預測「最可能的下一個詞」。

這導致兩個問題:

  1. 隨機性: 同一個 prompt,多次詢問可能得到不同答案
  2. 推理能力有限: 擅長模式擬合,遇到複雜問題容易出錯

Prompt 工程的現實

沒有給足夠的 context,AI 就像穿越來的金魚腦。有次我問:「把這個函數改成 async」。它生成了程式碼。我又問:「這樣會影響性能嗎?」它回:「什麼函數?」

實務建議:

  • Prompt 不是萬能: 即使很明確,AI 也可能因知識盲點而答錯
  • 迭代式互動: 與其追求「完美 prompt」,不如先簡單試探,根據回應逐步調整
  • 模型差異: 不同 LLM 即使面對相同 prompt,也會因訓練資料不同而產生不同結果

開發上如何減少 AI 幻覺

1. 給 AI 高品質的資料來源

我們專案每個模組都有詳細的 README。一開始只是為了團隊協作,後來發現對 AI 超有用。

有次讓 AI 寫資料處理邏輯,第一次沒給 README,生成的程式碼完全沒考慮資料可能是 null。我在 README 補上「某些欄位可能為 null」,AI 再生成時主動加了檢查。

實務做法:

  • 多寫 README: 讓 AI 有資料可查
  • 結合 RAG 技術: 讓 LLM 參考企業內部資料、專業文件
  • 要求引用來源: 問 AI「這個資訊來自哪裡?」

2. 明確設計 Prompt 和專案規範

我們在 .cursor/rules/ 放了規範檔案,描述:

  • Coding style(用 functional component,不用 class)
  • 常見陷阱(某個 API 有 rate limit)
  • 專案架構(檔案組織方式)

有了這個,AI 生成的程式碼會自動符合規範,不用每次重複說明。

Prompt 技巧:

  • 精確描述需求: 像 cursor rules 一樣,描述專案樣貌或開發習慣
  • 限制回答範圍: 要求模型只根據提供資料回答,若無資料請回答不知道
  • 指定格式: 要求 LLM 依照指定格式、欄位、步驟作答

3. 建立驗證與審查機制

團隊規定:任何 AI 生成超過 50 行的程式碼,都要 code review。

不是走形式,而是真的逐行檢查:

  • 邏輯對嗎?
  • 邊界條件考慮了嗎?
  • 有安全問題嗎?
  • 性能會不會有問題?

有時 review 發現 AI 用了 O(n²) 算法,其實 O(n) 就能解決。有時發現它把敏感資訊寫在前端了。

其他驗證方式:

  • 多模型交叉驗證: 同一問題用不同 LLM 詢問,對比結果
  • 自動化測試: 結合單元測試、Lint 工具等自動化檢查

4. 提升團隊 AI 素養

教育與培訓:

  • 讓團隊了解 LLM 局限與幻覺風險
  • 培養批判性思維
  • 建立回饋機制

制定 working agreement:

  • committer 就要對 code 負責,不要都推給 AI
  • 明確定義 AI 角色:輔助建議,最終決策仍由人類把關

5. 技術性調整

  • 限制模型自由度: 調整 temperature、top-p 等參數,降低隨機性
  • 定期更新資料集: 確保訓練資料新穎且多元

選對模型與工具

不同模型的個性

最近用 Windsurf,他們團隊分享了對不同模型的看法,我很有共鳴。

Sonnet 3.7 - 積極的夥伴:
超級主動,你說重構一個函數,它會順便重構整個模組。一開始我覺得煩,後來發現:寧願一個需要拉住的夥伴,也不要一個需要催促的助手。但要小心它太積極時可能會做不想要的改動。

Gemini 2.5 Pro - 穩定的實用主義者:
不會亂發揮,你要什麼就給什麼。程式碼品質跟 Sonnet 差不多,但更穩定一致。

Sonnet 3.5 - 精準的執行者:
最適合除錯和範圍明確的重構。很少偏離主題,總能穩定維持在嚴格範圍內。

GPT-4o - 謹慎的規劃者:
它會先想再做。其他模型直接開始寫,邊寫邊說計畫。GPT-4o 會先生成計畫,問「這樣可以嗎?」確認後才執行。

Cascade Base - 快速的小幫手:
速度快,適合小型、獨立的編輯。當深度推理不是重點時特別理想,而且免費。

我的選擇策略

根據任務選模型:

情境推薦模型原因
快速迭代、探索新想法Sonnet 3.7積極主動,自動做延伸
維護舊程式碼、bug fixGemini 2.5 Pro穩定可靠,不會亂改
精確範圍的重構Sonnet 3.5精準把握範圍
複雜重構、架構改動GPT-4o先規劃再執行
小改動、快速測試Cascade Base免費又快

用對工具達到槓桿效果:

  • 提升效率: Windsurf、Cursor 的 Agent mode 協助重構、測試、文件
  • 擴展能力: Felo、Perplexity 快速學習新領域
  • 快速驗證: v0、Bolt.new 快速 Vibe Coding
  • 探討想法: Cursor 的 Chat mode 討論重構方向

我的使用心得

半年前開始用 AI 寫程式,我以為找到了「自動寫程式」的聖杯。

半年後發現,AI 沒有讓寫程式變簡單。它只是把「重複勞動」自動化了,讓我有更多時間思考「為什麼這樣設計」「有沒有更好的方案」。

現在用 AI,我會這樣做:

  1. 先自己想清楚思路
    要解決什麼問題?可能的方案是什麼?

  2. 給足夠的 context
    貼程式碼、說明限制、提供範例

  3. 分段讓 AI 做
    不要一次丟太大任務,一步步來

  4. 每一步都檢查
    不要等全部做完才測試

  5. 準備好 debug
    AI 會出錯,這很正常

這樣下來,AI 能讓開發速度快 2-3 倍。但前提是:我知道我在做什麼。

結語

AI 幻覺是 LLM 應用無法完全避免的現象,但工程師可以透過「資料把關、精確 prompt、人工審查、團隊教育」等策略,大幅降低幻覺對品質的負面影響。

寫程式的核心還是思考。AI 只是讓思考的結果能更快被實現。

別期待它完美。把它當成一個很聰明但偶爾會出錯的助手。你還是要把關,還是要思考,還是要負責。

但這樣的夥伴,已經很好了。


你用 AI 開發的經驗如何?遇到過什麼坑嗎?歡迎留言分享。

參考資源