指令用途
在傳統的代碼閱讀中,如果 AI 助手需要了解一個方法的具體實作,它通常需要用 view_file 將整個檔案(可能長達 1000 行以上)讀入 Context Window。這會帶來嚴重的副作用:
- Context 膨脹:將大量無關的方法和變數聲明塞入 Context,極易稀釋 AI 的專注力。
- Token 浪費:多耗費幾千個 Token,導致費用大幅增加。
get_code_snippet 通過知識圖譜的 AST 行號索引能力,只拉取目標 Symbol(方法、類別、屬性)的精確程式碼區間。它能在不載入整支檔案的情況下,直接獲取目標實作原始碼,是極致節省 Token 的防禦性編碼必備工具。
運作流程
- 參數輸入:接收
qualifiedName(全域名,例如ControlSystem.Core.Communication.PlcConnection.ReadDeviceData)作為輸入。 - 行號解析:在圖譜中查詢該 Symbol 節點的
StartLine與EndLine屬性。 - 區間讀取:直接在實體檔案中以 stream 讀取對應行號區間的字串。
- 輸出結果:回傳純粹的方法原始碼,並附帶對應的行號與檔案路徑資訊。
實戰對話範例
範例:精確查看 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 空間!接下來您需要對此連線逻辑進行修改嗎?
- 檔案路徑: