AI 工程化:从推导到落地

0 阅读10分钟

AI 写代码为什么越写越乱?可以试试这套逻辑推理框架

这不是一篇教你怎么写 prompt 的文章。


先说一个真实的场景

你用 AI 写后端接口,第一次它给你用了 studentName,第二次用了 display_name,第三次用了 name

你让它写权限逻辑,它自己猜"学生大概可以被删除吧",直接写进了代码。

你换一个 AI 会话继续,它完全不知道之前定了什么,又发明了一套新的目录结构。

代码库越大,这种漂移越严重,直到没人敢动。

问题不在于 AI 太笨。问题在于它不知道从哪里推导、该遵守什么规矩。


核心观点:通过理清开发逻辑来加速开发,而不是通过自动化来加速开发

AI 辅助开发有两条路:

  • 自动化路线:让 AI 跑得更快
  • 推导路线:先把赛道画清楚,让 AI 知道该往哪跑

如果开发逻辑本身是混乱的,AI 越快,产出的混乱就越多。

这就是 Derivation Kernel 想解决的问题——它不是代码生成工具,不提供 CLI,不是 Copilot 的替代品。它是一套让 AI 和人协作时能按清晰推导链工作的治理框架。


一个核心原则:先推导,后发明(Derive Before Invent)

问题在哪

