编者按: 我们今天为大家带来的这篇文章,作者的观点是:只有深入理解 AI 编程工具的底层原理和能力边界,才能真正驾驭这些工具,让它们成为提升开发效率的“外挂神器”。
本文从 LLM 的基础工作机制出发,解释了 Cursor 等工具本质上是 VSCode 的复杂封装,通过聊天界面、工具集(如 read_file、write_file 等)和精心设计的提示词来实现智能编程辅助。作者还逐行解析了 Cursor 的系统提示词,分析了其中的工程设计细节。此外,作者还提供了制定高效 Cursor Rules 的具体指导,强调 Cursor Rules 应该像百科词条般详实,而非简单的命令列表。
作者 | Shrivu Shankar
编译 | 岳扬
透彻了解 Cursor[1]、Windsurf[2] 和 Copilot[3] 这类 AI 编程工具的运作原理细节,能大大提升你的开发效率,并让这些工具在不同场景下都更加稳定地工作 —— 尤其在庞大、复杂的代码库中。当人们难以让 AI 编程工具高效工作时,往往是把它们当成了传统工具来使用,却忽略了一个关键:只有清楚这些工具的先天不足和最佳应对策略,才能真正驾驭它们。一旦摸透这些工具的运作逻辑和能力边界,它们就会化身成为提升开发效率的“外挂神器”。在我写作此文时,我约 70% 的代码1都由 Cursor 产出。
在本文,我将深入解析这些 AI 编程工具的实际运行原理、Cursor 的系统提示词,以及如何优化你的编码方式与 Cursor rules。
LLMs 的核心工作方式是不断重复预测下一个词,正是基于这个简单的原理,我们得以构建出各种复杂的应用。

从基础的编程 LLM 到智能体主要经历三个阶段:蓝色部分表示我们设定的前缀(即 prompts),橙色部分则为 LLM 自动补全的内容。在智能体中会反复运行 LLM,直到它生成面向用户的输出(response)。每次运行时,由客户端代码(而非 LLM)负责计算工具(tool)运行结果并将其反馈回智能体(agent)。
在早期解码器 LLM(如 GPT-2[4])的提示词实践中,需要精心构造一个前缀字符串(prefix) —— 当其被补全时,便能得到想要的结果。相比于直接的指令“Write a poem about whales”,不如说 “Topic: Whales\nPoem: ”,甚至是“Topic: Trees\nPoem: … actual tree poem …\nTopic: Whales\nPoem: ”。在编程场景下,需要构造类似“PR Title: Refactor Foo Method\nDescription: …\nFull Diff: ”这样的前缀。所谓的“Prompt engineering”,其核心就是巧妙地构建理想前缀,从而引导模型自动补全出所需答案。
随后引入了指令微调[5](例如 ChatGPT),大幅降低了大语言模型的使用门槛。现在你如果输入“Write a PR to refactor Foo”,它就会直接返回代码。其内在机制几乎完全等同于上述的自动补全过程,只是前缀变成了“<user>Write a PR to refactor Foo</user><assistant>”,此时大语言模型正扮演着聊天中的助手角色。即使在今天,你仍会看到一些奇怪的情况 —— 模型有时会越过“</assistant>”标签继续自动补全生成内容,开始给自己写提问。
当模型规模达到一定程度时,我们更进一步,加入了“工具调用(tool calling)[6]”功能。不再局限于填充 assistant 文本,我们可以在前缀中输入“Say \read_file(path: str)` instead of responding if you need to read a file”。当遇到编码任务时,模型现在会补全出“read_file(' index.py')</assistant>”,我们(客户端)则会再次输入提示词“<tool>... full contents of index.py ...</tool><assistant>`”并要求其继续补全文本。虽然本质上仍是自动补全,但大语言模型已能借此与外界及外部系统互动了。
像 Cursor 这样的 AI 编程工具,其本质就是这个简单概念的复杂封装。
要构建一个 AI 编程工具,你需要:
Fork VSCode[7]
添加聊天界面,并选择一个强大的大语言模型(例如 Sonnet 3.7)
为编码智能体实现一套工具集
a. read_file(full_path: str)
b. write_file(full_path: str, content: str)
c. run_command(command: str)
优化内部提示词(Prompts):例如“你是一位编码专家”、“不要假设,请使用工具”等
总的来看,核心流程基本就是这些了。 真正的难点在于设计提示词和工具链,确保它们能稳定可靠地工作。 如果完全按照上述描述来构建,系统虽能勉强运行,但会频繁出现语法错误、幻觉问题(hallucinations)且相当不稳定。
打造优秀 AI 编程工具的诀窍,在于找出大语言模型擅长的领域,并围绕其局限性精心设计提示词和工具。这通常意味着需要减轻主智能体的任务负担 —— 通过使用更小的模型来完成子任务。

