设计工具正在长出一个「编译器」:聊聊交付半径、规格层与三类可测指标

7 阅读9分钟

第 07 期 · 未来设计 · 2026-11-05

文 / 文谦(主视角:企业家 | 副视角:茶产业发展专家,跨行业借镜:交付链)

本文含少量上市公司与融资信息,仅供技术讨论,不构成投资建议。


一个先摆出来的矛盾

同一周,两组数字:

  • Figma 2026 Q2 营收 3.701 亿美元、同比 +48%,NDR 136%,毛利率 84%(财报口径,第三方汇总)。10 月它把设计 Agent 推到 GA,开始按 AI credits 收钱,同时上线 Specs。
  • Canva 宣布 13 年来首次裁员,1,271 人、占 22%;月活同比少 1,200 万,营收增速指引从 30% 下调到 20%(《澳大利亚金融评论报》,经新浪财经转述,2026-11-04)。

两家的模型能力差别没有这么大。差别在产物。

Canva 的产物是一张图,图的下游是「发出去」,到此结束。Figma 的产物是一个可以继续被引用的场景,下游是开发、是代码、是下一个季度还在用的组件库。

所以这一期我想从工程角度问一个问题,而不是从市场角度:

一份设计文件,要满足什么条件,才能被下游的机器直接消费,而不需要人再翻译一遍?

我把这件事叫交付半径:不需要重画、重审、重写的前提下,这份产出能走多远。


1. 现有链路的断点在哪

把今天的设计→开发链路画出来,断点非常固定:

brief ──> 设计稿 ──> 标注 ──> 代码 ──> 上线
            │          │         │
            │          │         └─ 组件库漂移:agent 优先复用仓库里的废弃组件
            │          └─ 标注是"人写的散文",不可执行、不可 diff
            └─ 决定(为什么用 8px、为什么这个红)只存在于人的脑子与会议纪要

三个断点,各自对应一类技术问题:

断点现象工程本质
决定丢失换个人接手就重做一版决策没有结构化载体,只有图像载体
标注不可执行前端按标注手写,写出来和设计不一致约束是自然语言,没有 lint 与类型
组件漂移agent 生成看似合理、但用了废弃 API仓库里没有权威事实源,模型只能就近猜

Figma 的 Specs、Google 的 DESIGN.md、Uiverse 的三层 token,本质上都在干同一件事:给这三个断点各补一个可执行载体。


2. 范式:从「生成」到「生成 + 验证 + 追认」

这两年的设计 AI 产品,架构上其实只有两代。

第一代:prompt → artifact

prompt ──> [model] ──> image / screen / code

一次调用,一次产物,无状态。优点是简单,缺点是:不可回归、不可追责、不可复用。这一代已经被压到接近免费——Google Stitch 免费额度是 Rapid 模式 350 次/月、Experimental 模式 250 次/月,且不可提额(Google 官方论坛口径,2026-10)。

第二代:brief → constraint → generate → validate → attest

brief
  │
  ├─> constraint layer(tokens / DESIGN.md / spec entries)
  │        │
  │        └─> [generator] ──> artifact
  │                                │
  ├─> validate(lint / type / rule engine)──┤
  │                                │
  └─> attest(provenance / signature / trace)──> 交付

关键差别不在 generator,在两侧的 constraint 与 validate/attest。模型是可以换的,约束和追认不能换。

这也是我判断「未来设计」这条赛道的核心:真正的产品不在中间那一格,在两头的护栏里。


3. 规格层怎么落地:三个可直接抄的实现

3.1 DESIGN.md:把设计系统写成可 diff 的约束

DESIGN.md 不是一个「文档」,它是一个编译目标。它同时要满足两个消费者:人和 agent。

Google 2026-03-18 在 Stitch 里提出这个概念,2026-04-21 开源草案规范,2026-10-01 发布 CLI(npm @google/stitch),可以在终端生成界面、把本地 dev server 快照回 Stitch。

结构上我建议分两段,缺一不可:

---
version: 3
tokens:
  color.action.primary: "#2563EB"   # alias 层,禁止直接引用 global
  color.bg.canvas:      "#F8FAFC"
  space.unit: 8
  radius.card: 12
  motion.enter: 180ms
typography:
  heading: { family: Inter, weight: 600, size: 24, lh: 1.3 }
  body:    { family: Inter, weight: 400, size: 14, lh: 1.6 }
---

## WHY(给模型的自由度边界)

- primary 只用于「主要动作」,不用于装饰。页面内最多一个 primary 按钮。
- 卡片不用投影,用 1px 边框;阴影只留给浮层。
- 信息密度优先于留白:桌面端内容区最小宽度 720px。

## DON'T

1. 不要引入未登记的颜色,即使视觉上更协调。
2. 不要用 12px 以下的正文。
3. 不要给按钮加渐变。
4. 不要在暗色模式下把 primary 反相成浅色。
5. 不要复用已标记 deprecated 的组件。

两个坑,都是实际踩过的:

坑一:只有 WHAT 没有 WHY。 只有 hex 值时,agent 遇到未定义场景(空状态、错误页)会自由发挥,而自由发挥正是「AI 味」的来源。WHY 段是给模型的兜底策略,不是给人看的抒情。

坑二:单层 token 直接给模型。 必须做三层——global(原始值)→ alias(语义)→ component(组件级)。模型拿到 #2563EB 不知道什么时候用,拿到 color.action.primary 才知道语义。Uiverse 的三层架构就是这个思路。

3.2 把约束接进 CI:让 agent 的错变成编译错误

这是我认为最关键的一步。文档写不住的东西,lint 写得住。

// design-lint.ts —— 示意,非某产品源码
import { parseDESIGN } from "./design-md";
import { scanUsage } from "./ast-scan";

const spec = parseDESIGN("DESIGN.md");

export function lintDesign(files: string[]) {
  const issues: Issue[] = [];

  for (const f of files) {
    for (const u of scanUsage(f)) {
      // 1) 未登记的色值
      if (u.kind === "color" && !spec.hasToken(u.value)) {
        issues.push({
          file: f, line: u.line, level: "error",
          code: "DESIGN001",
          msg: `未登记颜色 ${u.value}。可用:${spec.suggest(u.role)}`,
          fix: spec.suggest(u.role),          // 直接给可执行的修复值
        });
      }
      // 2) 语义误用:primary 用在非主操作上
      if (u.kind === "token" && u.token === "color.action.primary") {
        const primaryCount = countPrimaryInView(f, u.viewId);
        if (primaryCount > 1) {
          issues.push({
            file: f, line: u.line, level: "error",
            code: "DESIGN014",
            msg: `同一视图出现 ${primaryCount} 个 primary,规则上限 1`,
            fix: "改用 color.action.secondary",
          });
        }
      }
      // 3) 废弃组件
      if (u.kind === "component" && spec.isDeprecated(u.name)) {
        issues.push({
          file: f, line: u.line, level: "error",
          code: "DESIGN021",
          msg: `${u.name} 已废弃,替代:${spec.replacement(u.name)}`,
          fix: spec.replacement(u.name),
        });
      }
    }
  }
  return issues;
}

这里有个设计要点:每条错误必须带 fix 字段。因为你的消费者不是人,是 agent——它需要的是「下一步改什么」,而不是「你错了」。Uiverse 的做法就是把 lint 报错直接当修复指令喂回去,这个闭环成立,一致性才有保证。

3.3 上下文预算:为什么 Once UI 要压到 10KB

Once UI 2.0 的公开说法是「每个任务的上下文控制在约 10KB」,靠的是规则文件(约 2KB)+ 机器可读组件目录 + 任务包 + 组件级 JSON 切片,而不是把整本站文档塞进去。

这条工程约束值得所有做 agent 工具的人抄:

全量上下文成本 = O(文档规模)
切片上下文成本 = O(任务相关子图)

