
当 AI 生成界面时,设计意图在偏离。不是 AI 故意做错,而是系统缺少一层"语义约束"。 本文提出 Schema-As-Code:一套让设计师用 YAML 契约锁住设计意图的三阶段流水线。不是替代任何工具,是所有 AI 工具的上游约束。
2024-2025 年,设计团队全面进入AI辅助生产时代:
这些工具都在解决"形态层"的问题,界面长什么样、用什么组件、怎么写代码。
但没有人解决"语义层"的问题,这个界面在这个场景下表达了什么意思、不能突破什么边界。
结果是:
这不是某个产品的Bug,而是整个行业在AI生成界面时代共同面临的结构性断层。

我提出的方法叫 Schema-As-Code(把设计规范写成代码格式的规则文件)。
它不是另一个 Design-to-Code 工具,而是所有工具的"上游约束层"。
┌─────────────────────────────────────────┐
│ 语义层:Schema-As-Code(你) │ ← 你在这里
│ "这个场景下必须表达什么语义、不能突破什么边界" │
└─────────────────────────────────────────┘
↓ 编译为 Prompt 前缀 / 校验规则
┌─────────────────────────────────────────┐
│ 形态层:v0 / Claude Code / DevUI HMC │ ← 现有工具
│ "长什么样、用什么组件、怎么写代码" │
└─────────────────────────────────────────┘关键洞察:
这四层缺一不可,且互不替代。
Schema-As-Code(把设计规范写成代码格式的规则文件)是一条可执行的三阶段流水线。

回答的问题:"我的产品有没有语义断层?"
我设计了一套"结构化问诊"流水线:

结构化问诊界面截图


模式库卡片截图
阶段一(发现问题)产出: 诊断报告 + 同类产品证据截图 + 根因分析
回答的问题:"我怎么用规则锁住设计意图?"(本文重点预告,完整内容见下篇)
当设计师发现语义断层后,传统做法是:
Schema-As-Code(把设计规范写成代码格式的规则文件) 的做法是:
规则文件示例(ERR-001):
intent_id: "ERR-001"
semantic_domain: "observational"
semantic_tokens:
error_severity:
fatal:
description: "系统级故障,对话上下文可能丢失"
visual_mapping:
color_token: "status.critical" # 语义令牌:定义这个颜色代表"致命状态"
motion_token: "pulse.red.urgent" # 语义令牌:定义这个动效代表"紧急"
icon_token: "alert.octagon" # 语义令牌:定义这个图标代表"危险"
user_action:
- label: "刷新页面"
action: "refresh"
- label: "导出历史"
action: "export_history"
llm_constraints:
- "必须明确告知用户对话上下文可能已丢失"
- "禁止仅显示'出错了'等模糊文案"
transient:
description: "网络抖动,系统可自动恢复"
visual_mapping:
color_token: "status.neutral" # 语义令牌:定义这个颜色代表"中性状态"
motion_token: "spinner" # 语义令牌:定义这个动效代表"加载中"
icon_token: "loader" # 语义令牌:定义这个图标代表"等待"
user_action:
- label: "等待自动恢复"
action: "wait"
llm_constraints:
- "禁止红色背景(避免情绪过载)"
- "必须显示自动重试进度"
retryable:
description: "请求频率已达上限"
visual_mapping:
color_token: "status.warning" # 语义令牌:定义这个颜色代表"警告状态"
motion_token: "none" # 语义令牌:定义这个动效代表"静态"
icon_token: "clock" # 语义令牌:定义这个图标代表"限时"
user_action:
- label: "等待倒计时"
action: "wait_countdown"
- label: "升级套餐"
action: "upgrade"
llm_constraints:
- "必须显示剩余等待时间"
- "必须提供升级/扩容路径"
degraded:
description: "部分功能可用,可继续生成"
visual_mapping:
color_token: "status.info" # 语义令牌:定义这个颜色代表"信息状态"
motion_token: "none" # 语义令牌:定义这个动效代表"静态"
icon_token: "info.circle" # 语义令牌:定义这个图标代表"提示"
user_action:
- label: "继续生成"
action: "continue"
- label: "简化问题重试"
action: "retry_simplified"status.critical 是语义令牌(Semantic Token),定义"这个颜色在这个场景下代表致命状态"。完整的语义令牌体系(status.* / phase.* / boundary.* / action.*)见契约书写规范。
关键设计: 一份规则文件,编译为四种消费格式:

