AI Coding 已经过了只拼 prompt 的阶段

过去一年,很多开发者讨论 AI Coding,重点都放在 prompt 上。比如怎么写提示词让 AI 生成更好的代码,怎么让 AI 一次性完成整个功能,怎么让 Claude Code、Cursor、Codex、Copilot 更听话,怎么让 AI 少犯错。

这些问题当然重要,但它们已经不是 AI Coding 的核心问题了。

真正的问题变成了:当 AI 已经能写大量代码时,我们如何保证这些代码可控、可测、可维护、可上线?

也就是说,AI Coding 的下一步,不是更花哨的 prompt,而是更清晰的工程约束。

OpenAI 对 Codex 的介绍中提到,Codex 已经可以在云端沙箱中处理写功能、修 bug、回答代码库问题、提出 PR 等任务;GitHub Copilot 的官方实践也强调,AI coding agent 更适合处理范围清晰、可拆解、可 review 的任务,而不是模糊地“帮我做完整项目”。

这说明 AI 编程正在从聊天式生成代码进入工程化协作阶段。

prompt 技巧为什么不够了

prompt 技巧解决的是“如何让 AI 输出更接近我的意图”。

但工程开发解决的是另一个问题:如何让系统在多人、多版本、多环境、多风险下稳定运行。

一个好的 prompt 可能让 AI 生成一段漂亮的代码,但它无法自动保证代码是否符合项目架构、是否破坏已有功能、是否有测试覆盖、是否存在安全漏洞、是否符合团队规范、是否能在生产环境稳定运行、是否方便三个月后继续维护。

这就是为什么很多人用 AI Coding 初期感觉很爽,后期却越来越痛苦。

项目刚开始时,AI 能快速生成页面、接口、数据库模型和业务逻辑。过一段时间后,文件结构越来越乱,同一个功能出现三种实现方式,AI 修改一个 bug 又引入两个新 bug,旧代码没人敢动,测试缺失,部署靠运气,每次改需求都像在拆炸弹。

这不是 AI 不够聪明,而是你没有给它工程边界。

从指令驱动转向约束驱动

早期 AI Coding 是指令驱动的。你说“帮我写一个登录功能”,AI 就写一个登录功能。你说“帮我加一个支付页面”,AI 就加一个支付页面。你说“帮我修复这个报错”,AI 就尝试修复报错。

这种方式适合小任务,但不适合长期项目。因为每一次对话都是局部的,AI 很容易只解决眼前问题,而忽略系统整体。

下一阶段的 AI Coding 应该是约束驱动的。你不只是告诉 AI 要做什么,还要告诉它什么不能做、哪些文件不能改、哪些接口必须保持兼容、哪些测试必须通过、哪些安全规则不能违反、哪些代码风格必须遵守、哪些业务逻辑必须先确认、什么时候必须停止并询问人类。

prompt 是一次性指令,工程约束是长期规则。prompt 让 AI 开始工作,工程约束让 AI 不乱工作。

工程约束到底是什么

工程约束不是一句“请写高质量代码”。它是一套明确、可执行、可检查的规则。

OpenAI 的 Codex 最佳实践中特别提到,新手使用 coding agent 时应默认保持审批和沙箱权限严格,只在可信任务中逐步放宽权限。

这正是工程约束的典型思路:不是默认相信 AI,而是默认限制 AI。

  • 需求约束:防止 AI 误解目标
  • 架构约束:防止 AI 乱改结构
  • 文件约束:限制 AI 修改范围
  • 测试约束:保证修改可验证
  • 安全约束:防止引入漏洞
  • 权限约束:控制 AI 能执行什么
  • 交付约束:保证代码可 review、可合并、可回滚

第一层约束:需求必须可拆解

很多 AI Coding 失败,是从需求描述太大开始的。

“帮我做一个完整的 SaaS 系统”“帮我开发一个类似 Notion 的产品”“帮我做一个电商平台,包括前端、后端、支付、后台和部署”,这些 prompt 看起来很酷,但工程上很危险。

AI 可能会生成一堆看似完整的代码,但里面充满隐性问题。

