尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

从自动补全到结对编程:Cursor上下文工程实践指南

从自动补全到结对编程:Cursor上下文工程实践指南 1. 先说个反直觉的现象Cursor 明明看得到你的代码为什么经常答非所问这两年我几乎每天都在用 Cursor 写代码但很长一段时间里我对它的真实评价是一个能聊天的自动补全插件。写代码敲 Tab、遇到报错把日志贴进对话框、让它补个函数这类轻量用法确实舒服。可一旦碰上稍微复杂一点的需求AI 给出的方案经常让我血压升高用 A 模块的思路去改 B 模块的代码看起来逻辑自洽跑起来全是坑。更让人恼火的是你明明把相关代码都贴给它看了它还是给出一种好像懂了、又好像完全没懂的答案。最典型的一次翻车是我让 Cursor 给一个维护了两年的后端服务加批量导入接口。它非常认真地把导入逻辑、字段校验、日志记录全写了唯独用了项目里已经废弃的一套旧工具类。代码能跑但风格、依赖、异常处理方式跟现有代码完全脱节代码审查时被同事直接打回。当时我的第一反应是模型太笨了。后来我做了个实验在对话里手动 了项目里最新的工具类文档又补了一句项目里已废弃 XXX统一使用 YYY。结果它给出的方案当场就靠谱了不仅选了正确的工具类还顺带提醒我旧工具类里有两个已知的边界问题。这个实验让我想明白一件事多数时候 Cursor 不是在读不懂你的代码而是你从没给过它读懂的机会。这篇文章要讲的就是我怎么把 Cursor 从一个自动补全插件调教成一个真正理解项目上下文的结对程序员以及这套方法如何复用到团队协作里。内容不涉及复杂的理论都是我在真实项目里踩过坑之后验证过的做法可以直接照抄。1.1 索引不等于理解看到不等于参考Cursor 启动后会扫描项目文件、建立代码库索引这让它在回答问题时能检索到相关代码片段。但检索到和生成代码时真的参考了完全是两回事。模型每次生成时能携带的上下文是有限的它不可能把整个项目从头到尾读一遍再回答你。打个比方你给新同事开了整个代码仓库的权限但他面对十万行代码根本不知道先看哪里。你要做的是告诉他这个项目是前后端分离的后端用了什么框架鉴权逻辑在哪个目录数据库表结构在哪个目录你先看这几个文件。Cursor 也是这样——你负责指路它负责干活。很多人忽略了指路这一步直接把一堆代码丢过去期待 AI 自己领悟结果自然不理想。1.2 上下文窗口有物理上限你才是信息的筛选者这里要提一个绕不开的概念上下文窗口。Cursor 底层调用的模型在单次生成时能同时看到的 token 数量是有限的。虽然现在上下文窗口越做越大但一个成熟项目可能有好几十万行代码一个大型前端项目的 node_modules 就有上万个文件。你不可能把整个仓库都塞进去。这个物理限制决定了使用 Cursor 的正确姿势不是模型全知全能而是人负责筛选信息模型负责生成代码。选择哪些文件、哪些文档、哪些约束喂给它恰恰是工程师的核心价值。很多AI 编程翻车案例里AI 栽在的都是那些你觉得是常识、但从没写进任何文档的项目隐规则上——你的工作就是把隐规则显式化。这也是整套实践方法的起点先让 AI 看到正确的上下文再让它动手。2. 理解 Cursor 的三种项目上下文机制在讲具体实践前先把 Cursor 里最常用的三种让 AI 读代码的机制说透。很多人天天在用但不清楚它们各自的能力边界用错场景自然效果差。2.1 代码库索引Cursor 的长期记忆Cursor 会定期扫描仓库建立索引让你在对话时可以直接问这个导出功能在哪个文件里它会在整个代码库里检索相关内容。比如你问当前项目的用户登录逻辑是怎么实现的它能顺藤摸瓜找到 controller、service、model 各层的相关文件。索引是 Cursor 的基础记忆层但它擅长的是定位而不是深度理解。实际操作中你需要留意几点索引默认会排除.gitignore里的目录但很多项目的.gitignore写得并不完整可以通过.cursorignore文件自定义排除项语法和.gitignore保持一致如果某个文件老是检索不到很可能是被索引排除掉了去 Settings 里查看索引状态即可索引的作用是让 AI知道项目里有这个东西但想让它真正看懂某段逻辑还需要靠下面这种显式引用来喂细节。2.2 引用指哪看哪的显式上下文输入框里输入可以引用文件、文件夹、文档、搜索结果等。这是我认为最被低估的功能。很多人知道它能引用文件但不知道什么场景该引用哪些内容。我按场景整理了用法场景做法说明修单个文件的 bug直接 该文件上下文精简AI 能精准聚焦跨模块改造多选 相关文件控制在 3~5 个核心文件内让 AI 了解全局 README、架构文档相当于先给 AI 一张地图让 AI 搜索代码使用 Codebase 搜索适合这个功能在哪儿类问题有个技巧很关键不要一次性把 20 个文件全 上来。先 核心文件让 AI 给出初步思路再按需补充。一开始堆太多文件AI 反而会贪多嚼不烂生成的代码容易张冠李戴把 A 模块的命名混进 B 模块。2.3 Rules把规范和约束刻进 AI 的长期习惯Rules在 Cursor Settings 里配置也可以在项目根目录.cursor/rules下配置相当于给 AI 预设的行为准则。它和 引用的关键区别在于 引用只管当前这一次对话Rules 则是对项目里所有新对话都生效的长期记忆。也就是说你可以在任何新对话里重复使用它不需要每次手动强调。我建议每个项目都放一份.cursor/rules内容大致包括四类技术栈说明前端用 Vue3 TypeScript Vite不要写 Vue2 风格后端用 FastAPI路由统一走/api/v1前缀强制约束不要修改 public/ 下的文件新增 API 必须写 JSDoc不允许引入新的第三方库代码风格组件文件名用 PascalCase工具函数用 camelCase缩进统一 2 空格提交规范commit message 使用 conventional commits 格式要注意 Rules 不是越长越好。太长的规则会在模型脑子里互相稀释关键约束反而容易被忽略。我的经验是控制在 20 条以内每条尽量一句话说清楚宁可多拆几个文件也不要堆一个巨型规则文件。3. 一套可直接照搬的项目上下文配置方案理解机制之后我们来看怎么把组合起来。以下是我在多个项目里验证过、可以直接照抄的配置方案核心就一句话给 AI 做好岗前培训。3.1 新项目接入时花 20 分钟做破冰拿到一个已有项目尤其是接手老项目我建议先别急着让 AI 干活花 20 分钟做三件事第一写一份简短的ARCHITECTURE.md。不用长篇大论几百字即可但要说清楚这几件事项目是单体还是微服务、核心模块有哪几个、请求从入口到数据库的链路大概什么样、哪些目录是自动生成不要碰。比如这样# 架构说明 - 单体应用Python FastAPI PostgreSQL - 用户模块负责注册、登录、权限校验入口在 app/api/users.py - 业务模块负责订单、支付、退款入口在 app/api/orders.py - 数据库迁移所有表结构变更写在 migrations/ 目录 - 不要手动修改 app/schemas/ 下自动生成的 Pydantic 模型第二在项目根目录创建.cursor/rules把技术栈、约束、风格写进去。第三检查.gitignore和.cursorignore确认node_modules、dist、__pycache__等目录不会被索引。这三步做完Cursor 在回答问题时就像拿到了一张项目地图不再是盲人摸象。特别是接手老项目时有了一份架构说明AI 给出的方案会明显更贴合现状而不是泛泛地套用通用代码模板。3.2 规则文件的写法比你想的更讲究写规则文件很像写新人 onboarding 文档核心原则是具体、可验证、不矛盾。我踩过的坑包括两类典型写法错误写法代码质量要好——这不是规则是废话AI 无法据此判断对错正确写法所有公共函数必须有 JSDoc/TSDoc 注释包含参数说明和返回值说明错误写法尽量不用 any——边界模糊AI 不知道什么时候算尽量正确写法禁止显式使用 any确实无法避免时必须加 eslint-disable 并写明原因我更推荐禁止 例外 例子的句式。举个例子禁止直接修改 database/migrations/ 下的表结构文件 如果确需变更表结构先创建新的迁移文件并确保新旧版本兼容。因为模型本质是在做概率预测给出明确的前后约束比一句模糊的方向可靠得多。如果团队里有代码规范文档可以直接把它精简后塞进规则文件但你自己的口头禅和潜规则也要写进去——那些才是 AI 最缺的信息。3.3 索引排除项别让 AI 在产物目录里迷路.cursorignore文件建议至少包含这些目录node_modules dist build coverage .next __pycache__ *.min.js *.map排除它们不只是为了提升索引速度。更重要的原因是自动生成的文件不代表项目真实写法AI 看了反而会误解架构。比如.next目录里有大量编译产物和压缩后的命名AI 一旦检索到就会把那些风格当作输出范本生成一些看起来不太对劲的代码。.map文件也同理它们是源码的映射对理解业务逻辑没有任何帮助。注意改完.cursorignore后建议重启 Cursor 让索引重新建立。如果你发现 AI 对某些代码风格的判断突然异常优先检查索引里是不是混入了产物文件。4. 从需求到提交一套围绕 Cursor 的编码工作流工具配置好了关键看干活时怎么用。下面这套工作流我在团队里推了几个月上手成本很低但效率提升是肉眼可见的。4.1 把模糊需求翻译成 AI 能执行的指令大多数 AI 翻车的根源不是模型不够聪明而是指令太模糊。对比两种说法差给用户模块加个导出功能好在用户管理页新增一个导出按钮点击后调用 /api/users/export 接口按当前筛选条件导出 CSV导出过程中按钮禁用并显示 loading失败时弹出错误提示提示文案为导出失败请稍后重试显然后者的可执行性高了一个量级。我自己总结了一个指令五要素每次都按这个结构来写要素要回答的问题目标做什么明确到动词和对象范围哪些做、哪些明确不做约束技术栈、风格、依赖限制输入输出接口入参出参、页面交互、异常处理验收标准怎么做才算完成这不是什么高深理论就是把你平时跟同事沟通需求时脑子里那套信息显式地摊给 AI。你会发现很多时候你写不清 prompt根源不是不会用 Cursor而是你自己的需求还没想清楚。4.2 先让 AI 出方案再让 AI 写代码遇到复杂需求我一般会先让 Cursor 出实现方案而不是直接让它写代码。具体做法是在对话里说先不要写代码。分析现有用户模块的数据流给出一个按当前筛选条件导出 CSV 的实现方案包括涉及的文件、依赖关系、潜在风险。这一步的价值非常大AI 先生成方案就会先去检索代码库、梳理调用关系而不是从第一个文件开始埋头写。你可以在方案阶段纠正它的方向比如不要改 service 层应该新增一个 export service。方向对了代码质量才有底线。在实际操作中我甚至会给 Cursor 下一条规则让它默认就按先给方案、再写代码的方式来响应复杂需求。这样即使团队里有人忘记交代AI 也会自己先想清楚再动手。4.3 AI 生成的代码必须走一遍候选人审查AI 写完代码我从不直接 commit。固定做两件事第一让 AI 自检一遍。在对话里补一句检查你刚才生成的代码找出潜在的边界问题、错误处理遗漏、和现有代码风格不一致的地方。 这一步能滤掉不少低级 bug比如数组越界、空指针、并发安全等。第二自己快速看一遍 diff。重点检查四个方面有没有引入意外依赖、有没有改到不该动的文件、异常分支是否覆盖完整、有无把调试代码混进去。团队协作时还有一个实际问题AI 生成的代码格式可能和项目统一格式不一致。不要指望 AI 靠意念遵守缩进规则跑一次格式化工具Prettier、Black、gofmt 等是必须的。把它当候选人来审查和校准代码库质量才能稳定。5. 我踩过的坑和最终沉淀下来的几个习惯这节是我自己用 Cursor 大半年后留下的记忆点写出来帮大家少走点弯路。每一件都是真金白银换来的教训。5.1 上下文给多给少都不行怎么判断刚开始我总觉得多引用几个文件AI 就会更懂项目。结果它经常在多个文件之间左右逢源把 A 模块的命名混进 B 模块。后来我找到一个判断信号如果 AI 的回答出现张冠李戴式的命名错误多半是上下文太多导致混淆如果回答很泛、没有针对你项目的具体细节就是上下文太少。根据这个信号动态调整 引用的文件数量比每次机械地堆文件可靠得多。另外一个辅助手段是在对话时让 AI 自己列出它用了哪些文件作为依据如果它列出的文件里有明显无关的就及时移除保持对话干净。5.2 AI 改崩了代码最快的恢复方式不是 CtrlZCursor 的多文件改动可能一次碰 5 个文件其中一个改坏而编辑页早关掉了想恢复只能靠 Git。所以我给自己定了一条铁律所有 AI 辅助的大改动动手前先切一个新分支。然后每完成一个小改动就提交一次commit message 写清楚。有这样一个分支哪怕 AI 改崩了某个环节一行git checkout就能回到上一个稳定点不用陪它复盘到底是哪一步出的问题。如果团队里多人协作建议再加一条AI 生成的代码统一走 PR 流程不要让 AI 的改动直接推到主干。这个习惯能帮你挡掉一大半的AI 闯祸。5.3 不同技术栈下Cursor 的表现差异比想象中大Python 和 TypeScript 项目里用 Cursor 的感受完全不同。TypeScript 有类型系统AI 很容易推断函数签名和调用关系生成质量明显高Python 项目如果缺类型标注AI 在边界情况处理上就容易飘经常漏掉空值判断或类型转换。所以我的建议是如果项目类型标注薄弱要么用规则强制 AI 生成代码时补充类型标注要么就做好预期管理——AI 更适合做思路参考代码把关还得靠自己。这不是模型不行而是语言本身携带的静态信息量不一样。了解了这个差异你就不会对 AI 在某些项目里的表现过度失望。5.4 把好用的 Prompt 沉淀成自己的方言库最后一个非常推荐的习惯每当我发现一类 Prompt 在项目里特别好用就会把模板存到一个ai-prompts.md文件里。比如帮我重构这个函数保持对外签名不变给这段逻辑补充错误处理错误信息用中文并带上上下文只改这几个文件不要动其他模块先列出这三段代码的差异再解释为什么会有这些差异这些模板的好处是它们是你在真实项目里验证过、贴近自己代码风格的方言比网上抄来的通用提示词有效得多。积累半年之后这个文件就是你的私人 AI 使用手册。我每隔一段时间会回头翻一翻删除过时的补充新的对我来说它比大部分教程都有用。
返回列表