ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

AI辅助项目开发全流程:从需求到部署的工程化实践

AI辅助项目开发全流程:从需求到部署的工程化实践

我见过两个正在做项目的人。第一个人每次遇到报错就把错误文本丢给 AI,一天能生成上百条对话记录,三个月后项目停在半成品状态;第二个人看起来用 AI 的频率不高,但每隔几周就能稳定交付一个新版本,最后项目顺利收尾。差距不在 AI 模型本身,而在于两套完全不同的使用方式——一个把 AI 当搜索引擎,一个把 AI 当项目组里真正干活的同事。

今天想聊的,就是我踩了不少坑之后沉淀出的这套“AI 学项目的流程”:从需求到设计、编码、调试、测试、部署,每个阶段 AI 应该放在什么位置、该喂它什么信息、怎么验收它的产出。这套流程适用于用 AI 做毕设、个人项目、小团队产品的人,也可以把它理解成“让 AI 跟我们一起学做完整项目”的成长路径。先说明一点,我会用“AI 助手”泛指这类对话式编程工具,不带品牌,因为方法本身跟具体工具无关。

1. 改变“有问题才问AI”的习惯:碎片化用法的本质是低效

先说清楚一个很多人没意识到的现象:你每天都在用 AI,但这个用法可能从根上就是错的。

1.1 为什么碎片化问AI等于白问

大多数人的 AI 项目流程是这样的:写到一个函数不会了,打开对话框问一句;跑出一个报错,复制粘贴问一句;想不起来某个 API 参数,再问一句。看起来效率很高,但实际上你的项目从来没有完整地进入过 AI 的“视野”。

原因很简单:对话式 AI 本质上是无状态的,它能记住的只有当前对话窗口里出现过的内容。每次你开一个新对话,它对你的项目了解程度就归零一次。就算你在同一个会话里连续提问,旧信息也会被新信息不断覆盖,尤其当对话变长之后,AI 可能连你十分钟前贴过的表结构都记不住了。

这就像公司来了个新同事,你每次请人家帮忙,都完全不交代背景,只丢一句“帮我改一下这个文件”。人家改得对才奇怪。

碎片化提问还有个更大的问题:AI 每次只能根据你给的那一小片代码做判断,它不知道你项目的目录结构、技术栈约束、代码风格、既有约定。于是它给出的答案往往是“通用意义上正确,放在你项目里跑不通”的方案。你表面上看它每次都答对了,实际上每次都要自己再改一轮,时间就这么悄悄烧掉了。

1.2 核心机制:建立一份项目主文档

我摸索出来的解法,是在项目一开始就建立一份“项目主文档”,你可以放在仓库根目录,叫 PROJECT_CONTEXT.md。它的作用,是把 AI 需要知道的关于项目的所有关键信息,固定成一个稳定的交接文件。

我常用的文档结构大概长这样:

  • 项目一句话简介:这项目到底要解决什么问题
  • 技术栈与版本:语言、框架、数据库、关键依赖及版本号
  • 目录结构说明:哪个目录放什么,入口文件在哪
  • 核心模块清单:每个模块的职责、输入、输出、依赖关系
  • 数据库设计:表名、关键字段、索引、关联关系
  • 接口清单:现有接口的路径、方法、参数、返回格式
  • 当前进度与待办:做到哪了,下一步要做什么
  • 已知坑点与决策记录:之前踩过的坑、特意做过的技术选型理由

这个文档不用写得像论文,A4 纸 1 到 2 页就够。关键是它要持续更新,每次项目状态发生变化就顺手改一版。我一般是每个新会话开始前先贴一遍文档摘要,再谈当前任务。这样做的好处是,AI 每次开工时都像刚做完项目交接的老同事,而不是一个刚入职还不认识代码库的新兵。

1.3 一个场景看懂两种用法的差距

拿“写一个用户注册接口”举个实例。没有项目上下文时,你直接问“帮我写个注册接口”,AI 会给你一套放之四海而皆准的模板:接收参数、调密码加密、插入数据库、返回结果。代码能跑,但不是你想要的样子。

