[Cursor-Guide]上下文操作指南
了解大型語言模型(LLM)中的上下文窗口、意圖上下文與狀態上下文的區別,以及Cursor如何利用token生成代碼建議。AI輔助編程必讀指南。
[Cursor-Guide]上下文操作指南
原始連結: 原始連結
首先,什麼是上下文窗口?它與使用Cursor進行高效編碼有何關聯?
廣義來說,大型語言模型(LLM)是一種通過從海量數據集中學習模式來預測和生成文本的人工智能模型。它通過理解您的輸入並根據既往所見建議代碼或文本來驅動像Cursor這樣的工具。
Token是這些模型的輸入和輸出單位。它們是文本片段(通常是單詞的一部分),LLM會逐個處理這些片段。模型不會一次性讀取整個句子,而是根據先前的token預測下一個token。
要查看文本如何被token化,可以使用這個tokenizer工具。
什麼是上下文?
當我們在Cursor中生成代碼建議時,「上下文」指的是提供給模型的信息(以「輸入token」的形式),模型隨後利用這些信息來預測後續內容(以「輸出token」的形式)。
上下文有兩種類型:
- 意圖上下文定義用戶希望從模型獲得的結果。例如,系統提示通常作為高級指令,說明用戶希望模型如何行為。Cursor中的大多數「提示」都屬於意圖上下文。「將那個按鈕從藍色改為綠色」就是一個明確意圖的例子,它具有規定性。
- 狀態上下文描述當前世界的狀態。向Cursor提供錯誤訊息、控制台日誌、圖像和代碼塊等都屬於狀態相關的上下文。它是描述性的,而非規定性的。
這兩種上下文協同工作,共同描述當前狀態和期望的未來狀態,使Cursor能夠提供有用的編碼建議。
在Cursor中提供上下文
您向模型提供的相關上下文越多,它就會越有用。如果在Cursor中提供的上下文不足,模型將嘗試在缺乏相關信息的情況下解決問題。這通常會導致:
- 幻覺:當模型嘗試進行模式匹配(實際上並不存在模式)時會產生意外結果。對於像
claude-3.5-sonnet
這樣的模型,在上下文不足時這種情況經常發生。 - 代理自主收集上下文:通過搜索代碼庫、讀取文件和調用工具來收集上下文。強大的思考模型(如
claude-3.7-sonnet
)可以通過這種策略取得不錯的效果,而提供正確的初始上下文將決定後續軌跡。
好消息是,Cursor的核心設計就具有上下文感知能力,旨在最大限度地減少用戶干預。Cursor會自動提取模型認為相關的代碼庫部分,例如當前文件、其他文件中的語義相似模式,以及會話中的其他信息。
然而,可提取的上下文非常多,因此手動指定您知道與任務相關的上下文是引導模型朝正確方向發展的有效方法。
@符號
提供明確上下文最簡單的方法是使用@符號。當您確切知道要包含哪個文件、文件夾、網站或其他上下文片段時,這非常有用。越具體越好。以下是關於如何更精準使用上下文的細分:
符號 | 示例 | 使用場景 | 缺點 |
---|---|---|---|
@code | @LRUCachedFunction | 您知道哪些函數、常量或符號與要生成的輸出相關 | 需要對代碼庫有深入了解 |
@file | cache.ts | 您知道應該讀取或編輯哪個文件,但不確定具體位置 | 根據文件大小可能包含大量與當前任務無關的上下文 |
@folder | utils/ | 文件夾中的所有或大部分文件都相關 | 可能包含大量與當前任務無關的上下文 |
規則
您應將規則視為您或團隊其他成員希望長期記憶的內容。捕捉特定領域的上下文(包括工作流程、格式和其他約定俗成的規則)是編寫規則的良好起點。
規則也可以通過/Generate Cursor Rules
從現有對話中生成。如果您進行了長時間的來回對話並提供了大量提示,可能會有一些有用的指令或通用規則可供後續重複使用。
MCP(模型上下文協議)
Model Context Protocol 是一個可擴展層,您可以在其中賦予 Cursor 執行操作和引入外部上下文的能力。根據您的開發設置,您可能希望利用不同類型的伺服器,但我們發現以下兩類特別有用:
- 內部文件:例如 Notion、Confluence、Google Docs
- 專案管理:例如 Linear、Jira
如果您已有透過 API 存取上下文和執行操作的現有工具,可以為其建置一個 MCP 伺服器。以下是關於如何建置的簡短指南:https://modelcontextprotocol.io/tutorials/building-mcp-with-llms。
自我收集上下文
許多用戶正在採用的一種強大模式是讓代理(Agent)編寫短期工具,然後執行這些工具以收集更多上下文。這在「人在迴路中」(human-in-the-loop)的工作流程中特別有效,您可以在程式碼執行前進行審查。
例如,在程式碼中添加除錯語句、執行它並讓模型檢查輸出,使其能夠存取無法靜態推斷的動態上下文。
在 Python 中,您可以透過提示代理執行以下操作來實現:
- 在程式碼的相關部分添加
print("debugging: ...")
語句 - 使用終端機執行程式碼或測試
代理將讀取終端機輸出並決定下一步操作。核心思想是讓代理存取實際的運行時行為,而不僅僅是靜態程式碼。
重點摘要
- 上下文是有效 AI 編碼的基礎,包括意圖(您想要什麼)和狀態(現有什麼)。提供兩者有助於 Cursor 做出準確預測。
- 使用精準的上下文(如 @-符號:@code、@file、@folder)來精確引導 Cursor,而不是僅僅依賴自動上下文收集。
- 將可重複使用的知識捕獲到規則中供團隊共享,並透過 Model Context Protocol 擴展 Cursor 的能力以連接外部系統。
- 上下文不足會導致幻覺(hallucinations)或效率低下,而過多不相關的上下文則會稀釋信號。找到適當的平衡以獲得最佳結果。