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 支援兩個本地後端:codexpi。兩者皆配置為確保 AI 無法修改使用者的檔案系統。

後端配置

  • Codex:使用 codex exec 在唯讀沙盒中執行,並將核准政策設定為 never 且使用臨時會話。
  • pi:使用非互動式列印模式,並將工具集限制在 readgrepfindls

安全層級

安全性透過兩層機制強制執行:禁止檔案編輯的提示層級指令,以及將 AI 限制在唯讀模式的後端層級指令邊界。

安裝與需求

CodeTutor 需要 Emacs 28.1 或更新版本,建議使用 Emacs 29+ 以獲得內建的 tree-sitter 支援。

Doom Emacs 配置

對於 Doom Emacs 使用者,可以透過 packages.el 使用本地儲存庫配方(recipe)來新增套件,並在 config.el 中使用以下指令進行配置:

  • codetutor-open
  • codetutor-what-next
  • codetutor-ask
  • codetutor-follow-up
  • codetutor-refresh-architecture-memory

自定義

使用者可以調整上下文限制(例如 codetutor-max-project-context-bytes)以及系統提示詞(codetutor-system-prompt),以量身打造導師的行為與發送至 AI 後端數據的具體量。

Sources