更好的方式是把需求拆成可执行任务。GitHub Copilot 的官方最佳实践也强调,交给 coding agent 的 issue 应该范围清晰,并鼓励先研究、规划、迭代,再进入 PR 阶段。

换句话说,AI Coding 不是把一句大需求丢给 AI,而是把工程任务拆成可以验证的小闭环。

Text
先设计用户注册和登录模块,不写代码,只输出数据表、接口、状态流转和安全注意点。

根据确认后的接口设计,实现注册 API,只允许修改 auth 目录下的文件。

为注册 API 添加单元测试,覆盖邮箱重复、密码过短、数据库异常三个场景。

运行测试,如果失败,只修复相关测试,不允许改动接口定义。

第二层约束:架构必须提前写下来

AI 最容易犯的一个问题,是为了完成当前任务而破坏整体架构。

比如你的项目本来有 features、shared、lib、api、components 等目录,AI 为了快速实现一个功能,可能又新建 utils、helpers、common、services、new-api、temp。最后项目里到处都是重复文件。

解决方法很简单:把架构约束写成文档。例如在项目根目录放一个 ARCHITECTURE.md,里面写清楚目录规则、模块边界、公共类型修改规则和禁止新增的模糊目录。

这类文档看起来普通,但它是 AI Coding 的护栏。没有护栏,AI 会以最快方式完成任务;有了护栏,AI 才会以符合项目规则的方式完成任务。

md
# Architecture Rules

1. 所有业务功能必须放在 src/features 下。
2. 通用组件必须放在 src/shared/components。
3. API 请求只能通过 src/lib/apiClient.ts 发起。
4. 不允许在组件中直接访问数据库。
5. 不允许新增 utils、helpers、common 这类模糊目录。
6. 新增模块必须包含 index.ts 导出。
7. 修改公共类型前必须说明影响范围。

第三层约束:文件修改范围必须明确

一个很实用的原则是:每次只让 AI 修改它应该修改的文件。

比如你要修复登录按钮样式,就不要让 AI 扫描整个项目并自由修改。

对于 coding agent 尤其重要。因为 agent 不只是回答问题,它可能真的会读文件、改文件、运行命令,甚至提交 PR。Codex、Copilot coding agent 这类工具都在朝这个方向发展。

AI 能做得越多,边界就越重要。

Text
请只修改以下文件:
- src/features/auth/LoginForm.tsx
- src/features/auth/LoginForm.module.css

目标:
修复移动端按钮宽度溢出问题。

限制:
- 不允许修改登录逻辑
- 不允许修改 API 请求
- 不允许新增依赖
- 不允许重命名组件

第四层约束:测试是 AI Coding 的刹车系统

很多人用 AI Coding 时,只关心代码是否生成成功,却不关心测试是否存在。这很危险。

因为 AI 生成的代码常常看起来合理,但边界情况可能是错的。尤其是权限、金额、状态流转、异常处理、数据一致性这些地方,肉眼很难一次看出来。

AI Coding 的基本规则应该是:没有测试的 AI 代码,不算完成。

测试的意义不只是发现 bug,更是给 AI 提供反馈回路。没有测试时,AI 只能猜;有测试时,AI 可以根据失败信息修正。

这就是从 prompt 技巧到工程约束的关键转变:让 AI 面对机器可验证的标准,而不是只面对人类模糊的满意度。

  • 后端测试:正常路径、参数为空、参数非法、权限不足、外部服务失败、重复请求
  • 前端测试:初始渲染、loading 状态、error 状态、空数据状态、用户点击提交

第五层约束:安全规则必须显式声明

AI 不会天然知道你的安全红线。你必须明确告诉它哪些事情不能做。

这些规则应该写进项目文档,而不是每次靠记忆补充。

AI Coding 在安全上最大的问题,不是它一定会写出漏洞,而是它可能写出看起来能运行的不安全代码。

比如为了方便调试,把用户 token 打印到 console;为了快速实现搜索,拼接 SQL;为了绕过类型错误,使用 any;为了修复 CORS,直接允许所有来源;为了完成上传,忽略文件大小限制;为了通过测试,跳过权限判断。

