使用上下文

如何在 Cursor 中使用上下文?

首先,什么是上下文窗口?它与在 Cursor 中有效编码有什么关系?

稍微放大一点来看,大型语言模型(LLM)是一种通过从海量数据集中学习模式来预测和生成文本的人工智能模型。它通过理解您的输入并根据之前见过的内容建议代码或文本来为像 Cursor 这样的工具提供支持。 令牌是这些模型的输入和输出。它们是文本的片段,通常是一个词的一部分,LLM 会逐个处理这些片段。模型不会一次读取整个句子;它们根据之前的令牌预测下一个令牌。 要查看一些文本如何被标记化,您可以使用像这样的标记器。

Cursor 中使用上下文 tokenizer

什么是上下文?

当我们在 Cursor 中生成代码建议时,“上下文”指的是提供给模型的信息(以“输入令牌”的形式),模型随后使用这些信息来预测后续信息(以“输出令牌”的形式)。 上下文有两种类型:

  1. 意图上下文:定义用户希望从模型中获得什么。例如,系统提示通常作为用户希望模型如何表现的高级指令。在 Cursor 中进行的大多数“提示”都是意图上下文。“将那个按钮从蓝色变为绿色”是一个明确意图的例子;它是规定性的。
  2. 状态上下文:描述当前世界的状态。向 Cursor 提供错误信息、控制台日志、图像和代码片段是与状态相关的上下文的例子。它是描述性的,而不是规定性的。

这两种类型的上下文共同作用,通过描述当前状态和期望的未来状态,使 Cursor 能够提供有用的代码建议。

Cursor 中使用上下文 tokenizer

在 Cursor 中提供上下文

您提供给模型的上下文越相关,它就越有用。如果在 Cursor 中提供的上下文不足,模型将尝试在没有相关信息的情况下解决问题。这通常会导致:

  1. 幻觉:模型尝试进行模式匹配(当没有模式时),导致意外结果。当没有足够的上下文时,这种情况在像 claude-3.5-sonnet 这样的模型中经常发生。
  2. 代理尝试自行收集上下文:通过搜索代码库、读取文件和调用工具。一个强大的思维模型(如 claude-3.7-sonnet)可以通过这种策略走得很远,而提供正确的初始上下文将决定其发展方向。

好消息是,Cursor 的核心是建立在上下文感知基础上的,设计上需要用户的干预最少。Cursor 会自动提取模型估计为相关的代码库部分,例如当前文件、其他文件中语义相似的模式以及会话中的其他信息。

然而,有很多上下文可以被提取,因此手动指定您知道与任务相关的上下文是引导模型朝正确方向发展的有用方法。

在 Cursor 中提供上下文

@-symbol

提供明确上下文的最简单方法是使用@-符号。当您明确知道要包含哪个文件、文件夹、网站或其他上下文时,这些方法非常有效。您越具体,效果越好。以下是如何更精确地处理上下文的分解:

符号示例用例缺点
@code@LRUCachedFunction您知道哪个函数、常量或符号与您生成的输出相关需要对代码库有很深的了解
@filecache.ts您知道应该读取或编辑哪个文件,但不确定文件中的具体位置可能会包含大量与当前任务无关的上下文,具体取决于文件大小
@folderutils/文件夹中的所有或大多数文件都与当前任务相关可能会包含大量与当前任务无关的上下文
Cursor 中提供明确上下文

规则(Rules)

你可以将规则视为你自己或团队其他成员都可以访问的长期记忆。记录领域相关的上下文信息,包括工作流程、格式规范以及其他约定,是编写规则的绝佳起点。

规则也可以通过现有的对话自动生成,只需使用 /Generate Cursor Rules。如果你和模型有过长时间的反复交流和提示,其中很可能包含一些有用的指令或通用规则,这些内容你可能希望在以后重复使用。

Cursor 规则

MCP

模型上下文协议(Model Context Protocol,简称 MCP)是一个可扩展层,允许你为 Cursor 增加执行操作和引入外部上下文的能力。

根据你的开发环境,你可能会希望利用不同类型的服务器,但我们发现以下两类特别有用:

  • 内部文档:如 Notion、Confluence、Google Docs
  • 项目管理:如 Linear、Jira

如果你已经有用于通过 API 访问上下文和执行操作的工具,你可以为其构建一个 MCP 服务器。这里有一份简要的构建指南:https://modelcontextprotocol.io/tutorials/building-mcp-with-llms。

Cursor MCP

自收集上下文(Self-gathering context)

许多用户正在采用的一种强大模式是让 Agent 编写临时工具,然后运行这些工具以收集更多上下文信息。这在“人类参与审核”的工作流中尤其有效——你可以在代码执行前先进行审查。

例如,在代码中添加调试语句、运行代码,并让模型检查输出结果,这样模型就能获取到它无法通过静态分析推断的动态上下文。

在 Python 中,你可以通过提示 Agent 执行以下操作:

  1. 在相关代码位置添加 print("debugging: ...") 语句
  2. 使用终端运行代码或测试

Agent 会读取终端输出,并决定下一步该做什么。核心思想是让 Agent 能够访问实际的运行时行为,而不仅仅是静态代码。

Cursor 自收集上下文

要点总结

  • 上下文是高效 AI 编码的基础,由意图(你想要什么)和状态(现有内容)组成。提供这两者有助于 Cursor 做出更准确的预测。
  • 使用 @-符号(@code、@file、@folder)精确地为 Cursor 指定上下文,而不是仅依赖自动上下文收集。
  • 将可复用的知识整理为规则,便于团队共享,并通过模型上下文协议(Model Context Protocol, MCP)扩展 Cursor 的能力,连接外部系统。 上下文不足会导致模型产生幻觉或效率低下,而无关的上下文过多则会稀释有效信息。找到合适的平衡,才能获得最佳效果。