如果你先给它项目主文档,告诉它:这个项目用主流的 MVC 后端框架加 ORM 工具,用户表已经有 phone 和 password_hash 两个字段,项目统一用 JSON 格式返回,错误码规范是 2xxx 为业务错误,接口风格是 RESTful。再让它写注册接口,它生成的代码就会主动带上参数校验、重复手机号检查、密码加密处理、统一的返回包装结构。拿过来基本能直接用,改动量大幅下降。

我现在做项目的固定动作是:开工前先花五到十分钟把项目主文档维护一遍,再开始和 AI 对话。这套流程收效明显,后面所有环节的效率都建立在这个基础上。下一节讲需求阶段具体怎么操作。

2. 需求定义:把模糊想法压缩成可验收的项目边界

2.1 先用连续追问锁住需求边界

很多人在需求阶段就急着让 AI“做项目”,开口就是“帮我做一个电商系统”。这个问法的问题在于,你的“需求”其实不是需求,而是个模糊的愿望。电商系统可以是多商户平台,也可以是朋友圈卖货的小程序,复杂度差十倍以上。

我现在的做法是,第一步不让 AI 写任何代码,而是让它以产品经理的身份连续追问。你可以直接说:

“我想做一个 XX 产品,目标用户是 XX,核心使用场景是 XX。请你暂时不要写代码,以产品经理的视角,问我不超过 20 个问题,帮我理清需求边界。问题按功能范围、目标用户、核心流程、验收标准、风险点这几个维度分组,每组问完我再回答,最后根据我的回答输出一份需求说明初稿。”

这一步的目的是什么?就是逼着自己把想法里的模糊地带暴露出来。AI 的追问往往很细,比如“用户注册后需不需要邮箱验证?”“同一个账号能不能同时在多台设备登录?”“订单取消后库存什么时候释放?”这些问题你自己平时根本不会想,但恰恰是后期返工的重灾区。

2.2 把需求翻译成用户故事和验收标准

需求说明初稿出来之后,下一步是把它翻译成“可验收的功能描述”。我习惯让 AI 把每个功能模块转成用户故事,用 Given-When-Then 格式写,保证每一条功能都能被测试验证。

比如“用户登录”这个功能,标准写法是:

  • Given(背景):用户已注册且账号状态正常
  • When(触发):在登录页输入正确的账号和密码并点击登录
  • Then(结果):系统在 2 秒内返回登录成功状态,并跳转到首页

为什么要这么做?因为绝大多数需求扯皮都发生在“我以为你说的是这个”上。用这种格式写出来,每个功能都有一个明确的动作和结果,后面写测试用例可以直接从这条出发,AI 生成测试的时候也不会跑偏。如果 AI 写出来的用户故事里有“系统响应迅速”“体验友好”这种没法验证的描述,要让它重写,直到每条验收标准都可以用“是/否”来回答。

2.3 用“不做清单”守住MVP

需求阶段最容易被忽略的,是做减法。AI 特别擅长列功能清单,一列就是几十个模块,看起来都合理,但照着做你会累死。

我的做法是,在需求说明完成后,追加一个问题:“基于上面的需求,如果第一次上线只能做 3 个功能,哪 3 个能构成最小可用闭环?其他功能排进二期,并给出理由。”这相当于强制 AI 帮你做优先级排序,砍掉不必要的功能。

同时你要让 AI 输出一份“不做清单”,明确写出“本阶段明确不做的事情”。比如“不做社交功能”“不做数据导出”“不做多语言支持”。这看起来有点反直觉,项目还没开始就限制自己。但在实际开发中,需求蔓延是项目烂尾的头号原因。有了这份不做清单,后面开发时 AI 想顺手加功能、你自己临时来了灵感,都能拿它当挡箭牌。

我有个项目就是靠这个流程把原计划的三个月工期压到了五周。起因就是需求一轮追问后,AI 直接帮我把 16 个功能模块砍到了 4 个,剩下的功能全都和核心闭环没有直接关系,放二期完全合理。