安全约束的目的,就是让 AI 在动手之前知道哪些路不能走。

md
# Security Rules

1. 不允许把 API Key 写入代码。
2. 不允许在日志中输出 token、password、secret。
3. 所有用户输入必须校验。
4. SQL 查询必须使用参数化查询。
5. 文件上传必须限制类型和大小。
6. 管理员接口必须检查权限。
7. 错误信息不能暴露数据库结构。
8. 不允许关闭 TypeScript 严格检查。
9. 不允许使用 eval。
10. 不允许引入未维护或高风险依赖。

第六层约束:权限和执行环境要受控

当 AI 只是聊天机器人时,风险主要是回答错。当 AI 变成 coding agent 时,风险变成执行错。

它可能会删除文件、修改配置、安装依赖、运行脚本、访问环境变量、改数据库迁移、推送代码、创建 PR。

所以你需要控制 AI 的权限。OpenAI Codex 的最佳实践也建议默认保持沙箱和审批严格,再根据任务可信度逐步放宽。

不要因为 AI 很聪明,就给它生产环境钥匙。

  • 解释代码:只读
  • 修改单文件:限制目录写入
  • 生成测试:限制测试目录
  • 安装依赖:必须人工确认
  • 数据库迁移:必须人工确认
  • 删除文件:默认禁止
  • 部署生产:禁止自动执行
  • 修改权限系统:必须人工 review

第七层约束:AI 产出的代码必须走 PR 流程

很多独立开发者没有 PR 习惯,直接在主分支上让 AI 改代码。这在小 demo 中没问题,但在真实项目中很危险。

哪怕你是一个人开发,也建议走分支、检查、review、合并的流程。PR 的价值不只是团队协作,而是给你一个停下来检查的节点。

这能把 AI 输出从代码片段变成可审查的工程交付。

  • 为每个 AI 任务创建分支
  • AI 只在分支上修改
  • 自动运行 lint、typecheck、test
  • 生成变更说明
  • 人类 review
  • 合并前再次运行测试
  • 保留回滚路径
md
## Changes
- 修改了哪些文件
- 实现了什么功能

## Tests
- 运行了哪些测试
- 是否通过

## Risks
- 可能影响哪些模块
- 是否有兼容性风险

## Rollback
- 如果出问题如何回滚

把一句 prompt 改成工程任务书

假设你要让 AI 实现用户修改邮箱功能。普通 prompt 可能是“帮我实现用户修改邮箱功能”。这太宽泛。

工程化 prompt 应该写清楚背景、允许修改范围、禁止修改范围、功能要求、安全要求、测试要求和交付输出。

这就是下一代 AI Coding 的基本形态。不是一句“帮我写代码”,而是一份小型工程任务书。

Text
请实现用户修改邮箱功能。

背景:
- 项目是 Next.js + Prisma + PostgreSQL
- 用户认证已存在
- 当前用户信息来自 getCurrentUser()

允许修改:
- src/features/account/email/
- src/app/api/account/email/route.ts
- tests/account/email.test.ts

禁止修改:
- 不允许修改 auth 核心逻辑
- 不允许修改 Prisma schema
- 不允许新增依赖
- 不允许修改其他 account 功能

功能要求:
1. 用户必须登录
2. 新邮箱不能为空
3. 新邮箱必须符合邮箱格式
4. 新邮箱不能与当前邮箱相同
5. 新邮箱不能已被其他用户使用
6. 修改成功后返回 updated user profile
7. 所有错误必须返回统一错误格式

安全要求:
1. 不允许在日志中输出邮箱修改 token
2. 不允许绕过权限判断
3. 数据库查询必须使用 Prisma API

测试要求:
1. 未登录时返回 401
2. 邮箱格式错误返回 400
3. 邮箱重复返回 409
4. 正常修改返回 200
5. 数据库异常返回 500

完成后请输出:
- 修改文件列表
- 测试说明
- 潜在风险

为什么约束会让 AI 更强

