Theme / v0.10.8

Codebase Memory

程式碼記憶與知識圖譜 MCP

指令詳解

search_graph 工具詳解

如何使用 search_graph 在程式碼知識圖譜中檢索特定的類別、方法、變數及其語意關係

指令用途

傳統的程式碼搜尋(如 ripgrep 或是 git grep)主要是基於純文字匹配。這在搜尋簡單的關鍵字時很有用,但如果你的類別名稱很常見(如 UserData),或者你想尋找的是特定方法的定義而非其註釋或引用,純文字搜尋會產生大量無關的噪聲(Noise),降低除錯效率。

search_graph 利用 Tree-sitter 將程式碼編譯成有向圖(Knowledge Graph)後的節點屬性,進行精準的 Symbol 語意搜尋。它不僅能搜尋「名稱」,更能區分這個 Symbol 是一個 Class(類別)、Interface(介面)、Method(方法)還是 Field(欄位),並返回其在圖譜中的唯一識別名(Qualified Name)與關係。


運作流程

  1. 參數接收:工具接收 query (關鍵字查詢) 與 type(可選,如 class, method, field)作為輸入。
  2. 圖譜查詢:在本地知識圖譜資料庫中執行快速索引檢索,尋找符合語意特徵的節點。
  3. 關係關聯:自動帶出該節點的鄰近關係(例如:該類別繼承了哪個介面,或屬於哪個命名空間)。
  4. 結果格式化:回傳精準的節點清單,避免程式碼檔案中的非代碼文字噪聲干擾。

實戰對話範例

範例:搜尋 PLC 通訊相關的核心方法定義

  • You:
    /opsx:explore "我需要尋找與 PLC 讀取相關的 Class 定義,請幫我搜尋圖譜。"
  • AI:

    好的,我將呼叫 codebase-memory 的 search_graph 工具,搜尋節點名稱包含 “Plc” 且類型為 class 的定義。

    CM 呼叫: search_graph(query: "Plc", type: "class")
    CM 回傳:

    [
      {
        "qualifiedName": "ControlSystem.Core.Communication.PlcConnection",
        "type": "class",
        "filePath": "/src/Core/Communication/PlcConnection.cs",
        "extends": "IConnection",
        "methodsCount": 12
      },
      {
        "qualifiedName": "ControlSystem.Core.Communication.PlcMockConnection",
        "type": "class",
        "filePath": "/src/Core/Communication/PlcMockConnection.cs",
        "extends": "PlcConnection",
        "methodsCount": 4
      }
    ]

    分析
    圖譜中找到了兩個 Plc 相關的 class:

    1. PlcConnection:位於 /src/Core/Communication/PlcConnection.cs,是底層的真實連線實作類別。
    2. PlcMockConnection:繼承自 PlcConnection 的模擬連線類別。

    接下來,您希望我們進一步查看 PlcConnection 的具體方法,還是追蹤它是被誰呼叫的?