3. 技术选型与架构设计:AI当参谋,决策权留在自己手里

3.1 技术选型的正确问法

技术选型这个环节,AI 的天然问题是喜欢推荐“当前最流行”的方案,而不一定是“最适合你这个项目”的方案。你一说要写爬虫,它默认想到用某重型框架;你说要做小程序,它默认给你推荐全家桶。但你的项目可能只需要一个几十行的脚本,套上全套工程化反而累赘。

所以我的提问套路不是“用什么技术”,而是“给我的场景做对比”。话术参考:

“我要做一个 XX 类型的小工具,单机部署,数据量小于 1 万条,目标用户是内部十个人。请对比 3 种可行的技术方案,按以下字段输出表格:方案名称、优点、缺点、适用场景、学习成本、已知坑点、反面案例(即什么情况下不要用这个方案)。最后给你的推荐结论,并说明理由。”

重点在这个“反面案例”。当 AI 被要求列出“这个方案在什么场景下根本不适用”的时候,它的输出会从广告模式切换到分析模式,很多隐藏问题就浮出来了。

还有一招,在选型结论出来后追问一句:“老实说,按我这个项目规模,用更简单的方案是不是就够了?比如普通脚本或者零代码工具?”这一问常常能帮你挡掉很多不必要的复杂度。

3.2 架构设计按层次来,别让AI一口气输出“全部设计”

架构设计阶段,新手最容易犯的错是让 AI“给我的项目设计一下架构”,然后 AI 返回一段包含微服务、消息队列、缓存集群的宏伟蓝图。这种设计的正确性先不说,就算正确,你也实现不了。

我的做法是让 AI 分两层输出:先概要设计,再详细设计。

概要设计只输出四样东西:模块划分、每个模块的职责、模块之间的调用关系、核心数据流走向。详细设计则只针对当前要做的模块展开:数据表设计、核心接口签名、状态流转规则。每一步我都要求 AI“只输出这一层的设计,不要写实现细节,不要贴代码”。如果它越界了,就明确打断:“这些细节我下一层再问”。

用这种方式拆出来的设计,会落在“你当前项目能落地”的尺度上,而不是飘在概念层。同时在每个模块的职责描述里,我要求 AI 写出这个模块“必须做什么”和“坚决不做什么”,避免模块之间职责互相渗透,后面写代码才分得清楚。

3.3 让AI审查你的设计,而不是只让它做设计

设计完成之后,AI 最有用的角色不是设计师,而是评审员。你自己设计了一套模块划分,可以让 AI 来挑刺:“这是我设计的系统模块划分,请从性能、安全性、可维护性、扩展性四个维度分别找出潜在问题,每个维度至少给出 3 个具体场景,每个问题附一句修复方向。”

我试过让 AI 给我写的表结构做评审,它很快就指出:日志表没考虑写入锁竞争、用户表的状态字段用字符串容易写错、订单流水缺一个表级索引。这些问题在没有 AI 之前,可能要等代码上线跑一个月才暴露。

有一点要注意:AI 的评审意见是“参考意见”,不是“圣旨”。它的很多建议是从大厂架构惯性来的,不一定适合你的小项目。比如它可能会建议你引入缓存,但你的项目可能连数据库压力都远没到需要缓存的程度。正确姿势是:让 AI 把问题场景说具体,再自己判断这些问题到底会不会在你项目里出现,按风险等级决定修不修。

4. 编码阶段的三板斧:任务拆解、上下文管理和提示词设计

4.1 任务拆解的五要素模板

编码阶段是最容易失控的阶段,因为一到写代码就忍不住让 AI “直接干”。但“帮我写个登录模块”这种指令依然太大,AI 输出的代码会夹带一堆你没要求的东西,而且超出它注意力范围后质量直线下降。

