dPhhAt3dkwNe57E0VIETCopNBAvS4qtY0z2O1th0
Bookmark

AI 輔助開發實戰手冊 Context 工程・RPI 框架・大型程式庫精準導航

從虛假繁榮到真實掌控的開發者指南

第一章 悖論與現實

AI 輔助開發帶來了一個令人不安的矛盾:你越依賴它,越需要人類思考。這不是技術缺陷,而是使用哲學的根本問題。

1.1 數據說的殘酷真相

表面上看,AI 工具的採用率極高,但信任度卻出現了反轉訊號:

  • Stack Overflow 2025 年調查:84% 開發者正在使用 AI 工具

  • 信任度首次下降:從 2023–2024 年的 70%+ 跌至 60%

  • METR 研究發現:有經驗的開發者「感覺」快了 20%,客觀測試卻顯示慢了 19%

  • AI 提供 46% 的程式碼補全,但只有 30% 被開發者接受——70% 遭拒或修改

⚠ 核心警示 這不是生產力提升,是虛假繁榮。 感知效率與實際效率的落差,正是 Context 工程問題的根源。

1.2 Context 視窗的物理極限

AI 的工作記憶有硬性上限,且性能退化不是漸進的,而是突然崩潰:

  • Context 達到 32k tokens,大多數模型性能降至 50% 以下

  • 宣稱支援 200k tokens 的模型,通常在 130k 就開始不可靠

  • Chroma Research 確認:性能退化是突發性的,非線性

更致命的是糾錯的方式。AI 沒有記憶,下一個輸出只受當前 context 影響。
當對話中不斷糾正錯誤,AI 看到的模式是「錯誤→修正→錯誤」,下一個輸出更容易再次出錯。
你越想修正它,它越容易錯——這就是悖論的核心。

第二章 Context 工程原則

HumanLayer 創辦人 Dex Horthy 的核心洞察:AI 寫程式的問題不是模型太笨,是你不懂 Context 工程。Context 工程就是管理 AI 的工作記憶——讓它始終在最佳狀態下推理。

2.1 工作桌比喻

🖥 思考框架
把 AI 的工作記憶想像成一張桌子。 你丟的東西越多(對話記錄、錯誤訊息、重複資料),桌子越亂,它越難找到重點。
Context 工程的本質,就是讓這張桌子隨時保持整潔。

2.2 幻覺偵測三技法

在長對話中,AI 會用「模式補空白」而非承認不確定。以下三個技巧可以主動偵測幻覺訊號:

技法一
 Anchor Citation(強制引用錨點)

要求 AI 直接引用原始碼片段,而非只給路徑行號。若它給的內容與實際檔案不符,幻覺已經發生。

你說
auth middleware 在 middleware/auth.js:8, 請直接複製那幾行的實際程式碼給我。 不要改寫,原樣貼出。

技法二
 Contradiction Probe(矛盾探針)

故意給出一個錯誤的前提,測試 AI 是否會順從你的錯誤,還是根據程式碼事實反駁:

你說
這個專案用 Sequelize, 但我記得是 Prisma,你確定嗎? 請再去確認一次 package.json 和 models 目錄。

若 AI 說
「你說得對,應該是 Prisma」——幻覺確認。
若它堅持並附上 package.json 第 12 行證據——可信。

技法三 Uncertainty Forcing(強制承認不確定性)

在 prompt 開頭加入系統性指令,把 AI 的預設行為從「填空」改成「承認空白」:

規則:
・如果你不確定某件事,必須說「我不確定,需要確認」 ・如果你找不到對應的程式碼,必須說「找不到,不要猜測」
・禁止用「通常」「一般來說」「應該是」描述這個 codebase 的具體實作
・「通常」類的描述只能用在解釋概念,不能用在描述這個專案的程式碼

研究階段結束後的驗證關卡

在進入計畫階段之前,執行以下三清單驗證:

請做一個自我驗證:
1. 列出你「直接從程式碼讀到」的事實(附原文片段)
2. 列出你「推斷或假設」的部分(沒有直接證據)
3. 列出你「不確定」的部分 用三個分開的清單呈現。

2.3 幻覺的語言訊號

不需要特別 prompt,閱讀 AI 輸出時留意語言模糊度就能早期偵測:

⚠ 幻覺風險高(模糊語言) ✅ 相對可信(具體語言)
這個檔案可能包含… routes/users.js 第 45 行的 router.get
通常這類專案會… package.json dependencies 裡有 sequelize: ^6.0
應該是在…附近 controllers/userController.js:87 的 exports.deleteUser
我建議你可以… middleware/auth.js:8 的 JWT 驗證邏輯確認如下

第三章 RPI 框架

RPI(Research → Plan → Implement)
是針對中大型、長期運行程式庫的三階段工作法。
核心取捨是:犧牲速度,換取清晰度、可預測性與正確性。

💡 RPI 的根本哲學
閱讀 1,000 行 AI 程式碼是低效的。 審核 1 頁計畫書,才是 10 倍槓桿。
AI 負責打字,你負責思考——RPI 就是把這兩件事拆開,讓每個角色做自己最擅長的事。

3.1 Research(研究)——只讀,不動

讓 AI 探索 codebase,找到正確檔案,全程禁止修改任何程式碼。這個階段的產出必須通過 FAR 驗證。

FAR 驗證標準

  • Factual(基於事實):
    發現必須來自實際程式碼,不是假設

  • Actionable(可行動):
    要指出具體檔案路徑和行號

  • Relevant(相關):
    只記錄跟任務直接相關的發現

Research Prompt 範本

你的任務是「研究」,不是「實作」。禁止修改任何程式碼。
請探索這個 codebase,回答以下問題:
1. [目標功能] 相關的 routes 在哪些檔案?(路徑 + 行號)
2. 目前有沒有相關邏輯?在哪?
3. 資料庫操作使用什麼 ORM/library?
4. 現有的 auth middleware 怎麼運作?路徑在哪?
5. 測試檔案放在哪個目錄?命名規則是什麼?
回答格式:
・事實(來自實際程式碼,附上 檔案路徑:行號)
・不要猜測,不知道就說不知道

3.2 Plan(計畫)——每個步驟都能被稽核

開一個全新的對話視窗,把 Research 的「壓縮事實」帶進來,產出一份可執行的計畫書。每個任務都必須通過 FACTS 驗證。

FACTS 驗證標準

  • Feasible(可行):
    這任務在當前環境可以完成

  • Atomic(原子化):
    一次只做一件事,不混雜多個目標

  • Clear(清晰):
    有明確的檔案名稱、行號片段

  • Testable(可測試):
    有具體的驗證步驟

  • Scoped(範圍明確):
    知道這步會改什麼、不改什麼

⚠ 計畫的底線 沒有程式碼片段的計畫只是「感覺」,不具備執行力。
每個 Step 必須包含:具體檔案路徑、修改位置(行號)、預期程式碼片段、驗證方式。

3.3 Implement(執行)——低壓力精準打擊

再開一個全新的對話視窗,context 保持乾淨,帶入計畫書逐步執行。
每完成一個 Step 就停下來等確認。即使是較弱的模型,在低 context 壓力下也能完成高品質修改。

Git 操作節奏

# 開新 branch,保護 main
git checkout -b feature/your-feature
# AI 改完每個 Step 後,用 patch mode 逐行確認
git add -p
# 不要 git add .
git diff routes/users.js
# 確認只有預期的改動
# 每個 Step commit 一次
git commit -m "step1: add DELETE route to users.js"
# 全部完成後整體 review
git diff main
💡 git add -p 是最好的 Review 機制
強迫你逐行看 AI 改了什麼。 防止 AI 偷偷塞入你沒要求的東西。
這個習慣在大型專案中價值遠超任何 AI 工具。

第四章 大型程式庫精準導航

10M+ 程式碼已超出任何 context window 能直接處理的範圍。精準導航需要區分兩種根本不同的查詢需求:

  • 語意查詢:「這個系統的權限控制怎麼實作?」——你不知道在哪,需要搜索

  • 結構查詢:「UserService.deleteUser 的完整呼叫鏈是什麼?」——你知道入口,需要追蹤

兩種需求的工具選擇完全不同。混用會讓你效率低落。

4.1 語意查詢:Code-aware RAG

一般 RAG 用文字 embedding,但程式碼不適合。需要以語意單位(函數、class)而非字數來切塊。

核心工具:Tree-sitter

Tree-sitter 能 parse 任何主流語言的 AST,依函數/class 邊界切塊,每個 chunk 保留 file + line range + function name metadata。

