乐于分享
好东西不私藏

如何与AI编程磨合

如何与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 编程降低了写代码的门槛,但没有降低做软件的复杂度。你可以不懂每一行代码,但不能不懂需求边界、业务规则、验收标准和风险控制。