我现在每个编码任务都按五要素来写,看起来有点繁琐,但实测下来返工率低得惊人:

  • 目标:这个任务要实现什么功能
  • 输入:函数或接口接收什么数据、数据格式是什么
  • 约束:必须遵守什么规则(技术栈、命名规范、不允许用什么)
  • 输出:代码以什么形式交付(文件路径、函数签名、返回结构)
  • 验收标准:满足什么条件算完成,最好是可以自动验证的

举一个实例,我要让 AI 实现订单状态流转:

任务:实现订单状态流转方法 输入:订单对象、目标状态字符串 约束:状态只能按 paid -> shipped -> completed 顺序流转,其他流转抛业务异常;保持现有日志风格 输出:在 services/order.py 中补充 update_status 方法,返回更新后的订单对象 验收标准:单元测试覆盖 2 个合法流转和 2 个非法流转,非法流转时订单状态不被修改

你会发现,把验收标准写在任务描述里,AI 交付的东西基本可以直接进 review,不需要自己再对着代码猜它到底想干嘛。

拆任务的粒度原则也很简单:一个任务应该控制在“AI 一次对话能完成、你二十分钟内能看完代码”的范围内。太大,AI 容易跑偏;太小,对话开销又太高。

4.2 管理好AI的“短期记忆”

对话式 AI 有一个硬约束,就是上下文窗口有长度。你的项目主文档、代码文件、历史聊天记录,全都在跟这个窗口抢空间。我发现很多人在一个会话里干三天活不换窗口,结果做到后面 AI 开始胡说八道,因为它把你前面贴的旧版本代码当成了最新代码。

正确的做法:一个会话只做一个任务,任务完成就开新会话继续下一个任务。每次开新会话,先贴项目主文档摘要和当前任务相关的文件片段,做完交接再开问。这就相当于每次让 AI 新员工上岗前,先花 30 秒做交接。

如果某个文件特别长(比如几百行的配置或模板),不要整段贴进去,改成提炼关键信息给它:贴那个文件里的类型定义、主要函数签名和注释,让它对结构有概念,而不是把整坨代码灌进去。这样既省窗口空间,又不会丢失关键信息。

4.3 一段能稳定出活的提示词怎么搭

提示词对结果的影响,比大多数人以为的要大得多。同样是让 AI 写一个功能,模糊指令和结构化指令出来的代码,质量差一截。

我自己用的提示词模板是五个组成部分:

  1. 角色设定:你是一个熟悉 XX 技术栈的资深开发工程师
  2. 任务描述:本次要做什么,最好一句话说清
  3. 背景约束:项目里已有的约定、依赖库、文件组织方式
  4. 输出格式:代码放哪个文件、用什么结构、要不要带测试
  5. 验收标准:什么样的结果算完成

对比一下。如果你只写“帮我写个分页接口”,AI 返回的是通用分页逻辑,可能跟你项目里的返回格式完全对不上;如果你按模板写清楚“现有接口统一返回 {code, data, msg} 结构,分页参数用 page 和 size,数据库查询用 ORM 的 skip/take 方式,接口文件要放在 app/controllers/ 下,输出包含接口代码和两个边界测试”,它交付的东西就直接能嵌进你项目里跑。

“输出格式”一定不能省。很多人让 AI 写代码,默认它应该知道怎么写,结果 AI 贴了整段代码加一堆解释,你还得自己扒拉。你把输出格式写清楚(“只输出代码块,不要解释,不要示例”),AI 会立刻变成一个遵守交付规范的队友。

4.4 生成之后的“AI自审”步骤

代码生成之后,别急着合进主分支。我对 AI 生成的所有代码都强制增加一道自审流程:把它刚生成的代码原样丢回去,让它充当严格的技术评审委员。

常用的两个问题:

  • “假设这段代码会在生产环境运行,请逐个函数列出可能在真实使用时崩溃的场景,并说明每种的触发条件。”
  • “请为这段代码设计 3 个正常用例和 2 个异常用例,每个用例给输入、期望输出、实际输出。”