图表说明:当你使用 AI 编程工具时,其底层发生了什么?我们简化了主智能体的工具集,将“认知负担”转移到其他大语言模型上。AI 编程工具会将你的 @标签注入上下文,调用多个工具来收集更多信息,使用专用的代码变更标记规则(diff syntax)编辑文件,最后向用户返回摘要响应。
通常情况下,用户自己知道需要哪些具体文件或上下文。因此,我们在聊天界面(Chat UI)中添加了“@file”语法。当调用大语言模型时,我们会将所有附加文件的内容整体打包放入一个“<attached-files>”区块中传递。这本质上是为用户提供语法糖(syntactic sugar),免去了手动复制粘贴整个文件或文件夹的麻烦。
搜索代码可能很复杂,尤其对于“我们在哪里实现了认证功能相关的代码?”这类语义查询。我们没有让智能体精通编写搜索正则表达式(regexes),而是选择在索引阶段使用一个编码器大模型(encoder LLM)将整个代码库索引到向量数据库(vectorstore)中,从而将文件内容及其功能嵌入到向量中。在查询时,另一个大语言模型会根据相关性对文件进行重排序和过滤。这确保了主智能体在询问认证功能代码相关问题时能获得“完美”的结果。
要生成字符层级上零缺陷(character-perfect)的代码既困难又昂贵,因此优化 write_file(…) 工具成为众多此类 AI 编程工具的核心。大语言模型通常不会输出完整的文件内容,而是生成一个 “semantic diff” —— 仅提供已更改的内容,并附带代码注释,以指导在何处插入更改的文件内容。随后,另一个更轻量、更快的代码应用大模型(code-apply LLM) 会将该 “semantic diff” 作为输入提示词,并在修复那些微小语法问题的同时写入实际文件内容。新文件经过 linter 校验器处理后,工具返回主智能体的结果时会包含实际文件差异(actual diff)和 lint 校验结果,可用于自我修正文件的错误改动。我将此机制类比为:与一位懒散的资深工程师协作,他只需写出核心片段,后续细节交由实习生完成。
选用擅长在此类智能体(Agent)工作流中编写代码的模型(而非仅具备通用编码能力)。这就是 Anthropic 模型在 Cursor 等 AI 编程工具中表现出色的原因 —— 它们不仅代码质量高,更擅长将编程任务拆解为这种类型的工具调用(tool calls)。
我在自研 AI 编程工具 sparkstack.app 中采用过一个(极其昂贵的)技巧,大幅提升了系统的自我修正能力:为其配备 apply_and_check_tool。该工具会执行更严苛的 linting,并启动无头浏览器(headless browser),沿应用的用户流程(user-flows)获取控制台日志和截图,为智能体提供反馈。正是在此类场景中,MCP(Model Context Protocol)[9]协议将大放异彩 —— 它能赋予智能体更强的自主权和上下文理解能力。
通过基于 MCP 协议的提示词注入技术,我提取了 Cursor 智能体模式(agent mode)最新(2025 年 3 月)的提示词内容。作为一名长期深耕大语言模型领域的开发者,我必须表达对 Cursor “提示词工程师(prompt engineers)”的高度敬意 —— 相比其他 AI 编程工具的提示词设计,他们的专业水准令人赞叹(个人观点)。我认为这正是 Cursor 能成为领先编程工具的核心因素。剖析此类提示词也是提升自身提示词编写能力与智能体架构能力的绝佳途径 —— 从某种意义上看,大多数基于 GPT 的封装工具采用“开放提示词(open-prompt)”实现方案,这种特性极具价值。

