跳到主內容

Theme / v0.12.1

Codebase Memory

程式碼記憶與知識圖譜 MCP

基礎觀念

什麼是 Codebase Memory MCP?

🟢 入門|深入探討 Codebase Memory 知識圖譜的核心觀念,解密其如何為 AI 代理提供持久化記憶與減少 120x token 消耗

一句話說清楚

Codebase Memory 是一個專門為 AI 開發代理 (Coding Agents) 設計的持久化程式碼記憶與知識圖譜 (Model Context Protocol, MCP) 服務。

它在開發者本地端,將專案中的所有程式碼檔案、類別、介面、函式、變數以及它們之間的依賴呼叫關係,透過 tree-sitter 語法解析器提煉成一個結構嚴密的「知識圖譜」。當 AI 需要理解、修改或除錯你的程式碼時,它不再需要盲目地 Grep 搜尋或重複讀取大量無關的原始檔案,而是可以直接「查詢圖譜」,在幾毫秒內理清複雜的程式碼依賴網路。


為什麼傳統的 Grep + Read 模式在 AI 時代失效了?

在傳統協作中,AI 助手(例如 Claude Code 或 Cursor)由於缺乏專案的全域架構心智圖,在面對數萬行以上的專案時,經常陷入以下困境:

  • 「盲人摸象」式的局部理解:當你問 AI:「修改這個 PLC 通訊介面會影響哪些業務邏輯?」時,AI 只能利用 grep 搜尋字串。如果上游是透過多層抽象(如介面繼承、事件總線)間接呼叫的,字串比對會完全漏掉這些關係,導致 AI 做出破壞性的修改建議。
  • Context Token 瞬間耗盡:為了解答一個跨檔案的 Bug,AI 必須呼叫多次 read_file,把五、六個甚至十幾個檔案的完整代碼全部塞進 Context Window 中。這會導致 Token 數量呈指數級增長,開發成本飆升,並且會觸發 LLM 的「大海撈針(Needle in a Haystack)」注意力衰退,產生嚴重的幻覺。
  • 跨對話記憶喪失:一旦你開啟一個新的 Chat Session,AI 之前對你專案架構的理解就會全部清空。它必須重新開始 Grep 與 Read 過程,效率極低。

傳統搜尋與 Codebase Memory 知識圖譜對比

項目 傳統 ripgrep / search Codebase Memory 知識圖譜
檢索原理 純字串正則匹配 (Text match) 抽象語法樹 (AST) 語意節點與關係查詢
依賴識別 無法識別(需人工依據變數命名推敲) 自動解析 CALLS、INHERITS、IMPLEMENTS 等關係
跨檔案追蹤 需人工多次 grep / 查閱 單次 trace_path 呼叫即可回傳完整入站/出站呼叫鏈
Token 消耗 極大(AI 需要讀取多個檔案的全部代碼) 極小(僅傳輸結構化的節點關係與目標程式碼片段)
跨會話記憶 無(每個新 Session 都必須重新理解) 有(本地資料庫持久化儲存,隨時供 AI 快速載入)

知識圖譜的底層模型設計

Codebase Memory 在本地端的持久化圖譜資料庫中,將程式碼抽象為以下核心節點與關係模型;它不是需要另外部署 Neo4j 的服務:

       ┌──────────┐
       │   File   │
       └────┬─────┘
            │ DEFINES
            ▼
       ┌──────────┐
       │  Class   │
       └────┬─────┘
            │ IMPLEMENTS
            ▼
 ┌──────────────────────┐  CALLS  ┌──────────────────────┐
 │  Function (Connect)  ├────────▶│ Function (SendPacket)│
 └──────────────────────┘         └──────────────────────┘

1. 節點類型 (Node Types)

  • File:原始碼檔案(如 PlcConnection.cs),包含路徑、雜湊值。
  • Class / Interface:物件導向定義。
  • Function / Method:具體的行為區塊。
  • Variable / Field:變數與常數宣告。
  • HTTP Route:對應的 Web API 端點(如 /api/v1/status)。

2. 關係類型 (Relation Types)

  • DEFINES:檔案或類別內定義了成員(如 Class DEFINES Method)。
  • CALLS:方法 A 呼叫了方法 B(如 Connect() CALLS SendPacket())。
  • IMPLEMENTS / INHERITS:介面實作與類別繼承。
  • DEPENDS_ON:模組或檔案級別的依賴關係。

核心技術:Tree-Sitter AST 語意分析

Codebase Memory 的高效率得益於底層整合了 Tree-Sitter 語法解析器。

與簡單的 Regex 正則掃描不同,Tree-Sitter 會將程式碼編譯成抽象語法樹(AST)。這意味著不論你是使用 C# 的 lock (_socketLock),還是 JavaScript 的 await mutex.acquire(),Codebase Memory 都能準確理解這是「執行緒同步鎖定」或「非同步互斥鎖」的語意,進而將其標記為關鍵的控制流節點。

同時,最新發行版的解析機制涵蓋包括 C#、Java、Go、TypeScript、Rust 在內的 155 種程式語言,並且以本地索引為主;實際支援範圍與解析深度仍應以發行版文件為準。


120x 更少 Token 消耗的機制

為什麼 Codebase Memory 能號稱減少 120x 的 Token 消耗?

  1. 精準導航而非全文載入:
    當 AI 需要查找 PLC 斷線問題時,它先呼叫 search_graph 定位 PlcConnection。此時圖譜僅返回該類別的節點元數據與直接關係列表(約 200 字元 / 50 Token),而非讀取整份數千行的檔案。
  2. 語意路徑剪枝:
    透過 trace_path,AI 可以快速過濾掉那些與 Bug 無關的呼叫路徑,只針對處於關鍵呼叫鏈上的單個函式,調用 get_code_snippet 讀取該函式的 20 行實作。
  3. 消除無效 Context 雜訊:
    這使得 LLM 接收到的 Context 內 100% 都是與當前問題強相關的精準程式碼,徹底避免了因載入整個目錄或多個大檔案而造成的 Token 浪費與注意力分散。

在下一章 [安裝與配置 Codebase Memory] 中,我們將帶你一步步在本地端安裝這套強大的 MCP 服務,並將其連接到你最常使用的 AI 工具中。