你让 AI 写学生管理的后端接口,它会:

  • 自己发明字段名(studentName vs display_name vs name
  • 自己决定 API 格式(有时套 { data: ... },有时不套)
  • 自己选目录结构(每次不一样)
  • 自己猜业务规则("学生大概可以被删除吧?")

每一次"发明"都在制造漂移。代码库越大,漂移越严重。

解法

不让 AI 发明。让它从已经确认的上游真相中推导。

❌ AI 自己决定:"学生的状态应该有 active、inactive、deleted"

✅ 先在领域真相中确认:"学生状态只有 enrolled → suspended → graduated",然后 AI 从这里推导出后端枚举、前端下拉选项、字典显示文本

区别在于:推导有明确的来源,出了问题可以追溯;发明没有来源,出了问题只能逐个文件排查。


五层推导链

代码世界需要关心五层,它们不是五个文件夹,而是看同一个系统的五个视角:

L3 领域逻辑层 (业务真相的源头)
    ↓
    ├── L4 后端架构层 (按域组织后端代码结构)
    │       L3 + L4 = 后端域代码
    │
    ├── L6 前端结构层 (按域装配前端组件结构)
    │       L3 + L6 = 前端域级结构
    │           ↓
    │       L7 视觉语言层 (给域级结构加上视觉表达)
    │           域级结构 + L7 = 渲染成品
    │
    └── L5 桥接层 (按功能跨域组装页面,对齐前后端契约)
            后端域代码 + 渲染成品 + 通用组件 → 功能页面
Layer职责稳定方式
L3 领域逻辑业务真相源头四个视角穷尽业务域的最小知识集
L4 后端架构把真相组织成可维护的后端代码结构选定架构策略,全项目一致执行
L5 前后端契约把后端能力投射成前端可消费的共享表面共享规约 + 少量人工拍板
L6 前端交互把能力表面装配成页面、组件、交互流组件治理规则(复用范围 × 复杂度)
L7 视觉语言把交互结构变成最终的视觉表达呈现哲学:重组展示方式,不重写真相

关键认知:

  • L4 和 L6 是对称的——都从 L3 出发,都按域组织,分别停在后端域代码和前端域级结构
  • L7 不是 L6 的下游推导——它是独立的呈现模板,域级结构 + L7 才是渲染成品
  • L5 是唯一跨域的层——前后端都按域组织到域就停;L5 按功能组装页面,因为用户不按域思考

L3:为什么业务真相需要四个视角?

L3 是整条链的起点。它用四个视角穷尽"关于一个业务域,需要知道什么才能安全往下写代码"的最小集合:

真元最简单的记法缺失后果
Schema主体是什么字段名靠猜
Service能做什么操作API 设计靠猜
Policy谁能做什么权限逻辑每人写一套
Relationship实体之间怎么关联join 查询和级联行为靠猜

任何一个缺失,下游推导就会被迫"发明",从而违反"先推导后发明"原则。

四个真元不意味着必须写四个文件。它们可以写在一个文件里(比如 domain-truth.md),关键是四个视角都被覆盖了。


L4-L7:每层靠什么稳定?

L4 后端架构层——靠"选定策略"稳定

选定一套架构策略,全项目一致执行。

稳定来源举例
分层策略DDD-lite:domain → service → repository → transport
CRUD 工厂统一的增删改查代码生成模式
错误工厂统一的错误响应格式和错误码体系
查询工厂统一的分页、筛选、排序模式

L4 的推导关系:L3 Schema → entity/migration;L3 Service → service 层方法;L3 Policy → guard/middleware;L3 Relationship → join 和 cascade 设计。

L6 前端结构层——靠"组件治理规则"稳定

L6 和 L4 对称——按域组织前端,L3 + L6 产出前端域级结构(知道有什么组件、承载什么数据,但还没有视觉表达)。

两个维度的治理矩阵:

  • 复用范围:全局共享层(无业务语义)vs 领域共享层(模块内复用)
  • 复杂度:原子组件 → 轻组合组件 → 领域组件

L6 只工作到域级,不涉及页面组装——页面组装是 L5 的职责。

L7 视觉语言层——靠"呈现哲学"稳定

L7 可以独立于 L6 定义,先定好设计体系再统一应用。

核心原则:为了更好的理解效率,可以重组展示方式;但只能重组呈现,不能重写真相。

几个稳定原则:

  • 低基数直显,高复杂度嵌套(3 个选项直接展示,30 个选项用下拉框)
  • 单轴过长时允许多轴展开(内容太多不要一直往下滚,可以分栏分区)
  • 每一次点击/展开/滚动都应有明确收益

L5 桥接层——靠"共享规约 + 人工拍板"稳定

L5 是唯一跨域的层,也是决策密度最高的层。

前后端架构都按域组织,到域就停止。但页面是面向用户的,用户不按域思考。一个"个人详情页",用户的身份可能来自身份域、权限域、组织域——如果按域划分页面,就会出现多个详情页,这不合理。

所以 L5 按功能(而非按域)组装页面,需要人工拍板的问题:

  • 一个功能拆成几个页面?
  • 每个页面从哪些域取组件?
  • 哪些跨域信息同屏展示,哪些分步展示?

L5 的产出是页面能力矩阵:每个页面能做什么、对谁可见、暴露哪些操作、从哪些域取数据。


一个完整示例:身份域从 L3 到页面

L3 领域真相

实体:identity_account
字段:identity_id, login_principal(唯一), display_name, lifecycle_status
状态机:pending_activation → active → suspended → deactivated

操作:activate_account, suspend_account, deactivate_account
权限:activate 只需 admin;suspend 需要 admin + 账户为 active 状态
关系:一个 identity_account 可以有多个 role_assignment

L4 后端推导(从 L3 推导,不是发明)

  • identity_account → entity 文件 + migration + repository
  • activate/suspend/deactivate → service 层的三个方法
  • Policy 规则 → guard middleware,检查角色和状态前置条件
  • Relationship → repository 的 join 查询设计

L6 域级结构装配

从 L3 按域装配前端组件结构:

  • 身份域组件:身份信息卡片、身份状态标签、身份操作按钮组
  • 角色域组件:角色列表、角色分配表单
  • 操作确认:suspend 和 deactivate 需要二次确认对话框

这些都是域级组件,还不涉及"放在哪个页面"。

L7 视觉表达

独立定义呈现规则:

  • 状态标签色彩编码(active=绿,suspended=黄,deactivated=灰)
  • 角色列表平铺展示(角色数量通常 < 5,不嵌套展开)
  • 危险操作按钮用红色,放在操作组最后

L5 按功能组装页面

  • 自服务页面:身份卡片 + 角色列表,用户可查看摘要、修改 display_name
  • 管理页面:账户列表 + 筛选器 + 批量操作,管理员可执行 activate/suspend/deactivate
  • 两个页面都跨了身份域和角色域——这就是为什么页面组装是 L5 的职责

从 L3 到最终页面,每一步都有明确的上游来源。没有任何一步需要 AI 自己"发明"。


为什么不让同一个 AI 全做了?

如果同一个 AI 既规划又执行:

  • 它会跳过不确定的上游问题,直接写代码(因为写代码更容易产出)
  • 它会在执行中悄悄扩大范围("顺便把这个也做了吧")
  • 它会在遇到矛盾时自己消化(不汇报,自己编一个合理化的解释)

解法是角色分离:

角色职责不做什么
Planner规划、确认上游真相、写任务书不写代码
Executor按任务书执行、在范围内实现不扩大范围、不修改上游真相

Planner 写任务书时:描述"完成的样子",不描述"怎么实现"。 Executor 比 Planner 更擅长找文件、选实现路径。


常见误解

"这是不是要每次写七份文档?"

不是。七层是七个视角,不是强迫你机械产生七个文件。重点是这些视角有没有被补齐、缺的是哪一层、下游是不是还在替上游补锅。

"这是不是 README 的升级版?"

不是。README 负责让陌生人快速理解仓库定位。这套框架负责让 AI 在推导过程中不需要猜测——两件完全不同的事。

"这不就是让 AI 自己推一切?"

恰恰相反。该由人拍板的层,要先拍板;已经拍板的内容,再交给 AI 往下推。不是让 AI 一路自由发挥到底。


总结

问题本框架的回答
AI 写代码为什么会乱?因为它在"发明"而不是"推导"——缺乏上游真相
怎么让 AI 不乱?给它清晰的推导结构:L3 域真相 → L4 后端 / L6 前端 + L7 视觉 → L5 按功能组装
业务真相需要定义什么?四个视角:Schema、Service、Policy、Relationship
下游层靠什么稳定?L4 靠选定策略,L6 靠组件治理规则,L7 靠呈现哲学,L5 靠人工拍板
怎么防止跨层漂移?层之间有明确的桥接内容(字典、契约、格式规约等)
这是自动化工具吗?不是。这是让开发逻辑变清晰的治理框架

项目地址:GitHub - Derivation Kernel

如果你也在用 Claude / GPT 做工程化开发,欢迎来看看这套框架是否对你有用。有问题可以直接在评论区聊。