后者才是可扩展的。伪代码:

def build_context(task, catalog, rules, budget=10_000):
    ctx = [rules]                                  # ~2KB,永远带
    for comp in rank_by_intent(task, catalog):     # 按意图排序
        if tokens(ctx) + tokens(comp.slice) > budget:
            break
        ctx.append(comp.slice)
    return "\n\n".join(ctx)

rank_by_intent 是关键:把「定价页」「仪表盘」这类意图映射到组件子集,而不是靠向量检索碰运气。检索会召回语义相近但结构不对的组件,这是 agent 生成「看起来对、用起来错」的常见来源。


4. 追认层:审图是这条链路里最硬的一环

规格层解决「下游能不能吃」,追认层解决「吃下去谁负责」。这一层在中国有一个很好的样本。

新疆 BIM 施工图智能审查系统,2026-07-01 上线试运行,全疆 21 家审图机构 100% 接入;「AI 初筛 + 人工复核」使人工复核工作量平均降约 28%、漏审率降约 70%;系统解析 2,000 余项行业标准、5,000 余条条文,覆盖五专业 + 消防/节能专项 500 余条重点规则(兵团在线,2026-11-03)。

从架构看,它做对了三件事:

第一,把规则变成可执行的条文对象,而不是检索。

{
  "rule_id": "GB50016-5.5.17-a",
  "source": "GB 50016-2014(2018版)",
  "version": "2018",
  "scope": ["building", "fire"],
  "predicate": {
    "type": "clearance_min",
    "subject": "door.swing.direction",
    "against": "occupant_load",
    "threshold": "inward_forbidden_when_occupant>50"
  },
  "evidence_path": ["model.storey[2].door[17]", "schedule.fire_exit[3]"],
  "severity": "mandatory"
}

要点是 predicate 可计算、evidence_path 可回溯。这比让模型「读规范然后判断」可靠一个数量级——规则引擎负责确定性,模型只负责把非结构化图面映射到结构化对象。

第二,二三维联动定位。 平面点选一处,模型对应构件亮起。这不是 UI 花活,是降低复核成本的核心:审查者的时间不是花在发现问题,是花在确认问题。

第三,意见可追溯到条文。 每条 output 都带 rule_id,这使「AI 说错了」可以被审计,而不是变成一个黑箱争议。

同样的思路,构力科技 PKPM Agent 2.0 用的是另一条路:把大模型接到跑了几十年的 PKPM 求解器上,产品定义里写了「AI 内容经审核、操作留痕、可回撤」(搜狐「智汇苏建」,2026)。「可回撤」是一个工程承诺,不是一个功能——它要求每一步操作都有 inverse operation,这对系统设计的要求远高于「生成一份报告」。


5. 可测指标:怎么判断一个设计 AI 产品是不是真的有用

我不太信「效率提升 X 倍」这类说法。下面是我认为可以测、且能横向比的六个指标。

指标定义采集方式参考阈值(我的判断)
返工率交付后下游因「不可用」而非「不喜欢」而修改的次数 / 总修改次数版本 diff + 修改理由标签< 30% 才算进入规格层
规格覆盖率被 Spec/DESIGN.md 明确覆盖的界面决策数 / 总决策数设计系统审计脚本> 70% 才能喂 agent
漂移率agent 生成代码中偏离 token 的比例lint 命中数 / 总样式声明数< 5% 可上生产
一次通过率生成产物无需人工修改即可进入下一环节的比例流水线埋点现在是瓶颈,普遍 < 40%
上下文效率完成任务所需 token / 产物行数调用日志越低越好,> 10KB/任务 需优化
追认成本从产物完成到有人签字的人时工单系统这是 L4 的真正 KPI

其中第一个最容易被忽略。团队普遍在测「生成速度」,但真正决定价值的是下游返工。Figma 2026 产品设计 AI 报告的裂缝就在这儿:78% 认为提效,只有 58% 认为提质,仅 32% 敢依赖 AI 输出;设计师比开发者更悲观(40% vs 68% 认为质量提升)——样本 2,500 人,全球。