这一招看起来多花了一次请求,实际省下的 debug 时间远大于此。AI 对自己生成的代码做评审时,常常能指出“这段代码没处理浮点数精度”“这个分支条件在并发场景下会重复执行”“这个函数的返回类型在某个路径下和调用处不匹配”。这些如果靠你自己一行行看,很可能就漏了。

我还会让 AI 给每个函数加一个“一句话注释”,描述函数职责和边界条件。这个习惯能让项目后期维护轻松很多,也让最终交付的代码更像是认真写的,而不是拼凑的。

5. 调试排错:给AI喂对信息,比问对问题更重要

5.1 报错信息的“三给三不给”

调试是我看过的 AI 使用里浪费最严重的环节。很多人遇到报错就把整段红色错误日志贴给 AI,然后问“为什么”,AI 分析半天也没找到根因,因为关键信息被淹没了。

我把给 AI 的调试信息总结成“三给三不给”:

  • 给:错误信息原文(最好第一行到堆栈关键行)
  • 给:相关代码块(不是整个文件,只贴报错指向的那段)
  • 给:输入内容与期望结果,“我做了什么操作、期待发生什么、实际发生了什么”
  • 给:已经尝试过的方案和使用环境(系统版本、依赖版本)
  • 不给:整个项目打包丢过去
  • 不给:超长日志的完整副本
  • 不给:无关错误截图(截图里的信息 AI 根本读不到,纯属浪费)

这背后的逻辑是:AI 的注意力预算是有限的,你把窗口塞满冗余信息,它真正依靠的那个错误堆栈反而被冲淡了。给全但给精,才是调试效率的关键。

5.2 先问“为什么”,再问“怎么办”

很多人调 bug 时有个坏习惯:直接问“怎么修”。但你连错误为什么发生都没搞清就让它修,AI 只能给一个“看起来合理但可能治标不治本”的补丁。

正确顺序是先问根因,再问方案。拿空指针举例。如果你直接问“这个空指针怎么修”,AI 很可能说“在调用前加一个判空”,你照着改完,下次换个输入又炸了。但如果你先问“这段代码为什么会空指针?分析所有可能的执行路径,指出哪个路径上哪个变量是 null,为什么它会变成 null”,AI 会告诉你真正的原因——可能上游接口返回了空数据,可能某个字段没有默认值,可能对象初始化顺序有问题。这时候你再问修复方案,它给的补丁才是打在正确位置上的。

我把这个提问方式记成一个固定句子:“先给我讲清楚原因,再给修复方案,修复方案要告诉你改哪一行、为什么改这一行。”

5.3 一条404背后的完整排查链路

分享一次真实的排查过程,完整展示这个思路。

项目里有个接口,怎么请求都返回 404。按习惯,我先给 AI 的信息是:请求方法、完整 URL、后端路由代码、服务启动日志里没有看到这个请求的打印,以及我尝试过的方案(重启服务、检查 URL 拼写)。

AI 的第一轮建议是检查路由注册顺序和重试一次,我照做了,无效。于是我问了它一个不同的问题:“404 可能出现在前端请求地址错误、后端路由未注册、代理转发失败这三个层面,怎么用一条命令快速区分?”AI 建议我用 curl 直接请求后端服务,绕过所有代理。

curl 之后依旧 404,这就排除了代理层,锁定了后端。接下来让 AI 分析路由,它提示检查控制器的扫描范围:框架只会扫描特定包路径下的控制器,如果控制器类放错了包,路由就不会注册。我打开代码一看,确实,新加的控制器类放在了工具包目录,没能被框架扫描到。在 AI 的提示下顺手修正了包结构,接口就通了。

整个过程大概二十分钟,核心不是 AI 多聪明,而是我们一步步缩小了问题范围。每轮只扩大一点点信息量,AI 的判断就不至于瞎猜。这就是调试流程的全部秘密:把大问题切成小问题,再用最小操作去验证。

5.4 当AI开始“复读”,问题多半在你这边

如果你发现 AI 连续两次给出相同的修复建议,而建议又确实无效,先别急着换一个 AI 工具,先检查自己给的信息是不是有问题。我的经验里,90% 的“AI 复读”都是这一条引起的:我漏了关键上下文,或者我贴的代码版本跟实际运行的版本不一样,或者我的描述让 AI 误解了执行顺序。

