ERR-001、PRO-001、BND-001 证明了语义漂移可被修复。但修复的"原材料"——Token 层——真的够用吗?
Design Token 改了名字,语义就能被机器理解了吗?
color-danger 对人类是"危险"的隐喻,对机器是"用红色"的指令。改名只动了命名风格,没动机器可执行的结构。
答案:不能
Style Token → Design Token → Semantic Token 的两次跃迁,每次都在增加机器可执行的信息维度。
答案:是
没有 Semantic Token 的结构挂载,编译管线无法生成 Prompt 前缀、JSON Schema、CI 规则。
答案:是
color-danger 改名三个月后的 bug
团队做了什么
花三个月把 color-red-500 改名为 color-danger。
评审会上展示了一张漂亮的 Token 映射表——"危险场景用 danger,成功场景用 success"。
所有人都觉得"语义化"完成了。
三个月后发生了什么
AI 生成的新界面出现 bug:
限流提示("请求过于频繁")被渲染成 color-danger 红色。
用户看到红色就刷新页面,以为系统崩溃——
其实只是等 30 秒自动恢复。
根因
color-danger 这个名字本身没问题。问题是:这个名字对机器来说仍然只是一个颜色值,它不携带"这个红代表不可恢复"的语义结构,也不携带"不能用在限流场景"的域约束。AI 生成工具看到 color-danger,只知道"用红色",不知道"这个红色在什么场景下合法、什么场景下非法"。
每次跃迁都增加了机器可执行的信息维度
样式令牌
color-red-500: "#EF4444"
设计令牌
color-danger: value: "#EF4444" description: "用于危险场景"
语义令牌
status.critical:
color_token: "status.critical"
motion_token: "pulse.red.urgent"
icon_token: "alert.octagon"
semantic_domain: "transactional"
cross_layer_ban: ["observational"]
behavior_constraint:
- "必须二次确认"
- "必须提供恢复路径"
Design Token vs 语义令牌:差别不是名字,是差异带来的能力
离散索引,连续约束:status.critical 经编译管线查表后展开
离散索引(像数据库主键)
status.critical
视觉方向
红色脉冲 + 八边形图标
行为约束
必须二次确认 + 必须提供恢复路径
文案约束
必须说明后果
机器防线 · 跨层禁止
observational / navigational / conversational 域下非法
同一组令牌,编译为 Prompt 前缀 / JSON Schema / CI 规则
Design Token color-danger 无法生成以上任何产物——它只有一个 description 字段,机器无法把"用于危险场景"翻译成可执行的校验规则。
没有令牌时,机器只看到 #EF4444;有令牌时,机器知道这是"系统故障"还是"删除按钮"
系统级故障,对话上下文可能丢失
🚨 消息流中断
对话上下文可能已丢失,建议刷新页面重新开始。
不可逆操作,数据将永久删除
⚠️ 删除账户
此操作不可恢复。请输入账户名确认。
💡 关键洞察:以前设计规范只规定"红色用在危险场景",但机器不知道"危险"有 10 种。Semantic Token 把"哪种危险"说清楚了——status.critical 和 action.destructive 可以共用同一种红色值 #EF4444,但携带完全不同的语义结构、域归属和行为约束。
同一 Prompt,Token 层不同,输出完全不同
Before · Design Token
🔴 请求过于频繁,请稍后再试
❌ 合规,但错误。color-danger 无可指责,但用户误解了后果。
After · Semantic Token
⏱️ 请求频率已达上限
请在 42 分钟后重试,或升级至 Plus 获得更高限额。
✓ 语义正确。AI 若选 status.critical,直接命中跨层禁止,CI 阻断。
status.critical 只能在 transactional 域使用,observational 域下非法
✓ 合法绑定
component: "Alert" context: "消息流中断" overlay: "transactional" color_token: "status.critical"
✕ 非法绑定 — 被阻断
component: "Alert" context: "限流提示" overlay: "observational" color_token: "status.critical" # ← 跨层非法
[CI 阻断] error-severity-cross-layer
Token: status.critical
Used in: observational domain (limit_rate_alert)
Expected: status.warning (yellow + clock)
Action: BLOCK — PR cannot be merged
⚠️ Design Token color-danger 没有 cross_layer_ban 结构,机器无法判定"这个红色在这个场景是否合法"——它只能看到"用红色",看不到"不能在这里用红色"。
同一根因(Token 只有色值、没有语义结构),在五个角色身上长出的坑各不相同
设计师
"新增了 error 状态也直接用红色,两周后走查才发现字典里根本没这个级别"
根因:字典是文档不是代码
解法:字典 YAML 化,未注册编译阻断
前端 / AI 工程师
"Token 只告诉我颜色,没告诉我这个场景该用哪个语义级别"
根因:缺少 semantic_domain
解法:color_token + semantic_domain 联合定义
DesignOps
"各产品线的术语版本对不上,同一个词三套说法"
根因:没有统一术语源
解法:字典作为组织级唯一真相源
语义翻译设计师
"模式库维护成本高,每次诊断都从零开始"
根因:Token 没有复用
解法:从字典复用 Token,快速匹配
管理层
"语义一致性投入多少、产出在哪,看不到"
根因:缺少度量基准
解法:字典标准化后,覆盖率可量化
LLM 没有"语义权重"的概念,它只有"词频统计"
告警文案中 "Critical" 被替换为"严重",情绪权重降低
值班员延迟响应,故障扩大
根因:同义词防火墙缺失
"Data Loss Risk" 被改写为"请稍后重试",真实后果被掩盖
用户误以为只是临时抖动
根因:语义降级未被拦截
诊断提示的严重程度表述前后不一
用户误判紧急程度
根因:语义令牌未锚定
验证项与当前状态
Token 层差异确认之后
语义令牌表 → 语义字典 → 契约库 → 编译管线 → 验证闭环