AI 写代码,不能只靠提示词,得加把锁
AI 写代码别只靠提示,得加硬性约束
大家都知道那个安全事故:用户一不小心就看到了别人的数据。这类 bug 让安全审计员睡不着觉,也可能让公司面临合规风险。问题不在于谁故意犯错,而是 AI 在生成代码时容易“忘记”关键规则。
现在 Claude、GPT 每天能输出几千行代码,问题就更严重了。你可以在提示里反复强调安全,但写到一万多行之后,还是会遇到同一个疑问:
你怎么确定代码真的按你预期执行了?
靠提示提醒,不如让代码自己守规矩
目前最常见的做法是给 AI 提要求,比如“一定要验证权限”“不能跳过输入检查”。这种方式有时有效,但不稳定。因为 AI 需要记住所有规则,还要在成千上万行代码里正确应用它们。一旦本地上下文复杂,就容易走捷径。
更麻烦的是,人类 review 代码时也可能漏掉问题。靠人盯人,终究不是长久之计。
用结构化约束,让错误无处可藏
更好的做法是改用“结构性守卫”。简单说,就是用编译器、类型系统、测试等工具来强制执行规则。代码如果不符合要求,就根本编译不过,或者测试直接失败。
这就像把最重要的规则写进代码的骨架里,而不是放在提示里等着 AI 去记。AI 生成代码时,一旦尝试绕过规则,系统就会立刻报错。然后你可以把错误信息反馈给 AI,让它重新生成,直到通过为止。
这种循环机制,比单纯提醒更可靠。
把规则写进类型系统
很多安全规则其实已经很清晰,比如:
用户只有在已登录、属于对应租户,且资源确实属于该租户的情况下,才能访问。
但用自然语言描述这些规则是不够的。你需要把它们转化为类型系统里的“守卫类型”。比如定义“已认证用户”“已验证租户”“已确认资源所有权”这些概念,让编译器在代码连接时自动检查。
这样一来,无论 AI 生成什么代码,只要类型不匹配,就会直接被拒绝。规则不再靠人提醒,而是由底层结构自动守护。
实际怎么操作
你可以先用类似 Shen 这样的形式化类型语言来定义规则:
- JWT token 必须是非空字符串
- 已认证用户必须是租户成员才能访问
- 用户只能访问自己租户拥有的资源
这些规则会被编译成实际代码里的守卫类型。AI 生成的代码必须与这些类型兼容,否则无法通过编译。最终,AI只需要关心代码能否编译成功,而不是记住所有安全细节。
对开发流程的影响
以前靠人写代码、靠人 review 来保证安全。现在则可以让机器来检查代码是否符合预设属性。结构化约束让违规变得困难,需要故意绕过,而不是无意中遗漏。
对于使用 NameOcean 云主机和 Vibe Hosting AI 辅助开发的团队来说,这个转变尤其重要。代码生成速度越来越快,你真正需要依赖的不是 AI 的“记忆力”,而是系统的“硬性结构”。
核心建议
再聪明的 AI 也可能出错。对于处理真实用户数据的系统,尤其是多租户环境,结构化约束比单纯优化提示更可靠。
别再让 AI 去记规则了。把规则变成代码结构,让它成为生成过程的唯一路径。