CodeTutor: Emacs 的 AI 配對程式設計師
CodeTutor 是一個 Emacs 套件,旨在作為 AI 配對程式設計教學導師,而非自動補全引擎。它將本地 AI 助手整合到 Emacs 編輯器中,以提供概念性指導、在儲存後審查程式碼變更,並提供架構建議,且絕不修改使用者的原始碼檔案。
核心哲學:教學重於實作
CodeTutor 的建立基於引導使用者走向解決方案,而非提供即插即用的程式碼。該工具旨在扮演資深或主任工程師的角色,專注於底層概念、風險與架構。
實作邊界
為了維持其導師角色,CodeTutor 遵循嚴格的邊界:
- 不修改原始碼:該工具不會寫入專案檔案、產生補丁(patches)或生成全檔案替換。
- 概念性指導:它提供精簡的說明性程式碼範例,並解釋其回饋背後的概念,但避免直接交付特定任務的完整實作。
功能能力
CodeTutor 透過四個主要的互動迴圈運作:啟動評估、儲存審查、手動提示與後續提問。
儲存審查迴圈
當 codetutor-review-on-save 被啟用時,該套件會掛鉤到 Emacs 的儲存程序。它會擷取儲存前的檔案狀態,將其與儲存後的緩衝區(buffer)文字進行比較以建立統一的 diff,並將此 diff 連同專案上下文(context)發送至 AI 後端。產生的教學回饋隨後會顯示在右側的導師面板中。
手動提示與後續提問
使用者可以透過 codetutor-ask 使用 minibuffer 與導師互動。此請求包含當前檔案、專案上下文與架構記憶。使用者接著可以使用 codetutor-follow-up 就先前的回答提出澄清性問題,以維持對話的連續性。
專案評估與下一步
- 啟動評估:執行
codetutor-open會觸發專案評估,識別從何處開始以及在撰寫程式碼之前需要哪些工程判斷。 - 下一步是什麼:
codetutor-what-next指令會要求導師根據現有的專案上下文建議單一最佳的下一步。
技術架構與上下文收集
CodeTutor 透過聚合來自多個本地來源的數據,建立全面的提示(prompts),以確保 AI 擁有足夠的上下文來提供建議。
上下文來源
| 來源 | 用途 |
|---|---|
PROJECT.md / project.md |
產品與專案方向 |
spec/ 目錄 |
規格說明與設計筆記 |
.codetutor/ARCHITECTURE.md |
持久的專案記憶 |
| 當前檔案文字 | 正在編輯的上下文 |
| Tree-sitter/Imenu 摘要 | 緩衝區的語法層級大綱 |
| 專案檔案索引 | 幫助導師識別其他需要檢查的檔案 |
| 自從上次儲存後的 Diff | 正在被審查的特定變更 |
| 開啟中的專案緩衝區 | 當前工作階段中鄰近的工作內容 |
架構記憶
CodeTutor 實作了一個持久的記憶系統。當導師識別出架構觀察結果時,它會將其封裝在 codetutor-memory 區塊中。該套件會自動提取這些觀察結果,並將其附加到 .codetutor/ARCHITECTURE.md,這是該套件被允許自動寫入的唯一檔案。
後端整合與安全性
CodeTutor 支援兩個本地後端:codex 與 pi。兩者皆配置為確保 AI 無法修改使用者的檔案系統。
後端配置
- Codex:使用
codex exec在唯讀沙盒中執行,並將核准政策設定為never且使用臨時會話。 - pi:使用非互動式列印模式,並將工具集限制在
read、grep、find與ls。
安全層級
安全性透過兩層機制強制執行:禁止檔案編輯的提示層級指令,以及將 AI 限制在唯讀模式的後端層級指令邊界。
安裝與需求
CodeTutor 需要 Emacs 28.1 或更新版本,建議使用 Emacs 29+ 以獲得內建的 tree-sitter 支援。
Doom Emacs 配置
對於 Doom Emacs 使用者,可以透過 packages.el 使用本地儲存庫配方(recipe)來新增套件,並在 config.el 中使用以下指令進行配置:
codetutor-opencodetutor-what-nextcodetutor-askcodetutor-follow-upcodetutor-refresh-architecture-memory
自定義
使用者可以調整上下文限制(例如 codetutor-max-project-context-bytes)以及系統提示詞(codetutor-system-prompt),以量身打造導師的行為與發送至 AI 後端數據的具體量。