很多人误以为,约束越多,AI 发挥越差。实际上正好相反。

工程约束会让 AI 更强,因为它减少了 AI 的猜测空间。

没有约束时,AI 要猜用什么架构、改哪些文件、是否要新增依赖、错误怎么处理、测试写到什么程度、安全要求是什么、哪些行为是禁止的。

有约束时,AI 只需要在明确边界内完成任务。

这就像管理一个新人。你不能只说“把项目做好”,你要告诉他目标、边界、标准、验收方式和风险点。AI coding agent 也是一样。

越强的 agent,越需要清晰规则。越复杂的项目,越需要工程约束。越接近生产环境,越不能只靠 prompt 感觉。

成熟 AI Coding 工作流的六步

一个成熟的 AI Coding 工作流,可以分成六步:Spec、Plan、Execute、Verify、Review、Ship。

Spec 阶段先写规格,不先写代码,包括用户故事、输入输出、状态变化、错误情况、权限规则、数据模型和验收标准。

Plan 阶段要求 AI 在改代码前先说明要改哪些文件、为什么改这些文件、是否需要新增依赖、是否影响已有功能、测试怎么写。

Execute 阶段限制目录范围、文件范围、命令范围、依赖范围和数据库操作范围。

Verify 阶段运行 lint、typecheck、test、build 等机器验证。不同项目命令不同,但原则一样:必须有机器验证。

Review 阶段人类审查权限、支付、数据删除、数据迁移、安全配置、生产部署、用户隐私和核心业务逻辑。Ship 阶段小步上线,可监控,可回滚。

独立开发者从四个文件开始

如果你是一个人开发者,不需要一开始就搞复杂流程。你可以从四个文件开始:PROJECT.md、ARCHITECTURE.md、SECURITY.md、AI_RULES.md。

PROJECT.md 写项目目标、技术栈、主要模块。ARCHITECTURE.md 写架构规则和目录规范。SECURITY.md 写安全红线。AI_RULES.md 写 AI 工作规则。

这四个文件就是你的 AI 工程护栏。它们不复杂,但非常有效。

md
# Project

这是一个面向独立创作者的订阅制内容平台。

Tech Stack:
- Next.js
- TypeScript
- PostgreSQL
- Prisma
- Stripe

Core Modules:
- Auth
- Subscription
- Content
- Admin

AI_RULES.md 应该写什么

AI_RULES.md 不需要写成百科。它只需要写会改变 AI 行为的规则。

这些规则要足够具体,让 AI 知道什么时候能继续、什么时候必须停下来问人。

md
# AI Rules

1. 改代码前必须先输出计划。
2. 不允许一次修改超过 5 个文件,除非得到确认。
3. 不允许新增依赖,除非说明原因。
4. 不允许删除文件,除非得到确认。
5. 完成后必须说明测试结果。
6. 遇到不确定需求必须停止并提问。
7. 不允许修改 .env 文件。
8. 不允许直接操作生产数据库。

团队落地要把责任写清楚

如果是团队使用 AI Coding,则需要更正式的规则。

团队还要明确一个原则:AI 生成代码,不等于免除开发者责任。

谁发起任务,谁负责验收。谁合并 PR,谁负责质量。谁上线功能,谁负责结果。

AI 可以参与开发,但不能成为责任主体。

  • 统一 AI 使用规范
  • 代码生成范围规则
  • PR 模板
  • 自动测试要求
  • 安全 review 清单
  • 依赖引入规则
  • Agent 权限分级
  • 生产环境禁区
  • 事故回滚流程

AI Coding 的未来会更工程

很多人想象 AI Coding 的终点是:我说一句话,AI 自动完成所有软件。

这可能会在某些低风险场景中发生,但对真实工程来说,未来不会是无约束自动化。

恰恰相反,AI 越强,工程约束越重要。因为当 AI 能写十行代码时,错误影响有限;当 AI 能改一整个模块时,错误影响扩大;当 AI 能创建 PR、运行命令、连接服务时,错误可能直接进入生产链路。

