☰
Cursor 使用心得:ask 模式配合 md 文件与权限配置的实战记录
2026/9/26 12:49:52 网站建设 项目流程

1. 为什么我把 Cursor 的 ask 模式当成项目里的“第二大脑”

Cursor 的 ask 模式,简单说就是只读不写的对话模式:它不会直接改你的代码,而是先读你指定的文件、理解上下文,然后给出分析、计划或建议。适合谁?适合手上有一堆需求文档、原型图、接口约定,但不想让 AI 上来就乱改代码的前端或全栈同学。我这次的真实场景是一个政务类后台系统 P1.1.0 版本迭代,涉及法治审核、立法管理、普法管理、政务服务、营商环境、通知公告六大模块,前后端分工明确,权限配置又特别碎。如果直接把需求丢给 Cursor 让它改,大概率会改错文件、漏掉权限判断,甚至把 mock 数据写进生产逻辑里。

所以我的做法是:先在需要改动的目录下写一份.md文件,把每个模块要改的点、状态、前后端分工全部列清楚,然后用 ask 模式让 Cursor 读一遍这份文档,让它先输出修改计划,再让它二次整理文档,把逻辑理得更顺。等文档稳定后,再拆成“功能”和“权限”两个文件,分别发给产品和测试。整个过程里,ask 模式负责“读文档、理逻辑、出计划”,真正的代码改动我另开对话或切到 agent 模式去做。这样既保留了 AI 的理解能力,又不会让它越权动代码。

下面我把这套工作流完整拆开,包括.cursorrules、settings.json骨架、ask 模式提问模板、mock 数据调试方法,以及权限配置里最容易踩的坑。

2. TaoToken 前置:给 Cursor 配一个稳定的模型入口

Cursor 本身可以接自己的模型,也可以走兼容 OpenAI 协议的第三方入口。我这边习惯用 TaoToken 做统一入口,原因是它同时提供模型对话、Coding Plan 和 API Keys 管理,切换模型不用改代码,只改配置就行。官网地址是 https://taotoken.net/?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content= ,API 地址是 https://taotoken.net/api ,注意 API 地址后面不加 UTM 参数。

如果你只是想在 Cursor 里用 ask 模式读文档、做规划,其实用模型对话页面就够;但如果你要长期做编码、跑 Agent 任务,建议直接上 Coding Plan,额度更稳。接入文档在 https://taotoken.net/doc?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content= ,API Keys 在 https://taotoken.net/api-keys?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content= 。拿到 Key 之后,在 Cursor 的模型设置里填 Base URL 和 Key,模型名按文档里支持的填。

这里有个细节:Cursor 的 ask 模式对上下文长度比较敏感,如果你把整个项目的.md文件都塞进去,容易超限。我的做法是只把当前模块的文档放进对话,其他模块用@引用按需加载。TaoToken 的模型对话页面可以先用长上下文模型把文档整体读一遍,确认逻辑没问题,再回到 Cursor 里做局部 ask。

3. 可复制配置:.cursorrules 与 settings.json 骨架

3.1 .cursorrules 骨架

.cursorrules放在项目根目录,作用是给 Cursor 一个全局行为约束。我的版本重点放在“先读文档、再出计划、不擅自改代码”上:

# .cursorrules ## 角色 你是一个只读分析助手,默认使用 ask 模式。不要直接修改任何文件,除非我明确说“开始改代码”。 ## 工作流 1. 每次任务开始前,先读取我指定的 .md 文档,复述你理解到的改动点。 2. 输出修改计划,按模块分组,标注前端/后端/权限三类。 3. 如果文档里有状态标记( 🟡 🔵 🔴 ⬜),保留这些标记并解释含义。 4. 发现文档里前后矛盾的地方,先提问,不要自己假设。 5. 涉及权限的改动,必须单独列出角色-权限对照表。 ## 禁止 - 禁止直接写代码到文件。 - 禁止把 mock 数据当成真实接口。 - 禁止跳过文档直接看代码。

这个规则的核心是“先文档后代码”。我试过,如果不写这条,Cursor 会习惯性地去扫代码库,然后给你一堆基于旧代码的猜测,反而干扰判断。

3.2 settings.json 骨架

