D2C 系列第二篇:复用决策(Reuse / Extend / New)的判定规则

5 分钟阅读

这篇讲约束层的第一个齿轮——拿到一份设计意图之后,怎么判定它的代码该从哪来。

一、投影:先把两边放到同一坐标系再比

判定之前有个前置动作,我们内部叫投影:把设计意图节点,对齐映射到组件结构上。

为什么需要这一步?因为设计和组件说的是两种语言。设计说的是“长这样的东西”:一块圆角矩形、里面一行字、右边一个箭头。组件库说的是“我能干这些事”:按钮有哪几个属性、弹层有哪些插槽、表单项支持什么校验。A 工具说“像按钮”,B 工具说“像三个 div”,分歧就出在比较发生之前——两边根本没站在同一个坐标系里。

投影干的就是这个对齐:设计节点的结构、样式、文本意图,逐项映射到候选组件的契约结构上。能对上的部分是证据,对不上的部分也是证据(缺的证据后面有用)。投影的输出不是结论,而是一张“设计要什么、组件能给什么”的对照表,判定环节只认这张表,不认原始设计稿。

flowchart LR
  A["设计意图节点"] --> C["投影对齐"]
  B["组件契约结构"] --> C
  C --> D["对照表:要什么对能给什么"]
  D --> E["判定环节只认这张表"]

顺序不能反。没经过投影的判定,等于拿苹果的重量和橘子的颜色比大小,结论全是幻觉。

二、投影是第一道门:对不齐的一律降级

投影本身就有 verdict:对齐上了,往下走;对不上,不猜。

“不猜”是最重要的设计。设计稿里经常见到“四不像”节点:看着像卡片,结构像列表,交互像按钮。传统做法是模型挑一个最像的硬上,错了再返工。我们的规则是:投影对不齐的,直接降级为待人工确认,不给出任何复用结论。

这条规则有个名字,叫 fail-closed:证据不全就关门,不断言。fail-closed 听起来保守,其实利于长期的维护。一次错误的复用(用了不该用的组件,后面样式、交互、单测全歪)成本,远高于一次待审的人工确认成本。把“宁可不判”写进规则,系统才不会为了好看的通过率撒谎。

三、三种结论与各自的准入门槛

投影对齐之后,判定只给三种结论,每种都有准入门槛,跨不过就往下落一档。

第一种,直接复用。门槛最高:组件契约完整,设计要的东西组件全能给,且零扩展——一个属性都不用加,一个插槽都不用填。一旦需要动组件一根指头,就不是复用。

这个门槛故意定得苛刻。因为“直接复用”四个字后面跟着的是零回归成本的承诺:组件是经过沉淀的,原样用,原样稳。门槛一松,承诺就碎。

第二种,按配方扩展。设计要的东西,组件能给八成,差的两成在白名单里:改某个属性、绑某个事件、填某个插槽、包一层布局容器。白名单就是配方——事先评审过、确认安全的改法。改法在白名单里,就扩展;不在白名单里,就新建。

配方是扩展和瞎改的分水岭。没有配方的“扩展”,本质是披着复用外衣的新建:享受了复用的名声,没经过新建的审查,两头的好处都占,两头的责任都不负。

第三种,只能新建。触发条件同样严格:候选池必须是完备的(该找的都找过了,不是漏找),且每个候选都有明确不满足的核心项。新建不是“没找到”,是“找遍了且都不行”——这个“找遍了”的证据必须留档,否则新建就成了逃避判定的后门。

flowchart TD
  A["投影对照表"] --> B["契约完整且零扩展"]
  B --> C["直接复用"]
  A --> D["差的部分全在配方白名单"]
  D --> E["按配方扩展"]
  A --> F["候选穷尽且都不满足"]
  F --> G["只能新建"]
  A --> H["投影对不齐或证据不全"]
  H --> I["降级待审"]

注意这个流程图里没有“差不多”这个出口。四条路全是判定的,第五条是认怂的。认怂也是判定的一部分,而且是最重要的一部分。

四、排序与拍板分离

还有一个原则,单独拎出来讲,因为它反直觉:检索打分和模型建议,只能排序,不能拍板

候选组件从哪来?可以从身份映射来,可以从角色索引来,可以从历史记录来,甚至可以让模型推荐、向量检索打分。这些渠道都可以参与,作用只有一个:决定先看谁、后看谁。排序是效率问题。

拍板是正确性问题,只认证据:对照表上的硬约束项,一条一条过,过了就是过了,没过就是没过。模型说“这个最像”不算证据,向量分数 0.99 也不算。只有对照表里的满足关系算。

这个分离保护两边。检索侧可以大胆:多召回、敢推荐,反正决定不了结论;判定侧可以严格:只认硬约束,不被任何分数绑架。混在一起的系统最糟糕:分数高了,判定就想放水;放了一次水,阈值就成了橡皮筋。

flowchart LR
  A["身份映射"] --> D["候选排序"]
  B["角色索引"] --> D
  C["模型推荐与向量打分"] --> D
  D --> E["决定先看谁"]
  F["投影对照表硬约束"] --> G["拍板"]
  G --> H["结论只认证据"]
  E --> G

一句话:排序管效率,拍板管对错。效率可以概率化,对错必须确定性。

小结

这篇讲了判定环节的三件事:先投影再判定,对不齐就降级;结论只有三种,每种门槛写死,外加一条认怂的路;排序和拍板分属两个世界。这三件事合起来,就是第二篇标题里“判定规则”的全部。

下次让 AI 复用组件之前,先逼它输出对照表——设计要什么、组件能给什么,一条一条列。列不出来的,一律不许复用。光这一条,就能拦下大半“看着像”的翻车。下一篇讲结论落地之前的最后一道关:静态验证和运行时验证的分工。

相关文章
前后篇
OLDER →D2C 系列第一篇:非标准设计稿与 Figma MCP 的噪声问题