契约库界面截图
阶段二(写出规则)产出: 规则文件 + 多格式编译输出
回答的问题:"我怎么证明规则真的防住了语义漂移?"
三层验证工具:

语义分级器界面截图

A/B 对比截图
验证指标:

阶段三产出: 验证报告 + 返工率数据 + 可复用的验证工具
这是被问得最多的问题:"我不会写代码,能参与这个方法吗?"
答案是:不仅能,而且正因为不会写代码,你才是最适合写规则文件的人。
会写代码的人,看到问题后会直接去写脚本、搭平台,结果卷进了工程实现层,和 DevUI HMC / v0 竞争。
不会写代码的人,被迫站在"意图层",只关心"这个场景下必须表达什么语义、不能突破什么边界",而不关心"用什么框架实现"。
规则文件的本质是"设计意图的翻译",不是"代码实现"。
intent_id: "ACT-001"
semantic_domain: "transactional"
semantic_tokens:
destructive_action:
description: "不可逆的数据销毁操作"
# 语义令牌:定义视觉元素的语义含义
visual_mapping:
color_token: "status.critical" # 语义令牌:定义这个颜色代表"致命状态"
button_style: "outline_danger" # 语义令牌:定义这个按钮样式代表"危险空心描边"
icon_token: "alert.triangle" # 语义令牌:定义这个图标代表"警告"
# 不可变边界:绝对不能突破的红线
immutable_boundaries:
- boundary_type: "safety"
rule: "禁止直接执行删除操作而不显示二次确认"
violation_action: "block"
- boundary_type: "safety"
rule: "禁止将删除按钮设计为普通主按钮样式"
violation_action: "block"
# LLM 约束:AI 生成内容时必须遵守的规则
llm_constraints:
- "必须包含二次确认弹窗"
- "文案必须明确说明'此操作不可恢复'"
- "必须提供取消选项,且视觉权重不低于确认按钮"
- "禁止在二次确认弹窗中使用'确认'等模糊文案,必须使用'确认删除'"
# 用户行动:与后果级别匹配的操作
user_action:
primary:
label: "确认删除账户"
action: "confirm_delete"
requires_input: true # 要求输入账户名确认
input_field: "account_name"
secondary:
label: "取消"
action: "cancel"
visual_weight: "equal" # 视觉权重与主按钮同等这段YAML规则文件里:
只有设计师的意图:"删除按钮必须是红色空心,必须有二次确认。"
前端工程师拿到这份规则,可以翻译成 Tailwind、Material UI、DevUI 或任何框架。规矩是跨框架的。
Schema-As-Code(把设计规范写成代码格式的规则文件)的价值不止于技术,更在于组织经济。

总成本 = 设计意图在跨角色传递中不断失真,反复修复。

总收益 = 设计意图从"人传人的方言"变成"机器可读的普通话"。
在AI生成界面的时代,设计师的核心竞争力不是"会不会写代码",
而是:"能不能把设计意图翻译成机器可读的规则,让AI在生成内容之前就知道什么不能说、什么不能做。"
这个角色:
而规则文件就是这个翻译层的载体。

Design Token 定义"颜色是什么"(如 #EF4444),语义令牌定义"颜色代表什么"(如 status.critical)。Schema-As-Code 消费 DESIGN.md 的视觉定义,但约束的是语义映射关系。
本文是 Schema-As-Code(把设计规范写成代码格式的规则文件) 体系的总纲与预告。
接下来将发布《阶段二:设计师作为"语义翻译者":当 AI 生成界面时,我怎么用规则锁住设计意图》,深度展开:
如果你也在经历"AI 生成的界面偏离设计意图"的困扰,欢迎关注这个系列。
AI 时代的设计工作流正在重构。
不是"设计师会不会被 AI 替代"的问题,而是"设计师在 AI 工作流中扮演什么新角色"的问题。
Schema-As-Code(把设计规范写成代码格式的规则文件) 给出的答案是:
设计师不需要写代码,但需要写"规矩",把设计意图翻译成机器可读的规则,成为 AI 生成界面的上游约束层。
这不是一个工具,是一个方法论。
不是替代任何现有工具,是所有工具的上游约束。
