每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗?订阅我们的简报,深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同,从行业内部的深度分析和实用指南中受益。不要错过这个机会,成为AI领域的领跑者。点击订阅,与未来同行! 订阅:https://rengongzhineng.io/

Cursor 的 AI 编程助手最近备受瞩目,原因显而易见——它的表现就像是一位真正有用的结对编程伙伴。对于那些曾为让 AI 遵守系统提示而苦苦挣扎的开发者来说,Cursor 的表现引发了强烈好奇心:它是如何做到如此顺畅协作的?

为了解决这个疑问,有技术人员尝试拦截 Cursor 与 API 之间的调用数据,令人惊讶的是——这个操作成功了。本文将逐步解析 Cursor 的提示词为何如此有效,并探讨其中可供借鉴的设计原则。


系统提示(System Prompt)

Cursor 的 AI 系统提示构成了整个助手行为的基石。正如那句老话所说,“每一条警告都源于过去有人做过某件傻事。” Cursor 的提示内容恰恰体现了这种经验积累。

完整的系统提示内容展示如下:

你是一名由 GPT-4.1 驱动的 AI 编程助手,运行在 Cursor 中。
你正在与 USER 一起进行结对编程,解决代码任务。每当 USER 发送消息时,我们可能会附带一些有关其当前状态的信息,比如打开了哪些文件、光标位置、最近查看的文件、编辑历史、linter 报错等。这些信息是否相关需由你判断。
你是一名代理(agent)——请持续工作直至完全解决用户的问题,然后再结束回复。请自主解决问题,尽可能完整地响应用户请求。
...
使用 markdown 格式书写代码时,使用反引号标注文件、目录、函数和类名,数学表达使用 和 。
使用工具时请遵循以下规则……
永远不要在用户面前提及工具名称,而是用自然语言表达行为……
...

以上提示充满细节与结构,从基础行为准则到具体操作边界,都为 AI 指明方向。


1. 明确赋予“角色身份”

Cursor 并没有模糊地指示 AI “请表现得有帮助”,而是赋予其一个具体、明确的身份:

“你是由 GPT-4.1 驱动的编程助手,运行在 Cursor 中。你正在与 USER 进行结对编程……你是一名代理。”

通过这些句子,AI 明确知道自己是专属编程助手,运行在特定 IDE 中,并拥有一定程度的自主权。这种设定使其能够更精准地筛选知识并采取合适的行为。

启示:为 AI 赋予明确的角色定位、运行环境与行为风格,有助于其更贴切地完成任务。


2. 巧用“XML 标签”进行结构划分

为有效管理超千词的提示内容,Cursor 使用类似 XML 的标签进行结构划分:

  • <communication>...</communication>
  • <tool_calling>...</tool_calling>
  • <making_code_changes>...</making_code_changes>

尽管 AI 并不真正解析 XML,这些标签仍起到了划分语义块的作用,帮助模型快速定位内容,防止关键指令被忽略。

同时,这种结构化标签也促使提示设计者思考结构逻辑,将相关内容归类。这样的提示更容易维护和扩展。

启示:对于内容复杂的提示,采用明确的结构标记(如 XML 标签、Markdown 标题、编号列表)有助于 AI 准确吸收信息。


3. 强调“自主行动”

Cursor 的提示频繁强调自主行为的重要性:

“你是一名代理——请持续工作直到完全解决问题。”
“请在不需要用户确认的情况下,立即执行计划。”
“倾向于自己寻找答案而非询问用户。”

这种多次重复的表述,目的就是赋予 AI 行动的主动权,使其像一名真实开发者那样解决问题。

启示:若希望 AI 像代理一样自动执行任务,就必须明确授予其权限,并提供足够工具以实现自主操作。


4. 明确沟通方式

Cursor 在如何表达 AI 行动上也做出明确限制。例如,在 <tool_calling> 段中指出:

绝对不要向用户提及工具名称,而是使用自然语言表达行为。”

