上下文管理基础

了解如何提供合适的上下文,帮助 Cursor AI 更好地理解您的代码库和需求。

什么是上下文管理?

上下文管理是 Cursor 中的一项核心功能,它允许您为 AI 提供足够的信息和背景,使其能够更准确地理解您的项目、代码和需求。与传统编辑器不同,Cursor 的 AI 功能依赖于对代码上下文的深入理解,而上下文管理功能正是为了优化这一理解过程而设计的。

有效的上下文管理可以显著提高:

  • AI 生成代码的质量和相关性
  • 对项目特定概念和术语的理解
  • 代码建议的准确性
  • 问题回答的针对性
  • 故障排除和调试的效率

上下文类型

Cursor 中的上下文可以分为以下几种类型:

1. 自动收集的上下文

  • 当前文件:您正在编辑的文件内容
  • 打开的标签页:编辑器中打开的其他文件
  • 最近的编辑:您最近修改过的内容
  • 项目结构:文件夹和文件组织方式

2. 显式提供的上下文

  • 选中的代码:您在编辑器中选择的代码片段
  • 聊天中引用的文件或代码:通过特殊命令引用的内容
  • 上传的文件或链接:手动添加到聊天的外部资源

3. 项目级上下文

  • 代码库索引:Cursor 自动生成的项目索引
  • AI 规则:定义的项目特定指导原则
  • 依赖关系:项目使用的库和框架

上下文特殊命令

Cursor 的聊天功能提供了多种特殊命令,用于有效地提供上下文信息:

命令 描述 使用场景
@code 引用选中的代码或指定代码片段 询问关于特定代码片段的问题,请求分析或修改选中的代码
@file 引用整个文件的内容 讨论文件的整体结构、逻辑或需要考虑整个文件的修改
@folder 列出文件夹中的文件和结构 讨论组件或模块的组织方式,了解项目结构
@codebase 引用整个代码库的概要 讨论架构设计、项目重构或需要理解整个项目的问题
@definition 查找并引用符号定义 了解函数、类或变量的定义和用法
@docs 引用文档文件内容 讨论项目文档、需求规格或技术说明
@git 引用 Git 历史信息 理解代码变更历史,讨论特定提交或变更
@web 引用网络搜索结果 获取外部知识,了解最新技术或解决方案

使用示例 1:代码查询

使用 @code 命令询问关于选中代码的问题:

@code 这个函数有什么可以优化的地方?
// 选中的代码会自动包含在请求中

使用示例 2:文件分析

使用 @file 命令引用整个文件并提问:

@file src/components/UserList.js
这个组件的性能问题可能出在哪里?

使用示例 3:项目架构

使用 @codebase 命令分析整个项目结构:

@codebase
请帮我分析一下这个项目的整体架构,特别是数据流动方式。

上下文管理最佳实践

以下是一些提高 AI 理解效果的最佳实践:

1. 提供适量上下文

提供足够的上下文让 AI 理解问题,但避免信息过载。

建议

  • 针对特定问题选择相关代码,而不是提供过多无关代码
  • 使用 @folder 先展示结构,再使用 @file 引用具体文件
  • 对于复杂问题,分步提供上下文,而不是一次性提供所有信息

2. 利用自动索引

Cursor 会自动索引您的代码库,充分利用这一功能。

建议

  • 打开项目根目录,而不仅是单个文件,以便 Cursor 可以索引整个项目
  • 使用 .cursorignore 文件排除与代码理解无关的目录(如 node_modules)
  • 项目结构变化较大时,考虑重新索引项目

3. 创建 AI 规则

为项目定义特定的 AI 规则(Cursor Rules),指导 AI 的行为。

建议

  • 创建规则定义项目的编码风格、命名约定和架构原则
  • 为特定文件或目录设置特定规则
  • 在规则中说明项目特有的术语和概念

示例 AI 规则文件:

// 示例 AI 规则文件 (.cursorrules)
{
  "rules": [
    {
      "pattern": "src/components/*.tsx",
      "instructions": "所有组件使用函数组件和 React Hooks,遵循 PascalCase 命名,每个组件一个文件"
    },
    {
      "pattern": "src/utils/*.ts",
      "instructions": "工具函数使用纯函数设计,遵循单一责任原则,使用详细的 JSDoc 注释"
    }
  ]
}

4. 清晰表述需求

结合上下文提供清晰的需求描述。

建议

  • 说明您想要实现的具体目标,而不仅仅是问题描述
  • 提供预期输出的示例或格式
  • 明确任何约束条件或偏好

❌ 不佳示例:

"这个函数有问题"

✅ 良好示例:

"这个用户认证函数在处理无效令牌时会抛出未捕获的异常。请修改它,添加适当的错误处理,并遵循我们项目的错误处理模式,即返回 Result 对象而不是抛出异常。"

代码库索引

Cursor 会自动索引您的代码库,建立符号、依赖关系和语义联系的数据库,帮助 AI 更好地理解项目。

索引过程

  1. 当您打开一个项目文件夹时,Cursor 会自动开始索引
  2. 索引会分析文件内容、结构和关系
  3. 索引完成后,AI 将能够更准确地理解代码库
  4. 索引会在后台自动更新,反映项目变化

优化索引

  • 使用 .cursorignore 文件排除大型二进制文件、生成的代码和第三方库
  • 确保项目结构良好,文件位置和命名有意义
  • 项目发生重大变化后,可以手动触发重新索引

提示

如果您发现 AI 对项目的理解不准确,可能是因为索引不完整或过时。尝试重新启动 Cursor 或手动触发重新索引。

忽略文件配置

使用 .cursorignore 文件可以排除不需要被索引或上下文中引用的文件和目录,类似于 .gitignore:

示例 .cursorignore 文件内容:

# 示例 .cursorignore 文件
# 排除依赖目录
node_modules/
vendor/
.venv/

# 排除构建输出
dist/
build/
*.min.js

# 排除大型数据文件
*.csv
*.json.gz
datasets/

# 排除自动生成的代码
src/generated/
*.g.ts

提示

将经常变化但对代码理解不重要的文件(如日志、临时文件)添加到 .cursorignore 中,可以减少索引负担并提高 AI 响应速度。

常见问题排查

问题:AI 不理解项目特定术语或概念

可能的解决方案:

  • 创建 AI 规则,定义项目特定术语和概念
  • 确保项目文档(如 README.md)被纳入上下文
  • 在提问时简要解释特殊术语

问题:引用的文件无法被找到

可能的解决方案:

  • 检查文件路径是否正确(区分大小写)
  • 尝试使用相对路径而不是绝对路径
  • 确保文件在项目目录内,而不是外部位置
  • 检查文件是否被 .cursorignore 排除

问题:上下文窗口太小,无法包含所有相关代码

可能的解决方案:

  • 分解大型问题为多个小问题
  • 使用多个特定的 @file 或 @code 引用,而不是一个大的引用
  • 将上下文重点放在最相关的部分
  • 考虑重构代码,将大文件分解为小文件

问题:项目索引似乎不完整或过时

可能的解决方案:

  • 重新启动 Cursor
  • 选择"重新索引项目"选项(如果可用)
  • 检查 .cursorignore 文件确保重要文件未被排除
  • 确保项目文件使用正确的文件扩展名

接下来的步骤

掌握上下文管理基础后,您可以: