编程 Prompt 的核心原则 本节摘要:跟 AI 写代码和跟同事沟通需求本质相同——你表达得越精准,对方交付得越接近预期。但编程 Prompt 有其独特性:它需要技术约束(框架、版本、风格)、需要代码上下文(相关文件、接口签名)、需要可验证的输出标准。本节提炼出四大核心原则——角色设定、上下文注入、约束明确、分步拆解——并对比编程场景与通用对话的关键差异,帮你建立「下需求单」而非「闲聊」的思维模式。 一、编程 Prompt 与通用对话的本质差异 很多人把跟 AI 编程当成「高级版搜索引擎」——丢一句话过去,等它给答案。这是效率最低的方式。 通用对话:「帮我写个排序算法」→ AI 给你一段教科书代码,可能跟你的项目毫无关系。
本节摘要:跟 AI 写代码和跟同事沟通需求本质相同——你表达得越精准,对方交付得越接近预期。但编程 Prompt 有其独特性:它需要技术约束(框架、版本、风格)、需要代码上下文(相关文件、接口签名)、需要可验证的输出标准。本节提炼出四大核心原则——角色设定、上下文注入、约束明确、分步拆解——并对比编程场景与通用对话的关键差异,帮你建立「下需求单」而非「闲聊」的思维模式。
很多人把跟 AI 编程当成「高级版搜索引擎」——丢一句话过去,等它给答案。这是效率最低的方式。
通用对话:「帮我写个排序算法」→ AI 给你一段教科书代码,可能跟你的项目毫无关系。
编程 Prompt:「在 src/utils/sort.ts 中,给 sortByDate 函数加上降序排列选项,参数名为 desc,默认 false。使用项目现有的 compareDates 工具函数。不要引入新依赖。」→ AI 给你一段能直接用的代码。
差异在哪?后者提供了:位置(哪个文件)、上下文(现有函数)、约束(不引入新依赖)、规格(参数名和默认值)。
关键概念:编程 Prompt 的本质不是「提问」,而是「下需求单」。你是在给一个能力极强但完全不了解你项目的「远程开发者」写技术需求文档。
让 AI 进入特定的技术视角,输出会更专业、更聚焦。
不用角色:「帮我写个 API」→ 可能给你 Flask、可能给你 Express、可能给你 Spring Boot。
用角色:「你是一个资深 FastAPI 开发者,熟悉 Pydantic v2 和 SQLAlchemy 2.0 的异步模式。请帮我写一个用户注册接口。」→ 输出会严格遵循 FastAPI 的最佳实践。
常用角色模板:
💡 技巧:角色设定不需要每次都写。如果你用 .cursorrules 或项目级指令(第 4 章详讲),可以把角色设定写进配置文件,一劳永逸。
AI 不知道你项目的细节——除非你告诉它。上下文注入是编程 Prompt 中最影响输出质量的因素。
需要注入的上下文类型:
| 类型 | 示例 | 注入方式 |
|---|---|---|
| 相关代码 | 要修改的函数、调用的接口 | @file / 直接粘贴 |
| 技术栈 | 「项目用 React 18 + TypeScript 5」 | Prompt 开头声明 |
| 错误信息 | 完整的报错堆栈 | 直接粘贴 |
| 业务背景 | 「这是支付模块,金额用分为单位」 | 自然语言描述 |
| 已有约定 | 「错误统一用 AppError 类抛出」 | 给出示例代码 |
Cursor 中的上下文注入方式:
@file:src/api/user.ts — 引用特定文件@folder:src/components — 引用整个目录@codebase — 让 AI 自动搜索(适合不确定相关文件时)⚠️ 注意:上下文不是越多越好。塞入 20 个不相关的文件,反而会「稀释」关键信息,让 AI 输出质量下降。原则是:精准喂入相关的 3~5 个文件,胜过模糊地 @codebase 全项目。
没有约束的 Prompt,AI 会按「统计上最常见的写法」输出——这可能跟你的项目风格完全不一致。
需要明确的约束:
好的约束示例:
约束: - 使用 TypeScript strict 模式 - 错误处理用 Result 模式,不要 try-catch - 组件文件用 PascalCase 命名 - 不要使用 any 类型
💡 技巧:约束越具体越好。「写好代码」不是约束;「所有公开函数必须有 JSDoc 注释,包含 @param 和 @returns」才是约束。
大任务一次性丢给 AI,它容易「顾头不顾尾」。把大任务拆成可验证的小步,每步确认后再进行下一步。
反面示例:「帮我做一个完整的用户系统,包括注册、登录、权限管理、邮箱验证、密码重置。」
正面示例:
generateToken 工具函数」→ 确认分步的好处:
⚠️ 注意:分步不意味着「每行代码都要问 AI」。一个合理粒度是:每步对应一个「可独立验证的功能单元」——一个接口、一个组件、一个工具函数。
一个高质量编程 Prompt 的完整结构:
[角色] 你是一个 React + TypeScript 前端专家。 [上下文] 项目用 Next.js 14 App Router,状态管理用 Zustand。 @file:src/stores/userStore.ts @file:src/components/UserProfile.tsx [任务] 给 UserProfile 组件加上「编辑头像」功能: - 点击头像弹出文件选择器 - 选择图片后预览,确认后上传到 /api/avatar - 上传成功后更新 userStore 中的 avatarUrl [约束] - 用 Next.js 的 Image 组件做预览 - 文件大小限制 2MB,格式限 jpg/png - 不要引入新的 UI 库,用现有的 Tailwind 样式 - 上传失败时显示 toast 提示 [输出] 只给需要修改/新增的代码,标注文件路径。
这个 Prompt 大约 200 字,但信息密度极高。AI 拿到后,输出基本能直接用。
掌握了核心原则后,下一步是了解这些原则在不同交互模式中如何落地。下一节我们讲 Chat 模式和 Inline Edit 的使用时机与操作技巧。