.vscode/settings.json里主要控制 Cursor 的索引范围和文件排除,避免它把 mock 数据、构建产物、日志文件都读进去:

{ "cursor.chat.contextFiles": [ "docs/p1.1.0-features.md", "docs/p1.1.0-permissions.md" ], "cursor.chat.excludeFiles": [ "**/node_modules/**", "**/dist/**", "**/*.log", "**/mock/**/*.json" ], "cursor.indexing.maxFileSize": 500000, "cursor.indexing.exclude": [ "**/coverage/**", "**/.git/**" ], "files.associations": { "*.md": "markdown" } }

注意cursor.chat.contextFiles不是官方字段,不同版本可能叫法不同,你可以把它当成一个“约定字段”,实际使用时在对话里用@docs/p1.1.0-features.md手动引用更稳。excludeFiles里的mock/**/*.json很重要,因为 mock 数据经常是临时占位,让 AI 读到容易误判接口已经存在。

3.3 文档拆分结构

我最终把一份大文档拆成了两个文件:

docs/ p1.1.0-features.md # 功能改动、联调进度、待办 p1.1.0-permissions.md # 角色-权限对照、按钮可见性 mock/ zffggkxt-permission-spec.md # 权限 mock 配置,发给后端参考

功能文档里只写“做什么”,权限文档里只写“谁能做”。这样 ask 模式读的时候不会把两件事混在一起。比如“审核反馈”这个功能,功能文档里写“审核通过需回传审核意见书,查看和审核页面都显示审核相关信息”,权限文档里写“政法处:审核通过需回传;处室:可查看、下载”。分开之后,前端改页面、后端改接口、测试写用例,各拿各的文档,不会互相干扰。

4. ask 模式提问模板与 mock 数据调试

4.1 ask 模式提问模板

我常用的模板分三步,你可以直接复制:

第一步:读文档 @docs/p1.1.0-features.md @docs/p1.1.0-permissions.md 请先读这两个文件,不要看代码。读完后告诉我: 1. 一共有几个模块,每个模块下有几个改动点。 2. 哪些改动点标记为 🔴 待后端,哪些标记为 权限待后端。 3. 有没有前后矛盾的地方。 第二步:出计划 基于你读到的内容,按模块输出修改计划。每个改动点写清楚: - 前端要改什么文件(如果文档里没写,就写“待确认”) - 后端要提供什么接口或字段 - 权限由谁控制 - 验收标准是什么 第三步:二次整理 把上面的计划整理成一份更清晰的 .md 文档,保留状态标记,按“功能”和“权限”分开。整理完后告诉我哪些地方还需要我补充。

这个模板的关键是“不要看代码”。因为一旦让 Cursor 看代码,它就会基于现有实现去推断,而现有实现可能本身就是错的。先纯读文档,保证理解的是需求,不是现状。

4.2 mock 数据调试

文档里经常有“接口没有的先 mock 数据”这种要求。我的做法是在src/mock/下建一个zffggkxt-permission-spec.md,用表格形式写清楚每个按钮的权限:

# 权限 mock 配置(供后端 meta.auths 参考) | 模块 | 按钮 | 政法处 | 处室 | 其他用户 | |------|------|--------|------|----------| | 法治审核-审核反馈 | 审核通过 | | | | | 法治审核-审核反馈 | 查看 | | | | | 法治审核-审核反馈 | 下载 | | | | | 立法管理-年度计划 | 创建 | | | | | 立法管理-年度计划 | 更新进度 | | | | | 普法管理-普法素材 | 新增 | | | | | 普法管理-普法素材 | 编辑自己 | | | | | 普法管理-普法素材 | 编辑他人 | | | |

这份文件发给后端,后端可以直接照着改meta.auths。前端在 mock 阶段用这份表控制按钮显隐,联调时再换成真实权限字段。注意 mock 数据不要写进settings.json的索引范围,否则 ask 模式会把它当成真实配置。

4.3 权限配置避坑

权限这块最容易出三类问题:

第一类是“按钮隐藏了但接口没拦”。比如“删除按钮只有政策法规处可见”,前端把按钮藏了,但后端接口没做角色校验,处室用户直接调接口还是能删。所以权限文档里一定要写清楚“前端隐藏 + 后端校验”两件事。