这时候最好的操作是重新组织问题。不要继续在同一句话题里打转,直接开一个新会话,用“系统重新启动后执行 A 步骤,出现 B 错误,期望 C,已排除 D 和 E 原因”这种格式化描述重写一遍。换一个切入角度之后,AI 往往能看出新线索。把“AI 反复给同一个建议”当成一个信号:它没有新信息可以判断了,你需要喂新东西,而不是重复催它。

6. 测试、部署与收尾:用AI把质量闭环补完整

6.1 测试用例:从验收标准反推

很多个人项目完全没有测试这回事,全靠手工点一遍。但如果你前面按我说的,已经在需求阶段把功能都写成了 Given-When-Then 的验收标准,这时候让 AI 生成测试用例就非常顺。

做法是把它已经写过的用户故事列表贴给它,让它按优先级逐个输出测试用例清单,并明确标注类型:正常用例、边界用例、异常用例。每个用例都包含输入、操作步骤、预期结果。我还会加一句:“边界用例请特别关注空值、超长值、特殊字符、并发操作、时间临界值。”AI 生成的这些用例,你人工过一遍,标上优先级,然后把高优先级的落成自动化测试脚本。

这里要注意一点:AI 生成的用例验证的是“代码行为对不对”,但你真正要测的是“需求有没有被满足”。所以用例先对照验收标准,而不是对照代码。AI 有个天然毛病,它容易顺着代码逻辑去设计用例,结果代码本身是错的时,测试也一起错。先把用例列出来,再去看代码,顺序别反。

6.2 部署排错与运维检查单

部署阶段的报错,是最考验 AI 信息组织能力的场景,因为涉及网络、权限、依赖、环境变量好几个层面。碰到这类问题,我不让它直接猜,而是按层次排查。

我会把问题和环境信息一次性给全,然后说:“请按从最简单排查到最复杂排查的顺序,给我一份操作检查单。”AI 通常会给出一份结构化清单:先检查端口是否被占用,再检查服务是否监听了正确地址,其次检查防火墙和代理,再次检查依赖版本是否匹配,最后检查配置文件和环境变量。

关键信息要给全:服务器系统、部署方式(容器还是裸进程还是 PaaS)、服务启动方式、日志里的关键报错行、配置文件里跟报错相关的片段。信息越全,AI 的检查单越精准。我试过在部署一个 Web 服务时遇到端口起不来的问题,AI 的检查单前两步就定位到了:服务配置里写了监听 80 端口,但当前用户没有绑定低端口的权限,改用 8080 后问题解决。

6.3 收尾文件:让AI帮你写README与项目复盘

项目功能做完之后,真正的“最后十公里”是文档和复盘。绝大多数人最容易偷懒的地方就是这里,而 AI 恰好擅长处理这类收尾工作。

我会让 AI 做三件事:一是根据项目主文档和代码目录结构生成 README,包含项目简介、安装步骤、启动方式、环境变量说明、功能列表;二是写一份开发备忘,记录项目里最容易出错的操作点;三是做一个项目复盘,包括技术决策回顾、踩坑经历汇总、未来可优化方向清单。

这一步的价值经常被低估。对于要做作品集的人来说,一份结构清晰的 README 和复盘,比一堆散落各处的代码更能说明你的能力。而且 AI 写这个很快,你只需要最后校对一遍,把语气改成你自己的。

7. 整套流程里最值钱的五个翻车提醒

流程讲完了,最后集中分享几个实际操作中反复踩过、最有必要写出来的坑。这些细节看起来不大,每一个都让我的项目进度停过。

7.1 AI幻觉:别把“看起来对”当“真的对”

AI 生成的代码里,最容易坑人的是它“编造 API”。它可能给你写一个某个库根本不存在的参数名,或者把一个过期版本的写法当成最新版推荐给你。你粘贴运行,报错,回去问它,它还会面不改色地告诉你“把这个参数换成另一个”,结果是另一个也是编的。

