如何与AI编程磨合
当我们进行AI编程时,往往会陷入只提需求、不理解实现细节的情况,这些情况下AI 编程确实能跑起来,但容易出现下面几类风险。
1. 需求表达不够精确,AI 会“脑补”
你可能说:
> 做一个用户登录功能。
但 AI 会自己补充很多细节:
-
用账号密码还是手机号验证码?
-
是否需要注册?
-
是否需要忘记密码?
-
密码如何加密?
-
登录态存在 Cookie、Session 还是 JWT?
-
失败多少次锁定?
-
后台接口返回什么格式?
-
前端路由怎么跳转?
如果你没有明确说明,AI 会按它自己的常见经验生成代码。结果可能“看起来能用”,但不一定符合你的真实业务。
这就像你对程序员说“做个订单系统”,但没讲清楚订单状态、退款、支付、库存、异常流程,最后做出来的东西可能和你想象完全不同。
2. 你很难判断代码质量
如果你不了解编程细节,AI 给你一大段代码,你可能只能判断:
-
页面能不能打开
-
按钮能不能点
-
功能大概能不能跑
-
但你很难判断:
-
代码结构是否混乱
-
是否有安全漏洞
-
是否有性能问题
-
是否可维护
-
数据库设计是否合理
-
是否有重复代码
-
后续扩展会不会很痛苦
-
错误处理是否完整
这会导致一种情况:项目早期进展很快,后期越来越难改。
3. AI 很容易做出“能跑但不稳”的东西
AI 编程经常可以快速做出 demo,但生产级系统还需要很多隐性要求:
-
输入校验
-
权限控制
-
异常处理
-
日志记录
-
数据一致性
-
并发问题
-
回滚机制
-
边界情况
-
测试覆盖
-
部署配置
-
环境变量管理
如果你只是说“实现某功能”,AI 往往会优先实现主路径,也就是最理想的情况:
> 用户正常输入 → 点击按钮 → 成功返回 → 页面显示结果。
但真实系统中大量问题发生在异常路径:
-
用户乱输
-
网络失败
-
接口超时
-
数据为空
-
重复提交
-
权限不足
-
数据库写入失败
-
老数据格式不兼容
如果你不主动要求,AI 可能不会充分处理。
4. 你会过度依赖“感觉正确”
AI 生成的代码通常很自信,看起来也像那么回事。问题是:它可能错得很隐蔽。
比如:
-
调用了不存在的 API
-
用了错误的库版本写法
-
数据库字段名不一致
-
类型定义和真实数据不匹配
-
安全逻辑看起来有,但其实绕得过去
-
修一个 bug 的同时引入另一个 bug
如果你不懂技术细节,就容易被“代码看起来专业”迷惑。
5. 需求变更会变得困难
老板/产品式表达常常是:
> 这个页面再加一个筛选条件。
> 这个流程稍微改一下。
> 这个权限再细一点。
> 这里加个导出。
> 这个字段换个含义。
如果一开始没有好的架构,AI 可能会用“补丁式开发”:
-
哪里需要就在哪里加逻辑
-
复制粘贴一段相似代码
-
临时加几个 if
-
绕过原来的设计
-
直接改数据库结构但不处理历史数据
短期看很快,长期看会变成“屎山”。
你越不懂底层结构,越难发现项目正在变复杂、变脆弱。
6. 安全问题特别容易被忽略
如果你不是技术背景,很容易只关注“功能能不能用”,但很多风险在表面上看不出来。
比如:
-
后端接口没有鉴权
-
普通用户可以访问管理员数据
-
密码明文存储
-
SQL 注入
-
XSS
-
文件上传漏洞
-
敏感信息泄露
-
API key 写死在前端
-
用户可以篡改请求参数获取别人的数据
这些问题不一定会让系统马上报错,但一旦上线就可能造成严重后果。
7. 你可能不知道“什么该让 AI 做,什么不该让 AI 自己决定”
AI 很适合做:
-
根据明确需求生成代码
-
改已有 bug
-
写工具函数
-
生成页面
-
重构局部代码
-
写测试
-
解释代码
-
补充文档
但不应该完全让 AI 自己决定:
-
核心业务规则
-
数据权限模型
-
数据库结构
-
支付、资金、订单状态流转
-
安全策略
-
架构选型
-
复杂系统边界
-
长期维护方案
如果你不知道哪些地方重要,就容易把关键决策交给 AI 随机发挥。
8. 沟通成本会变成“反复试错”
你可能会进入这种循环:
-
你说一个需求
-
AI 写代码
-
你运行后发现不对
-
你说“不是这个意思”
-
AI 改
-
又产生新问题
-
继续改
-
项目越来越乱
这其实不是 AI 不行,而是需求没有被拆清楚。
AI 编程更像是你在带一个执行力很强、但不完全理解业务的程序员。如果你给的是模糊指令,它会积极执行,但不一定执行对。
9. 最大的问题:你缺少“验收标准”
产品经理视角不是坏事,真正的问题是只有需求,没有验收标准。
比如你说:
> 做一个任务管理页面。
这不够。
更好的表达是:
> 做一个任务管理页面,包含任务列表、创建任务、编辑任务、删除任务、按状态筛选。任务字段包括标题、描述、负责人、截止日期、状态。状态包括未开始、进行中、已完成。删除任务前需要二次确认。创建任务时标题不能为空。列表默认按截止日期升序排列。
再进一步,还应该有验收条件:
-
当标题为空时,点击保存显示错误提示
-
当创建成功后,弹窗关闭并刷新列表
-
当接口失败时,显示错误消息
-
删除任务时必须确认
-
状态筛选切换后列表立即更新
-
页面刷新后筛选条件是否保留,需要明确
这类描述越清楚,AI 越可靠。
—
那你应该怎么办?
你不需要变成专业程序员,但需要补齐三种能力。
1. 学会写“可执行需求”
你不用写代码,但要能写清楚:
-
目标是什么
-
用户是谁
-
输入是什么
-
输出是什么
-
正常流程是什么
-
异常情况是什么
-
数据字段有哪些
-
权限规则是什么
-
验收标准是什么
你可以用这个模板:
“`text
-
功能名称:
-
目标:
-
使用者:
-
页面/接口:
-
主要流程:
-
数据字段:
-
权限规则:
-
异常情况:
-
验收标准:
-
不需要做的内容:
“`
2. 学会问 AI 技术风险
每次让 AI 开发前,可以先问:
“`text
在实现这个功能前,请先分析:
需要改哪些文件?
涉及哪些数据结构?
有哪些边界情况?
有哪些安全风险?
有哪些实现方案?
你推荐哪种方案,为什么?
先不要写代码。
“`
这样可以避免 AI 直接冲进去乱改。
3. 学会让 AI 自检
功能写完后,不要只问“完成了吗”,而要问:
“`text
请检查刚才的实现:
是否满足所有需求?
是否有遗漏的边界情况?
是否有安全问题?
是否有重复代码?
是否需要补充测试?
是否有潜在的维护问题?
“`
如果是重要功能,还可以让 AI 写测试用例,或者让另一个 AI 角色做 code review。
—
我的判断
Vibe coding时像老板/产品经理不是问题,甚至是优势。因为软件最终是为业务服务的。
真正的问题是:如果你只会提模糊需求,而不会定义边界、规则和验收标准,AI 会帮你很快地制造出一个看起来能用、但长期不可靠的系统。
比较理想的状态不是你变成程序员,而是你变成一种“懂技术协作方式的产品负责人”。
你至少需要掌握:
-
如何拆需求
-
如何定义验收标准
-
如何识别高风险模块
-
如何要求 AI 先设计再编码
-
如何让 AI 做测试和自检
-
如何控制代码变更范围
一句话总结:
> AI 编程降低了写代码的门槛,但没有降低做软件的复杂度。你可以不懂每一行代码,但不能不懂需求边界、业务规则、验收标准和风险控制。
夜雨聆风