第二类是“查看权限和下载权限不一致”。文档里写“审核通过可下载,下载权限与查看权限一致”,但实际实现时查看走了 A 接口,下载走了 B 接口,B 接口漏了权限判断。ask 模式读文档时如果发现这种描述,会主动提问,这就是先读文档的好处。

第三类是“多选回显问题”。比如“负责处室可多选”,接口对接后回显有问题,文档里标了 🔴。这种问题 ask 模式帮不上忙,但可以在文档里写清楚“已对接待联调,回显有问题”,让测试知道这是已知问题,不用重复提。

5. 验证请求与成功结果

配置完成后,怎么验证 ask 模式真的按预期工作?我一般跑三个检查。

第一个检查:在 Cursor 里输入@docs/p1.1.0-features.md 请复述这份文档里所有标记为 🔴 的改动点。如果它准确列出“年度回显有问题”“成果列表时间有问题”“查看成果权限有问题”这几条,说明文档读取正常。

第二个检查:输入@docs/p1.1.0-permissions.md 请输出政法处和处室在普法素材模块的权限差异。正确结果应该是政法处显示所有列表所有按钮,处室只能新增和查看,各账号仅能维护自己提交的素材。如果它把“其他部门上传的仅可查看”漏掉,说明权限文档的表格它没读全,需要检查文件是否被 exclude。

第三个检查:用 TaoToken 的模型对话页面发一条测试请求,确认 API 连通。请求体大概是这样:

{ "model": "你配置的模型名", "messages": [ {"role": "user", "content": "请用一句话说明 ask 模式和 agent 模式的区别"} ], "stream": false }

返回结果里如果有正常文本,说明 Key 和 Base URL 没问题。如果报 401,去 API Keys 页面重新生成;如果报 404,检查 Base URL 是不是写成了https://taotoken.net/api而不是带其他路径。

成功的结果是:ask 模式能稳定读文档、出计划、标出矛盾点,mock 数据能按权限表控制按钮,后端拿到权限 spec 后能直接改meta.auths。整个过程不需要 AI 碰代码,代码改动由我自己控制。

6. 本篇常见错排查

错误一:ask 模式读不到 .md 文件。现象是输入@docs/xxx.md后 Cursor 说找不到文件。先检查文件是否在项目根目录下的docs/里,再检查settings.json的excludeFiles有没有误伤。如果文件在.gitignore里,Cursor 默认不索引,需要手动@引用。

错误二:文档里状态标记被 AI 忽略。比如 权限待后端 被当成普通文字。解决方法是把状态说明表格放在文档最前面,并在.cursorrules里写明“保留状态标记并解释含义”。如果还是不行,在提问模板里加一句“请逐条列出所有 标记的改动点”。

错误三:mock 数据被当成真实接口。ask 模式读到src/mock/下的 JSON 后,可能会说“接口已存在”。解决方法是把 mock 目录排除索引,并在文档里明确写“以下接口为 mock,待后端提供”。权限 mock 用.md表格而不是.json,也能降低被误读的概率。

错误四:权限配置前后端不一致。前端按文档隐藏了按钮,后端没改meta.auths,导致处室用户调接口能拿到数据。排查方法是让 ask 模式输出一份“角色-按钮-接口”对照表,然后拿这份表去对后端代码。如果后端说“接口没做权限”,那就是文档里没写清楚“后端校验”这一条,补上即可。

错误五:年度回显、多选回显这类联调问题被反复提。这类问题不是配置问题,是接口字段问题。文档里标 🔴 并写清楚“已对接待联调,回显有问题”,ask 模式读到时不会重复分析,测试也知道是已知问题。如果 AI 反复问,就在提问模板里加一句“🔴 标记的问题已记录,不需要重复分析”。

错误六:TaoToken 请求 401 或 404。401 一般是 Key 失效或没带Authorization: Bearer头;404 一般是 Base URL 写错。API 地址是https://taotoken.net/api,不要在后面加/v1或其他路径,具体以接入文档为准。如果用的是 Coding Plan,确认额度是否用完,额度不足也会报错。

排障和接入相关的问题,可以直接看 API Keys 页面和接入文档;验证模型是否正常,用模型对话页面发一条测试消息最快;长期编码和 Agent 任务,建议直接开 Coding Plan,避免频繁换 Key。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询