首先,什么是上下文窗口?它与使用 Cursor 进行高效编程有什么关系? 让我们先从宏观角度来看,大型语言模型(LLM)是一种人工智能模型,通过从大量数据集中学习模式来训练预测和生成文本。它通过理解您的输入并基于之前见过的内容建议代码或文本来为 Cursor 等工具提供支持。 Token 是这些模型的输入和输出。它们是文本块,通常是单词的片段,LLM 逐个处理这些 token。模型不会一次性读取整个句子;它们基于之前的 token 来预测下一个 token。 要查看某些文本如何被分词,您可以使用像这个这样的分词器。 Tokenizer

什么是上下文?

当我们在 Cursor 中生成代码建议时,“上下文”指的是提供给模型的信息(以”输入令牌”的形式),模型随后使用这些信息来预测后续信息(以”输出令牌”的形式)。 有两种类型的上下文:
  1. 意图上下文定义了用户希望从模型中获得什么。例如,系统提示通常作为用户希望模型如何行为的高级指令。在 Cursor 中完成的大部分”提示”都是意图上下文。“将那个按钮从蓝色改为绿色”是一个明确意图的例子;它是规定性的。
  2. 状态上下文描述当前世界的状态。向 Cursor 提供错误消息、控制台日志、图像和代码块都是与状态相关的上下文示例。它是描述性的,而不是规定性的。
这两种类型的上下文通过描述当前状态和期望的未来状态来协调工作,使 Cursor 能够提出有用的编码建议。

在 Cursor 中提供上下文

你能为模型提供的相关上下文越多,它就越有用。如果在 Cursor 中提供的上下文不足,模型将尝试在没有相关信息的情况下解决问题。这通常会导致:
  1. 幻觉,即模型尝试进行模式匹配(当没有模式时)导致意外结果。对于像 claude-3.5-sonnet 这样的模型,当没有给予足够上下文时,这种情况可能经常发生。
  2. Agent 尝试通过搜索代码库、读取文件和调用工具来自行收集上下文。强大的思考模型(如 claude-3.7-sonnet)可以通过这种策略走得很远,而提供正确的初始上下文将决定其发展轨迹。
好消息是,Cursor 的核心构建理念就是上下文感知,旨在最大程度减少用户的干预。Cursor 会自动提取代码库中模型估计相关的部分,例如当前文件、其他文件中语义相似的模式,以及会话中的其他信息。 然而,可以提取的上下文有很多,因此手动指定你知道与任务相关的上下文是引导模型朝正确方向发展的有效方法。

@-符号

提供明确上下文最简单的方法是使用@-符号。当你明确知道想要包含哪个文件、文件夹、网站或其他上下文片段时,这些符号非常有用。你越具体,效果越好。以下是如何更精确地使用上下文的详细说明:
符号示例使用场景缺点
@code@LRUCachedFunction你知道哪个函数、常量或符号与你要生成的输出相关需要对代码库有很多了解
@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 编写短期工具,然后运行这些工具来收集更多上下文。这在人工参与的工作流程中特别有效,您可以在代码执行前审查代码。 例如,在代码中添加调试语句,运行代码,然后让模型检查输出,这样可以让它访问静态分析无法推断的动态上下文。 在 Python 中,您可以通过提示 Agent 来实现:
  1. 在代码的相关部分添加 print(“debugging: …”) 语句
  2. 使用终端运行代码或测试
Agent 将读取终端输出并决定下一步要做什么。核心思想是让 Agent 访问实际的运行时行为,而不仅仅是静态代码。 Self-Gathering Context

要点总结

  • 上下文是有效AI编程的基础,由意图(你想要什么)和状态(现有什么)组成。提供这两者有助于Cursor做出准确的预测。
  • 使用@符号进行精准上下文定位(@code、@file、@folder)来精确引导Cursor,而不是仅仅依赖自动上下文收集。
  • 将可重复使用的知识捕获到规则中以供团队范围内重用,并通过Model Context Protocol扩展Cursor的功能来连接外部系统。
  • 上下文不足会导致幻觉或效率低下,而过多无关的上下文会稀释信号。找到合适的平衡点以获得最佳结果。