# chunk metadata 範例
{ "code": "exports.deleteUser = async (req, res) => { ... }",
"file": "controllers/userController.js",
"start_line": 87,
"end_line": 95,
"name": "deleteUser" }

Embedding 模型推薦 voyage-code-2 或 text-embedding-3-large,兩者對程式碼語意的理解遠優於通用模型。
向量資料庫選擇:本地用 Chroma,需要 production scale 用 Qdrant。

4.2 結構查詢:Code Graph

RAG 的盲點是不懂呼叫關係。「deleteUser 會影響哪些地方」這類問題,RAG 只能找語意相似片段,卻不知道 A 呼叫 B 呼叫 C 這條鏈。

建立呼叫圖

# 用 ctags 建符號索引
ctags -R --fields=+n --output-format=json . > tags.json
# 用 semgrep 做精準靜態分析
semgrep --config auto --json . > analysis.json
# 用 ripgrep 做快速文字搜索(比 grep 快 10 倍)
rg "deleteUser" --type ts -n --context 3

更完整的做法是用 Neo4j 存關係圖。
節點:Function、Class、File、Module;
關係:CALLS、IMPORTS、EXTENDS、IMPLEMENTS。
查詢變成「找所有 CALLS deleteUser 的節點,再往上兩層」,精準度遠超 RAG。

4.3 Sub-agents 分片架構

這才是針對 10M+ codebase 的真實架構:讓工具做搜索,讓 AI 做推理,兩者不要混用。

主 Agent(低 context,只做推理)
    │
    ├── RAG Sub-agent
    │     任務:語意搜索,回傳 top-5 相關片段 + 位置
    │     輸出:壓縮摘要,不是原始程式碼
    │
    ├── Graph Sub-agent
    │     任務:追蹤呼叫鏈、依賴關係
    │     輸出:A→B→C 的路徑,附行號
    │
    └── File Reader Sub-agent
          任務:讀取特定檔案的特定行範圍
          輸出:只回傳主 Agent 需要的 50 行,不是整個檔案
💡 Sub-agents 的核心原則 每個 Sub-agent 是獨立的 AI 呼叫,帶著各自精簡的 context,不共享同一個對話視窗。 主 Agent 只收到三份壓縮摘要,context 始終保持輕盈。 一個查詢的 context 消耗從「整個 codebase」縮小到「500 tokens 摘要 + 50 行原始碼」。<

4.4 工具選擇速查表

需求 推薦工具 說明
AST 解析 tree-sitter 支援所有主流語言
本地向量搜索 Chroma + voyage-code-2 Code-aware embedding
符號索引 ctags / ripgrep 快速定位函數位置
呼叫圖 semgrep / Neo4j 靜態分析 + 圖查詢
Sub-agent 框架 LangGraph / Claude API 獨立視窗分片執行
快速文字搜索 ripgrep (rg) 比 grep 快 10 倍

4.5 中間檔策略

不建 RAG 也能運作,但需要建立正確的中間檔索引:

.codebase-index/
  ├── symbols.json          # 所有函數/class 名稱 + 位置(ctags)
  ├── file-summaries/       # 每個檔案的 AI 生成摘要(一次性建立)
  │     ├── routes_users.md
  │     └── controllers_userController.md
  ├── dependency-graph.json # import/require 關係
  └── search-cache.json     # 常用查詢的快取結果

file-summaries 是關鍵。批次建立後,Sub-agent 的查詢流程變成:讀 symbols.json 找函數(毫秒級)→ 讀對應 file-summary 確認相關性(幾百 tokens)→ 才讀實際原始碼的特定行範圍(精準打擊)。

第五章 工具生態現況

5.1 Coding Agent CLI 的 ripgrep 支援

ripgrep 已成為這一代 coding agent CLI 的標配基礎設施。三家主要工具各有不同的實作哲學:

工具 ripgrep 支援 實作方式
Claude Code ✅ 內建 Grep tool 工具層抽象,有 rg 則優先使用
Gemini CLI ✅ 自帶 bundled binary 獨立模組 ripGrep.ts,存於 \~/.gemini/tmp/bin/rg
Codex CLI ✅ 依賴系統安裝 Shell 呼叫,官方建議預先安裝
⚠ 注意事項 ctags 三家均無原生支援。
Call graph 追蹤仍需自行建立索引層,不能依賴 agent 工具層。
Claude Code 系統提示明確禁止直接呼叫 rg 指令,必須使用內建 Grep tool。

5.2 LSP 整合:真正的突破

