为什么你的 AI 总是写出 Bug?因为你不懂“切披萨法则” (Pizza Logic)

0 阅读5分钟

告别玄学 Prompt,用工程化思维驯服 AI 幻觉

0. 写在前面

你是否经历过这样的崩溃时刻?

你洋洋洒洒给 AI 写了一千字的 Prompt,把自己构思了三天的复杂业务逻辑全喂给了它。你期待它给你一个完美的 Java 类,结果它给你拉了一坨大的:

  • 不仅忘了引入包,还把你的核心断言删了。
  • 不仅逻辑跑不通,还臆造了一个不存在的 UserUtil.getCurrentUserId() 方法。
  • 你让它改,它越改越错,最后你不得不回滚代码,自己动手重写。

这时候你会骂:“这 AI 还是太蠢了,根本没法用。”

停!  ✋

这可能不是 AI 的问题,而是你的**“喂法”**有问题。

在 Sentinel-K 内核 (我们的 AI Native 开发方法论) 中,我们把这个问题称为 Context Overflow Syndrome (上下文溢出综合症) ,并提出了一条极其硬核的法则来解决它——切披萨法则 (Pizza Logic)

今天,我们就来聊聊这个让无数 AI 开发者恍然大悟的核心心法。


1. 原理篇:为什么 AI 会“消化不良”?

要理解为什么 AI 会写 Bug,首先要理解 AI 是怎么“思考”的。

1.1 注意力衰减 (Attention Decay)

GPT-4 虽然号称有 128k 上下文,但它的有效注意力并不是均匀分布的。

想象你在参加一场马拉松式的会议。

  • 开头 10 分钟:你精神抖擞,记住了老板说的每一个字(项目目标)。
  • 中间 2 小时:你开始走神,玩手机,只听进去了一些零碎的词(具体逻辑)。
  • 最后 5 分钟:你突然醒了,记住了老板说的“散会”(结尾)。

AI 也是如此。当你给它一个 500 行的复杂任务时,中间的细节逻辑(比如边界条件、异常处理、事务回滚)最容易被它“遗忘”或“幻觉”。

1.2 胃口隐喻 (The Stomach Metaphor)

我们把 AI 想象成一个胃口很好但食道很窄的孩子

如果你把一整张披萨(一个完整的复杂功能)直接塞进他嘴里,结果只有一个:噎住,然后吐出来

这就是为什么你得到的代码总是缺胳膊少腿。你试图让它一次性完成:

  1. 定义接口
  2. 写数据转换 (DTO)
  3. 实现业务逻辑 (Service)
  4. 写单元测试
  5. 优化性能

这对 AI 来说,就是那张填鸭式的“整张披萨”。它处理不过来,只能瞎编。


2. 实战篇:什么是“切披萨法则” (Pizza Logic)?

切披萨法则的核心定义非常简单粗暴:

当意图涉及变更内容 > 3 个文件 或 > 100 行代码时,必须强制执行原子化拆解。  —— Sentinel-K 内核 [K-PIZZA]

我们把一个复杂的任务(整张披萨),切成三个原子化的切片 (Slices) ,一口一口喂给 AI。

2.1 阶段 A:骨架 (Bone) —— 定义契约

指令 (Prompt) :

"现在执行 Pizza Slice 1/3。 请阅读 项目全景图。 任务:只定义 UserService 的接口签名、UserDTO 的结构和 UserException 异常类。 约束:严禁实现具体业务逻辑,方法体留空或抛出 NotImplemented。"

AI 的反应: 这时候 AI 的注意力完全集中在**“接口设计”**上。它会写出非常完美的 Javadoc,非常规范的 DTO 命名,考虑到所有的字段类型。因为它不需要操心业务逻辑。

2.2 阶段 B:桩 (Stub) —— 跑通链路

指令 (Prompt) :

"现在执行 Pizza Slice 2/3。 任务:为 UserService 的方法提供 Mock 返回值(假数据),并编写一个 Controller 侧的单元测试来调用它。 目标:证明 HTTP -> Controller -> Service 的链路是通的。"

AI 的反应: AI 会生成一个能跑通的测试。这时候你没有任何业务风险,你验证的是**“架构的连通性”**。如果 Controller 注入失败,或者 JSON 序列化报错,在这里就会暴露,修起来只需 10 秒。

2.3 阶段 C:肉 (Muscle) —— 填充逻辑

指令 (Prompt) :

"现在执行 Pizza Slice 3/3。 任务:请填充 UserService#register 方法的具体逻辑。 逻辑:校验手机号 -> 密码加盐 -> 插入 DB -> 发送事件。 验证:更新测试用例,确保通过。"

AI 的反应: 这时候,接口是稳的(Stage A),链路是通的(Stage B),AI 只需要把那 100 行核心逻辑填进去。它的注意力密度达到最高,写出来的代码逻辑严密,很难出现幻觉。


3. 效果对比:玄学 vs 工程

❌ 错误示范 (The "All-in-One" Prompt)

"帮我写一个用户注册功能,要用 Spring Boot,包含 Controller、Service、Mapper,数据库用 MySQL,密码要加密,手机号要校验,注册成功发个 MQ 消息,顺便把单元测试也写了。"

  • 结果: AI 生成了 5 个文件。运行报错:Bean 注入失败。修好后发现 MQ 配置错了。再修好发现手机号校验正则写反了。耗时:2 小时(含修 Bug)。

✅ 正确示范 (Pizza Logic)

Slice 1: "定义用户注册的接口和 DTO。" (耗时 30s,完美) Slice 2: "Mock 一个返回,跑通 Controller 测试。" (耗时 1min,发现依赖缺失,秒修) Slice 3: "实现注册逻辑。" (耗时 2min,逻辑一次过)

  • 结果: 代码稳健,测试通过,无回滚。总耗时:10 分钟。

4. 总结:把 AI 当兵器,而不是神

AI 不是神,它不会读心术,也没有无限的注意力。

Sentinel-K 开发手册 的核心理念就是:用确定性的流程(Protocol),去对抗 AI 的随机性(Probability)。

切披萨法则 只是我们工具箱里的第一件武器。在后续的文章中,我还会介绍:

  • 反向测试 (Reverse Testing) : 为什么绿灯不可信?如何逼 AI 自证清白?
  • 资产分级 (Asset Grading) : 如何防止 AI 改坏你的核心配置?
  • 决策日志 (ADR) : 如何让 AI 拥有“长期记忆”?

如果你对 AI Native 工程化 感兴趣,欢迎关注我的掘金专栏。让我们一起,从“Prompt 调参师”进化为“代码指挥官”。


本文标签: #AI编程 #架构思维 #Sentinel-K #软件工程