Theme / v0.10.8

Codebase Memory

程式碼記憶與知識圖譜 MCP

指令詳解

get_code_snippet 工具詳解

如何使用 get_code_snippet 在知識圖譜中精確讀取類別、方法的 Verbatim 原始碼,減少無關 Context

指令用途

在傳統的代碼閱讀中,如果 AI 助手需要了解一個方法的具體實作,它通常需要用 view_file 將整個檔案(可能長達 1000 行以上)讀入 Context Window。這會帶來嚴重的副作用:

  • Context 膨脹:將大量無關的方法和變數聲明塞入 Context,極易稀釋 AI 的專注力。
  • Token 浪費:多耗費幾千個 Token,導致費用大幅增加。

get_code_snippet 通過知識圖譜的 AST 行號索引能力,只拉取目標 Symbol(方法、類別、屬性)的精確程式碼區間。它能在不載入整支檔案的情況下,直接獲取目標實作原始碼,是極致節省 Token 的防禦性編碼必備工具。


運作流程

  1. 參數輸入:接收 qualifiedName(全域名,例如 ControlSystem.Core.Communication.PlcConnection.ReadDeviceData)作為輸入。
  2. 行號解析:在圖譜中查詢該 Symbol 節點的 StartLineEndLine 屬性。
  3. 區間讀取:直接在實體檔案中以 stream 讀取對應行號區間的字串。
  4. 輸出結果:回傳純粹的方法原始碼,並附帶對應的行號與檔案路徑資訊。

實戰對話範例

範例:精確查看 PlcConnection 的 Connect 方法實作

  • You:
    /opsx:explore "請幫我查看 PlcConnection 的 Connect 方法是怎麼實作的,只看這個方法就好。"
  • AI:

    好的,我將呼叫 codebase-memory 的 get_code_snippet 工具,只讀取 PlcConnection.Connect 方法的原始碼,不載入整支檔案以節省您的 Token。

    CM 呼叫: get_code_snippet(qualifiedName: "ControlSystem.Core.Communication.PlcConnection.Connect")
    CM 回傳:

    • 檔案路徑: /src/Core/Communication/PlcConnection.cs (第 32 行到第 42 行)
    • 原始碼:
      public async Task<bool> Connect()
      {
          if (_socket == null)
          {
              _socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
          }
          await Task.Factory.FromAsync(_socket.BeginConnect, _socket.EndConnect, _ip, _port, null);
          return _socket.Connected;
      }

    分析
    Connect 方法是透過非同步 FromAsync 包裝的 TCP Socket 進行連線。

    僅讀取了 10 行程式碼,花費不到 100 Token,相比於讀取整支 PlcConnection.cs 檔案節省了 95% 以上的 Context 空間!接下來您需要對此連線逻辑進行修改嗎?