换句话说:速度指标已经饱和,质量指标还在原地。


6. 六个工程易错点(都是踩过的坑)

1. 把非确定性当 bug 修。 Stitch 的同一提示词多次运行结果不同,这是特性不是缺陷。工程上的正确做法是:把「可复现」放在 spec 层(版本化的 DESIGN.md),而不是放在生成层(seed 锁定只能解决一部分)。

2. 用向量检索喂设计上下文。 会召回语义相近但结构不对的组件。用「意图 → 组件子图」的显式映射,比 embedding 靠谱。

3. BIM/IFC 的坐标与单位。 IFC 里长度单位、坐标系、楼层基准不统一,跨工具往返一次就可能偏几厘米。Drafted 能导出 DXF/IFC/Revit,这类互操作的测试成本远高于生成成本——导出格式不是功能,是兼容性债务。

4. 条文映射的版本化。 规范一改,规则库就要重标。新疆系统的 2,000 余项标准、5,000 余条条文不是一次性资产,是持续负债。设计时就要给 rule.version 留位置,否则两年后整套重做。

5. credits 计费反噬使用深度。 Figma GA 起按 AI credits 计量。任何按次计费的设计 AI,都会诱导用户「少试几次」——而设计的价值恰恰来自多方向探索。这是产品设计与计费模型的冲突,不是技术问题。

6. 输出里没有 provenance。 中国司法侧已经把「过程留痕」变成胜负手:北京互联网法院「猫咪晶钻吊坠」案支持确权,靠的是提示词、迭代、草图、选择记录;同年「蝴蝶椅案」中设计师拿不出原始生成记录、且自认无法复现,著作权主张未获支持(法治网,2026-10-22)。欧盟《人工智能法案》相关条款 2026 年起适用,强制内容溯源标注与训练数据披露,特定违规最高罚 1,500 万欧元或全球营业额 3%。留痕不是合规附件,是产品的一部分。


7. 六维分析

7.1 Figma Specs(规格层 / 平台)

  • 应用场景:评审结束到开发动工之间。把会议纪要、Slack、评论里的决定变成可引用条目,经 MCP 供编码 agent 读取。
  • 技术可行性:高。不需要更强模型,需要把组件、变量、代码层、图表结构化。20 个 MCP 合作方(OpenCode、Dia、JetBrains Junie、Meta Muse 等)已接入。
  • 目标用户画像:设计系统成熟的中大型团队(Uber 跨 7 个平台);ARR > $10K 客户 15,964 家;决策链设计系统负责人 → 设计 VP → 采购。
  • 商业前景:按 credits 计费已跑通,但 Agent 的采用率、收入、成本均未披露。第三方示意:1.6 万大客户 × 25% × 2.5 万美元 ≈ 1 亿美元年化(情景,非预测)。
  • 竞争优势:决定发生的地方就是数据产生的地方。越成熟的设计系统越难迁走。
  • 潜在风险:credits 抑制探索;Specs 仍在 beta,若被当成文档而非资产,会退化成高级注释。

7.2 新疆 BIM 审图(追认层 / 制度)

  • 应用场景:施工图报审。AI 初筛强条、人复核关键部位、自动出报告。
  • 技术可行性:已验证,但依赖三件事同时成立——规则明确、模型规范、制度强制。缺一条就退化成查错清单。
  • 目标用户画像:21 家审图机构(财政付费)、设计单位、施工企业。付费方不是市场,确定性高、天花板低。
  • 商业前景:省人工复核工时(28%)与漏审风险(70% 降幅)。模式是项目制 + 运维,难做成 SaaS 复利,但一省跑通后可向其他省复制。
  • 竞争优势:标准库与条文映射(2,000+ 标准、5,000+ 条文、500+ 重点规则)与政府系统对接。不是模型能力,是脏活。
  • 潜在风险:责任归属未清,人工减不掉只能少做重复;规则库维护是长期成本。