应对办法就一个:凡涉及第三方库的 API 名称、配置项名称、版本号,一律以官方文档为准。拿到 AI 生成的代码后,第一步不是跑,而是先核对它用到的关键 API 在当前项目依赖版本里是否存在。养成“最小验证”的习惯,有一段代码不确定,就单独跑一个最小例子验证它的 API 行为,再放进项目里。

7.2 上下文超限:信息丢了你都不知道

当对话内容超过上下文窗口,AI 不会明确告诉你“我记不住前面的内容了”,它会像正常人一样假装自己知道,然后开始输出和前面逻辑矛盾的代码。这种错误特别隐蔽,因为你很难发现它是因为“失忆”才犯的错。

我控制上下文超限的方法有三个:任务拆小,像前面说的一个会话只干一件事;长文件提炼后再贴;关键状态随时写回项目主文档。如果发现 AI 的回答开始在细节上前后矛盾,果断开新会话,把最新状态交接清楚,而不是在旧会话里硬撑。

7.3 别让AI一口气写整个项目

我见过有人把“从一个空目录开始,给我生成一个完整的前后端项目”这种需求直接丢给 AI,然后它真的生成了几百个文件。打开一看,目录结构、技术栈、配置文件一应俱全,仿佛一个正规项目。启动之后却到处都是跑不通的模块,每个模块之间根本没有真实的数据关联,因为它们是在单次输出里“被想象出来的”,不是通过运行调试长出来的。

正确姿势永远是:小步走,保持项目一直处于“能运行”的状态。每加一个模块,先跑通再继续。项目是一步一步跑出来的,不是一次生成出来的。AI 可以做每一小步的强力辅助,但真正的“项目”始终要通过一次次运行验证来累积。

7.4 敏感信息不过模型

开发过程中,数据库口令、API 密钥、生产环境配置这类敏感信息绝对不要直接贴给 AI。哪怕它承诺不会泄露,你也不知道对话内容会不会被用于训练或者别的地方。更实际的风险是,你在对话里贴了含密钥的配置文件,这个对话记录如果被人看到,等于把生产环境的钥匙交出去了。

我的做法是:所有真实密钥都放环境变量或本地配置文件里,AI 相关代码示例统一用占位符替换。给 AI 的数据也一律脱敏处理,不该带的字段不带。这个问题值得用“红队思维”看待——假设你是一个攻击者,你会不会通过你贴给 AI 的内容拿到有价值的信息?如果答案是会,就别贴。

7.5 依赖与版权:留个心眼

AI 推荐新依赖时要多问一层版本兼容性,这是最后一个高频坑。有些库的最新版本可能已经是完全重写的接口,AI 的旧知识反而成了误导。装新依赖之前,先查一下它的版本发布历史和当前项目依赖的兼容性矩阵。

版权方面也要留心。AI 生成的代码可能参考了某些开源项目的实现,而这些项目可能带有严格的开源许可证。如果你做的是商业项目,涉及依赖和代码出处时,要核对所用包的和代码的许可证条款。个人学习用途问题不大,但“个人项目会变成商业项目”是常态,提前留意能省掉很多麻烦。

以一个个人体会收尾吧。做了这么多项目之后,我慢慢发现,用 AI 做项目的效率上限其实不取决于模型有多强,而取决于你把它放在什么位置上。当搜索引擎用时,你收获的是一地零散的知识点;当结对工程师用时,它才能帮你把一个模糊的想法带成一套真正能运行的系统。

这套流程里唯一反复出现的核心原则就是:你给 AI 的信息,质量决定它反馈的质量。就像你给新同事的交接文档足够清晰,新同事交付的成果才足够稳定。我现在的习惯是每次开工前先写一遍项目主文档,每开一个会话先做三分钟交接,每一步代码生成后都做一次 AI 自审。这些动作单独看都不起眼,组合在一起,就是我愿意在项目里铁打的流程。

RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进