所以 AI Coding 的下一步,不是让 AI 更自由,而是让 AI 在正确边界内更高效。

过去优秀开发者擅长写代码、调 bug、读文档、设计架构。未来优秀开发者还要擅长写规格、设边界、建验证、管 agent、审查 AI 输出、设计人机协作流程。

prompt 技巧仍然有用,但它只是入口。真正的竞争力,是把 AI 编程变成稳定、可控、可复用的工程系统。

FAQ:常见问题

下面这些问题,可以作为你升级 AI Coding 工作流前的检查入口。

AI Coding 还需要学习 prompt 技巧吗?

需要,但 prompt 技巧只是基础。真正重要的是把需求、架构、测试、安全和交付规则写清楚。一个普通 prompt 加上强工程约束,往往比一个花哨 prompt 更可靠。

工程约束会不会降低 AI 开发速度?

短期看会慢一点,因为你需要写规则、拆任务、加测试。但长期看会更快,因为它减少返工、混乱和线上事故。没有约束的快,通常只是把问题推迟到后面。

独立开发者有必要做这么多规范吗?

有必要,但可以轻量化。一个人开发不需要复杂流程,但至少要有项目说明、架构规则、安全规则和 AI 修改规则。越是一个人,越不能让项目失控。

哪些任务最适合交给 AI Coding agent?

适合范围清楚、结果可验证、失败成本低的任务,比如补测试、修小 bug、重构局部代码、生成文档、实现简单接口、优化 UI 组件。复杂架构、权限、安全、支付和数据迁移要谨慎。

AI 生成的代码一定要人工 review 吗?

是的,尤其是进入主分支或生产环境前。AI 可以帮助 review,但不能完全替代人工责任。GitHub 官方也把 agent 的 PR 迭代描述为类似和人类开发者协作:PR 往往需要进一步修改,直到达到可合并状态。

工程约束应该写在哪里?

建议写在项目仓库中,例如 PROJECT.md、ARCHITECTURE.md、SECURITY.md、AI_RULES.md。这样 AI 每次进入项目都可以读取,也方便团队成员保持一致。

AI Coding 会不会让软件工程变得不重要?

不会。AI 会让写代码更快,但也会放大工程质量问题。未来软件工程不会消失,反而会更重要。因为当代码生产速度提升后,真正稀缺的是架构判断、质量控制、安全意识和交付纪律。

结语:做能约束 AI 的工程师

AI Coding 的第一阶段,比的是谁更会写 prompt。AI Coding 的下一阶段,比的是谁更会设计工程约束。

会 prompt,你可以让 AI 写出代码。会约束,你才能让 AI 写出可上线、可维护、可负责的代码。

这就是 AI Coding 的真正升级方向:从一句话生成,走向规格化任务;从自由发挥,走向边界控制;从代码片段,走向 PR 交付;从人工感觉,走向自动验证;从“AI 帮我写”,走向“AI 在工程系统里协作”。

未来的开发者,不一定要亲手写每一行代码,但必须知道系统应该如何被构建、验证和约束。

因为软件最终不是靠 prompt 运行的。软件靠工程运行。

参考来源

Introducing CodexOpenAIBest practicesOpenAI DevelopersBest practices for using Copilot to work on tasksGitHub DocsGet the best results from Copilot coding agentGitHub Docs

相关文章

AI 生成的测试都通过了,为什么还是漏掉真实 bug?智能编程 / 约 11 分钟AI Agent 权限怎么设:哪些命令能自动跑,哪些必须人工确认智能编程 / 约 13 分钟为什么 AI Agent 写代码必须有 AGENTS.md / CLAUDE.md:提高质量的 9 个关键理由智能编程 / 约 16 分钟如何让 AI 只改该改的文件:保障代码安全与项目完整的策略智能编程 / 约 9 分钟Vibe Coding 到底适合什么项目,不适合什么项目:7个关键判断,帮你少踩坑智能编程 / 约 16 分钟AI 写代码最危险的不是报错,而是看起来能跑的代码:开发者必须警惕的五大陷阱智能编程 / 约 10 分钟

作者信息