因此,AI 不会说“正在调用 read_file 工具”,而是说“正在读取该文件”,大大增强了人机交互的自然性。

启示:对 AI 该如何“说话”进行指导,尤其是在涉及内部机制时,能提升整体用户体验。


5. 设置实用的“约束条件”

尽管 AI 强大,也需要设定界限,例如:

“禁止生成极长哈希或非文本代码。”
“不要在同一文件上尝试修复 linter 错误超过三次。”

这些限制不仅能防止资源浪费,也可降低运行成本。

启示:通过系统提示设置明确的资源、行为与迭代限制,有助于维持 AI 行为的可控性与经济性。


6. 使用两个“User Prompt”

Cursor 的一大亮点是使用了两个用户消息:

第一个 User Prompt 包含定制化规则和项目背景,不需要用户在每次提问中重复;第二个则是用户的实际请求,并附带大量动态上下文。

其中,第一个提示例如:

<custom_instructions>
- 保证类型安全,避免使用 `any`
- 尽量保持文件在 200 行以内
- 敏感信息使用环境变量
- 后端修改需阅读 di.arch.mdc,前端则看 svelte5.mdc
</custom_instructions>

启示:通过“提示注入”方式,把用户个性化需求与上下文分离开来,可以有效防止提示注入问题。


7. 提供丰富上下文信息

第二个用户消息包含的是核心请求,例如修改某个 Svelte 文件的布局。但它还包含了:

  • 来自 @链接的文档内容
  • 当前正在编辑的文件片段
  • 终端路径状态
  • 当前文件夹下的结构内容

并明确告诉 AI:

“请将以上信息视为你‘已知’的信息,不要再声称无法上网。”

启示:上下文决定 AI 行为表现。越是明确、相关、动态的上下文信息注入,AI 就能越好地做出响应。


8. 设置合理的“数据访问限制”

Cursor 工具如 read_file 强调必须分段读取内容(200-250 行),避免一次性传输整个文件。

启示:面对大型数据源时,应设计工具机制以分批处理,避免系统负载与上下文溢出。


9. 保持状态一致性(Stateful Context)

当工具调用如 run_terminal_cmd 完成后,不仅返回执行结果,还更新“环境状态”:

“下次调用时,shell 目录已经在 /home/byte/code/ai-dashboard。”

这种状态传递让 AI 不必重新猜测上下文,大大提高后续操作准确性。

启示:让工具反馈环境状态,使得连续操作更智能连贯,提升复杂任务执行效率。


附录:数据来源揭秘

作者通过在 Cursor 设置中的“自定义 API 端点”功能,借助本地 ngrok 服务器,拦截到了完整的系统提示与 API 调用日志。

设置环境如下:

  • Cursor 版本:0.49.6(更新于 2025-04-25)
  • 模型:gpt-4.1
  • 模式:Agent
  • 系统:Arch Linux 6.14.3
  • Shell:/usr/bin/fish
  • 项目路径:/home/byte/code/ai-dashboard


结语

深入分析 Cursor 的系统提示,不难发现,它的强大并非魔法,而是精细提示工程的成果。

关键启示如下:

  • 明确角色与行为定位
  • 使用结构化提示组织复杂内容
  • 赋予 AI 行动自主权
  • 注入详细而即时的上下文信息
  • 设计高效且受控的工具调用
  • 引导 AI 以自然、友好的方式沟通

希望这些经验为 AI 开发者带来启发,帮助构建更智能、可靠的 AI 协作系统。

Logo

火山引擎开发者社区是火山引擎打造的AI技术生态平台,聚焦Agent与大模型开发,提供豆包系列模型(图像/视频/视觉)、智能分析与会话工具,并配套评测集、动手实验室及行业案例库。社区通过技术沙龙、挑战赛等活动促进开发者成长,新用户可领50万Tokens权益,助力构建智能应用。

更多推荐