7.3 Rayon(垂直层 / 工作流)

  • 应用场景:室内设计师从概念到施工图到材料清单;图纸与规格表同源,改图则清单联动。
  • 技术可行性:浏览器 CAD + 实时协同 + DWG 导入,工程难点在几何内核与多人冲突合并,不在 AI。
  • 目标用户画像:室内/体验空间设计事务所(维珍航空休息室、CityHub、Coloc Housing);35 人团队服务专业客户,说明单客价值高。
  • 商业前景:€10M A 轮、累计约 €16M,订阅制;客户自述 CityHub 每月省 1 万欧元、Coloc 可行性研究成本每月降 1.1 万欧元。
  • 竞争优势:职业专属工作流 + 组件库沉淀。通用工具要赢的是工作流,不是效果图。
  • 潜在风险:3D 与 agentic AI 要到 2026 年底才上;若延期,叙事会先于产品透支。

7.4 简版六维(四家)

  • Drafted:自建房业主与建筑师前期比选;语言/草图 → 带尺寸平面,导出 DXF/IFC/Revit;12 万用户/月生成 32.5 万套(公司口径);$16M 种子轮;护城河在格式互操作;风险是变现未定义、方案图到报建图是鸿沟。
  • DESIGN.md 生态:独立开发者与小型团队;格式免费(Google 开源),钱在组件库、治理工具与服务;护城河是生态位而非格式;风险是碎片化与 trade dress。
  • Spacely AI:事务所渲染与虚拟摆场;嵌在 SketchUp 里;50 多国 1,500 家事务所;仅 $1M 种子轮;护城河是分发位置;风险是渲染层被通用模型拉平。
  • Meshy:游戏/电商资产、3D 打印;文/图生 3D + 移动端;1,500 万注册;100MARR、100M ARR、1.5B 估值;护城河是纹理质量与数据飞轮;风险是它自己已在转向游戏与实时交互。

两个概念阶段(仅记):过程留痕凭证包(确权材料自动打包)、变更下游账单(改一个参数算出哪些图/清单/报价要重签)。前者等合同模板改,后者等计费方式改。


8. Top 3(与其余三平台一致)

① Figma Specs。 技术上它是「把决策变成可寻址对象」,商业上它是「第一个为规格单独收钱的平台」。工程师该关注的是它的 MCP 接口形态——如果 Specs 变成事实标准,你的设计系统会以「被 agent 读取」的方式存在,而不是以「被设计师打开」的方式存在。

② 新疆 BIM 审图 / 构力 PKPM Agent 2.0。 它是「规则引擎 + 模型 + 人」这个三元结构唯一跑到全覆盖的样本。可抄的部分不是模型,是 rule_id + evidence_path 这套可审计输出格式,以及「可回撤」这个工程承诺。

③ Rayon。 它证明垂直工作流还能收钱:图纸与规格表同源,是把「一致性」做进数据结构,而不是做进提示词。这是最朴素也最难被复制的架构选择。


9. 三个可以立刻动手的动作

  1. 今天就把 DESIGN.md 写出来,哪怕只有 40 行。 先写 8 个 token + 5 条 DON'T,跑一遍 agent,记录它在哪一屏开始违规。违规点就是你的规格缺口清单。

  2. 给 lint 加 fix 字段。 没有修复建议的报错,对 agent 等于噪音。这是从「人工检查」升级到「自动收敛」的唯一开关。

  3. 给每个产物存 provenance。 提示词、参数、版本 diff、素材来源,落到一个可导出的 JSON。别等到需要证明「这是我做的」那天才想起来。


设计工具的下一站不是「更会画」,是「更会交代」。

能交代清楚的东西,才走得远。


AI 参与声明:本文使用 AI 辅助检索与资料整理,代码为示意实现,事实核验与判断由作者完成。

免责声明:文中涉及上市公司与融资信息,仅供技术讨论,不构成投资建议。