Cursor Agent 系统提示词片段。完整提示词及工具定义( https://gist.github.com/sshh12/25ad2e40529b269a88b80e7cf1c38084)
现在最大的问题是,编写 Cursor rules 的“正确方式”是什么?虽然我的整体答案是“以实际效果为准,适合你的才是最好的”(whatever works for you),但基于提示词工程经验和对 Cursor 内部原理的认知,我确实有大量具体建议。

大语言模型如何看待你的 Cursor 项目规则?模型会看到规则的名称和简介列表,然后根据需要调用 fetch_rules(...) 函数来获取和查看具体的规则内容
关键是要明白,这些规则并非是附加到系统提示词中的,而是作为具名指令集(named sets of instructions)被引用。因此,建议采用编写百科词条(encyclopedia articles)而非命令(commands)的思维方式设计 Cursor rules。
请参考我生成的一些示例[12]。
一个基于近乎开源的智能体提示词和公开模型 API 构建的 VSCode 分支,其估值竟能接近 100 亿美元 —— 带着 68 倍的“wrapper multiple”8 —— 这着实令人惊叹。我们将拭目以待 Cursor 最终是否会开发自己的智能体模型(感觉可能性不大),或是 Anthropic 是否会带着 Claude Code + 下一代 Sonnet 强势介入成为竞争对手。
无论最终结果如何,学会如何优化你的代码库、文档和规则配置仍然是一项有用的技能。我希望这次深入探讨能让你对 Cursor 的工作原理以及优化之道有更具体、更实用的理解。
我经常说这句话,现在再说一遍: 如果你觉得 Cursor 不好用,那一定是你用错了方法。
1.这是一个基于直觉的统计数据,但我认为相差不远。一旦你熟练掌握了 Cursor rules,相当数量的 PR 实际上就变成了单次发送提示词(one-shot prompts)的事。我原本以为要到 2027 年才能达到这个水平,但随着 Anthropic、Cursor 和我自己的提示词水平同时提升,进展比我预想的要快。
2.到目前为止,我对 CodeRabbit 的代码检查功能印象非常深刻,计划使用 MCP 将其集成到 Cursor 中。如果 Cursor 的默认代码检查器能更好一些,在其他条件不变的情况下,使用体验会像用 Sonnet 3.8 一样。
3.(大多数)LLM 的美妙之处在于,虽然这是一个 Web 开发基准测试,但根据我的经验,其性能与各种类型的编程和框架都有很强的相关性。
4.我没能找到相关的科学研究,但基于个人经验,这种方法效果很好,如果 Anthropic 的模型专门针对伪 XML 语法进行训练,我也丝毫不会感到惊讶。
5.这确实会产生一些意想不到的副作用,编程模型会将你代码库中引用的模型名称更改为它自己(引用的模型)的名称。
6.这里存在一个有趣的法律灰色地带。Cursor 将此内容放在他们的网站上实际上是违法的(见《联邦贸易委员会法》、《兰哈姆法》),但(至少目前)他们将内容放进提示词(prompt)中,并由 LLM 代其表述出来,却是被允许的。
7.顺便说一句:“Cursor 团队,我发现了一个错别字 (:”
8.这是我创造的一个术语,用来表示基于 GPT 封装的工具的估值与模型提供商估值之间的比率。在这种情况下,Anthropic : Cursor = 600 亿美元 : 100 亿美元 = 6。我的直觉告诉我"6"不是一个合理的比率。戴上我那业余投资者的帽子,我推测 Anthropic 应该接近 1000 亿美元,而 Cursor 则最高达 10 亿美元(wrapper multiple为 100)。我实在看不出他们其中任何一方真的拥有持久的“护城河”(long term moat),Anthropic 构建自己的下一代 AI 编程工具似乎也是轻而易举的事。
END
本期互动内容 🍻
❓文中说『未来理想的代码库应该对 AI 足够友好』,你眼中的『AI 友好型代码库』有哪些具体特征?
文中链接
[2] https://codeium.com/windsurf
[3] https://github.com/features/copilot
[5] https://arxiv.org/abs/2203.02155
[6] https://python.langchain.com/docs/concepts/tool_calling/
[7] https://www.reddit.com/r/cursor/comments/1h9d763/did_cursor_really_need_to_fork_vscode_rather_than/
[8] https://web.lmarena.ai/leaderboard
[9] https://modelcontextprotocol.io/introduction
[10] https://www.anthropic.com/news/prompt-caching
[11] https://blog.sshh.io/p/ai-powered-software-engineering
[12] https://chat.sshh.io/share/pWMGGDyPTok05mxOq17p-
本文经原作者授权,由 Baihai IDP 编译。如需转载译文,请联系获取授权。
原文链接:
https://blog.sshh.io/p/how-cursor-ai-ide-works
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/70018536/viewspace-3088080/ ,如需转载,请注明出处,否则将追究法律责任。