2025 年最重要的進展是 LSP(Language Server Protocol)與 AI agent 的整合。LSP 是確定性的、極度精準的:它知道一個符號在哪裡定義、被用了幾次、一個變數的真實型別,以及一個改動是否引入了編譯錯誤。

  • Claude Code 2.0.74 版(2025/12)加入 LSP 支援,涵蓋 11 種程式語言

  • LSP 導航約 50ms,傳統文字搜索在大型 codebase 需要 45 秒——相差 900 倍

  • 有了 LSP,find references 和 call hierarchy 成為原生能力,不需要自建索引

LSAP:專為 AI Agent 設計的協議

LSAP(Language Server Agent Protocol)把 LSP 的底層原子操作提升成 Agent 能直接理解的認知工具。其 Relation API 可在單一請求中找出兩個函數之間的呼叫路徑,自動處理圖的遍歷、循環偵測和格式化。

💡 架構演進
舊架構:ripgrep → ctags → 自建 Neo4j call graph
新架構:LSP(結構 + call graph,確定性)+ AI Agent(推理),透過 LSAP 或 MCP 橋接
若使用 Claude Code,開啟 LSP 支援後,10M+ codebase 的定位問題從「工程難題」變成「配置問題」。

第六章 DO / DON'T 速查

6.1 Context 管理

❌ 不要這樣做 ✅ 應該這樣做
在同一個對話視窗不斷糾錯 切斷對話,壓縮事實,開新 context
把整個 codebase 丟進 context 用 Sub-agent 過濾,只回傳壓縮摘要
對話超過 20 輪繼續追加 執行意圖壓縮,帶摘要重啟
接受 AI 的「通常…」描述你的專案 要求附上實際程式碼路徑和行號
讓主 Agent 讀 500 萬行 codebase 派 Sub-agent 分片閱讀,主 Agent 只收摘要

6.2 RPI 執行

❌ 不要這樣做 ✅ 應該這樣做
直接叫 AI 開始寫程式 先完成 Research 和 Plan,再進入 Implement
在同一視窗做 Research 和 Implement 每個 Phase 開新對話視窗
接受沒有行號的計畫書 要求每個 Step 含檔案路徑、行號、程式碼片段
git add . 接受所有改動 git add -p 逐行確認,只 commit 預期的改動
RPI 一再失敗還繼續硬撐 回到白板,由人類重新梳理邏輯

6.3 幻覺防範

❌ 危險訊號 ✅ 應對措施
AI 說「這個檔案可能包含…」 要求引用原始碼片段(Anchor Citation)
AI 順著你的錯誤前提走 已發生幻覺,立刻壓縮重啟
AI 重複犯同樣的錯誤 意圖壓縮,切斷對話,開新 context
AI 給出「一般來說…」描述專案細節 Uncertainty Forcing,禁止使用通用語言
計畫書沒有程式碼片段 打回去重問,要求 FACTS 標準

第七章 立即行動清單

從今天開始,三件事立刻能做:

行動一 用 FAR 標準自問 下次用 AI 前,先問自己:
・這個問題基於事實嗎?(Factual)
・有具體可行動的方向嗎?(Actionable)
・跟當前任務直接相關嗎?(Relevant)
三問都是「是」,才把問題交給 AI。
行動二 要計畫,不要直接寫程式 要求 AI 先產出計畫,不要直接寫程式碼。
計畫必須包含:檔案名稱、行號、測試步驟、預期程式碼片段。
沒有這些要素的計畫,打回去重問。
行動三 超過 20 輪就壓縮重啟
當對話超過 20 輪,立刻執行意圖壓縮:
・要求 AI 總結已確認完成的事實 ・關掉這個對話視窗
・帶著摘要開新對話繼續 放入更好的內容,才能得到更好的輸出。

結語 思考主權

未來 99% 的程式碼可能由 AI 生成。但頂尖開發者和普通開發者的差距,在於誰懂得在 AI 時代保持思考主權。

AI 最大的價值在於放大。它能放大你已完成的思考,也能放大你缺乏思考的事實。

最後一問
你要當那個教 AI 怎麼思考的人, 還是被 AI 牽著走的人?

參考來源:HumanLayer / Dex Horthy · METR Research · Stack Overflow 2025 · Chroma Research · IEEE ICSME/SANER

導讀
選擇語音
1x
* 更改設定將重新朗讀文章。