首先,什麼是 context window?它跟在 Cursor 裡有效寫程式有什麼關係? 先拉遠一點看,large language model(LLM)是一種透過大量資料集學習模式、被訓練來預測與生成文字的人工智慧模型。它驅動了像 Cursor 這樣的工具:理解你的輸入,並根據先前見過的內容提出程式碼或文字建議。 Token 是這些模型的輸入與輸出。它們是文字的片段,通常是單字的一部分,LLM 會逐一處理。模型不會一次讀完整句;而是根據先前的 token 來預測下一個 token。 想看看一段文字如何被切成 token,可以使用像這個的 tokenizer。 Tokenizer

什麼是情境(context)?

在 Cursor 產生程式碼建議時,「情境(context)」指的是提供給模型的資訊(以「輸入權杖 tokens」的形式),模型會用這些資訊來預測接下來的內容(以「輸出權杖 tokens」的形式)。 情境有兩種類型:
  1. 意圖情境(intent context) 定義你想要模型產生什麼。例如,system prompt 通常作為你希望模型如何表現的高階指令。在 Cursor 中,多數的「prompting」都屬於意圖情境。「把那個按鈕從藍色改成綠色」就是明確意圖的例子;它是指令性的(prescriptive)。
  2. 狀態情境(state context) 描述當前世界的狀態。提供給 Cursor 的錯誤訊息、主控台日誌(console logs)、圖片,以及程式碼片段,都是與狀態相關的情境。它是描述性的(descriptive),而非指令性的。
這兩種情境相輔相成:同時描述目前狀態與期望的未來狀態,讓 Cursor 能提出有用的程式碼建議。

在 Cursor 中提供脈絡

你提供給模型的相關脈絡越充足,它就越有用。如果在 Cursor 裡脈絡不夠,模型會在缺乏關鍵資訊的情況下硬著頭皮解題,通常會導致:
  1. 產生幻覺:模型嘗試做模式匹配(其實根本沒有模式),因而出現意料之外的結果。像 claude-3.5-sonnet 這類模型在脈絡不足時特別容易發生這種情況。
  2. Agent 會自行蒐集脈絡,像是搜尋程式碼庫、讀取檔案、呼叫工具。推理能力強的模型(例如 claude-3.7-sonnet)用這種策略可以走很遠,而是否提供正確的初始脈絡,會決定它的前進方向。
好消息是,Cursor 的核心就是為了脈絡感知而打造,並設計成盡量減少使用者需要介入的地方。Cursor 會自動引入模型判定為相關的程式碼庫部分,例如目前的檔案、其他檔案中語意相近的片段,以及工作階段中的其他資訊。 不過,可用的脈絡非常多,所以手動指定你知道對任務最相關的脈絡,是引導模型朝正確方向前進的好方法。

@-符號

提供明確脈絡最簡單的方式就是用 @-符號。當你很清楚要包含哪個檔案、資料夾、網站,或其他脈絡時,它超好用。越具體越好。以下是如何更精準提供脈絡的整理:
SymbolExampleUse caseDrawback
@code@LRUCachedFunction你知道哪個 function、constant 或 symbol 和你要產生的輸出最相關需要對整個 codebase 有相當深入的了解
@filecache.ts你知道該讀或該改哪個檔案,但不確定在檔案裡的確切位置視檔案大小而定,可能會帶入大量與當前任務無關的脈絡
@folderutils/某個資料夾中的全部或大多數檔案都與任務相關可能會帶入大量與當前任務無關的脈絡
Context Menu

規則

把規則當成你或團隊成員都能存取的長期記憶。先把網域特定的脈絡(包含工作流程、格式與其他慣例)整理起來,是撰寫規則的絕佳起點。 也可以使用 /Generate Cursor Rules 從既有對話產生規則。如果你有一段包含大量提示的長篇來回對話,裡面很可能有一些實用的指令或通用規則,你之後會想重複使用。 Rules

MCP

Model Context Protocol 是一個可擴充層,讓你能替 Cursor 加上執行動作、擷取外部脈絡等能力。 依你的開發環境設定,你可能會用到不同類型的伺服器;我們特別常見、也最實用的兩大類是:
  • 內部文件:例如 Notion、Confluence、Google Docs
  • 專案管理:例如 Linear、Jira
如果你已經有透過 API 存取脈絡並執行動作的工具,就能為它建立一個 MCP 伺服器。這裡有一份簡短指南,教你如何建立 MCP 伺服器 MCP

自主蒐集脈絡

許多使用者採用的一種強大做法,是讓 Agent 撰寫短期的小工具,接著執行它們以蒐集更多脈絡。這在 human-in-the-loop 的工作流程中特別有效,因為你會在程式碼執行前先審閱。 例如,把偵錯訊息加入程式碼、執行它,並讓模型檢視輸出,能讓它取得無法從靜態分析推斷的動態脈絡。 在 Python 中,你可以這樣提示 Agent:
  1. 在相關部分加入 print(“debugging: …”) 訊息
  2. 用終端機執行程式或測試
Agent 會讀取終端輸出,並決定下一步。核心概念是讓 Agent 存取實際的執行期行為,而不只是靜態程式碼。 Self-Gathering Context

重點摘要

  • 情境是有效 AI 編碼的基礎,由意圖(你想做什麼)和狀態(目前有哪些)組成。同時提供兩者能幫助 Cursor 做出更精準的預測。
  • 用帶有 @ 符號的「定點情境」(@code、@file、@folder)來精準引導 Cursor,而不是只依賴自動情境蒐集。
  • 把可重複的知識整理成規則供整個團隊重用,並透過 Model Context Protocol 擴充 Cursor 的能力,連接外部系統。
  • 情境不足會導致幻覺或低效,過多無關情境會稀釋訊號。拿捏好平衡,才能得到最佳結果。