Schema-As-Code 商业全景
当 AI 生成界面时,谁在守住设计意图?
当 AI 生成界面时
谁在守住设计意图?
谁在守住设计意图?
Design-to-Code 工具解决了"怎么写代码",但漏了一层更关键的翻译:设计意图 → AI 生成内容。
Schema-As-Code 补的就是这一层。
DesignOps · 规范同步
以前:规范写在语雀/Confluence,人工 @ 全员,开 3 场同步会,2 周后走查发现 3 个产品没改对。
现在:规范写成 Executable Design Spec(YAML),Git Diff 自动触发影响面分析,下游 Prompt 模板自动重编译。
2周 → 0.5天
规范同步时间
Design System · Token 语义
以前:Design Token 管住了颜色,但 AI 把 "Critical" 写成 "严重",把告警红色用在成功提示上。
现在:Semantic Token = 视觉令牌 + 语义约束 + LLM 边界规则。AI 生成前自动匹配场景。
20% → 100%
机器推演覆盖率
前端工程 · AI 返工
以前:前端 30% 时间在修 AI 的语义错误(Critical→严重、删除按钮→普通样式、二次确认→遗漏)。
现在:语义约束前置拦截。前端只收"通过了约束检查"的代码,只修视觉和结构问题。
30% → 5%
AI 返工率
基础设施 · 错误分级
以前:ChatGPT 4 种错误共用红色,用户不知道"刷新一下就好"还是"对话已经丢了"。
现在:Fatal/Transient/Retryable/Degraded 自动语义分级,颜色是语义的结果,不是默认容器。
靠猜 → 明确
用户行动路径
核心洞察
所有 Design-to-Code 工具(DevUI HMC、v0、Claude Code、Figma MCP)都在解决形态问题(长什么样、怎么写代码)。
Schema-As-Code 解决的是语义问题(意味着什么、不能突破什么)。
我不替代它们,我给它们提供一层上游约束——让 AI 生成的内容,在视觉层和工程层之前,先过一遍语义层。
Schema-As-Code 解决的是语义问题(意味着什么、不能突破什么)。
我不替代它们,我给它们提供一层上游约束——让 AI 生成的内容,在视觉层和工程层之前,先过一遍语义层。
场景 1:DesignOps — 规范同步
规范更新一次,DesignOps 同学要开几场会?以前靠人肉广播,现在靠 Git Diff。
YAML 协议
JSON Schema
LLM 输出
四层推演
界面渲染
ISI 编译响应:DesignOps 规范同步流水线
{
"status": "success",
"intent_id": "ALERT-001",
"version": "1.1",
"git_diff_trigger": true,
"downstream_sync": {
"tools": ["claude_code", "v0", "devui_hmc"],
"auto_compile": true,
"sync_time": "0.5h",
"manual_meetings": 0
},
"validation_summary": {
"total_rules": 3,
"prohibited_synonyms": ["严重", "危急", "紧急"],
"coverage": "100%"
}
}
场景 2:Design System — Token 语义
Design Token 管住了颜色,但管不了 AI 把 "Critical" 写成 "严重"。
YAML 协议
JSON Schema
LLM 输出
四层推演
界面渲染
ISI 编译响应:Semantic Token 场景约束
{
"status": "success",
"intent_id": "TOKEN-001",
"semantic_token": "status.critical",
"scene_validation": {
"system_alert": { "allowed": true, "visual": "red_pulse" },
"toast": { "allowed": false, "fallback": "status.success" }
},
"llm_constraints": [
"禁止在提示场景使用 status.critical",
"禁止将 Critical 降级为严重/紧急/危急"
],
"coverage": "100%"
}
场景 3:前端工程 — 高危操作
AI 生成一个页面,前端同学花 30% 时间在修什么?修语义错误。
YAML 协议
JSON Schema
LLM 输出
四层推演
界面渲染
ISI 编译响应:高危操作语义锁
{
"status": "blocked",
"intent_id": "DEL-001",
"action_type": "destructive",
"violations": [
"button_style != outline_danger",
"confirmation_step = false",
"consequence_text missing"
],
"auto_fix": {
"button_style": "outline_danger",
"confirmation_step": true,
"required_children": ["ConfirmDialog", "Alert"]
},
"frontend_savings": "2人天/100张图"
}
场景 4:基础设施 — 错误分级
ChatGPT 的四种错误状态,为什么共用同一种红色?
YAML 协议
JSON Schema
LLM 输出
四层推演
界面渲染
ISI 编译响应:错误语义分级映射
{
"status": "success",
"intent_id": "ERR-001",
"error_severity_mapping": {
"fatal": { "color": "status.critical", "motion": "pulse.red", "action": ["refresh", "export"] },
"transient": { "color": "status.neutral", "motion": "spinner", "action": ["wait"] },
"retryable": { "color": "status.warning", "motion": "none", "action": ["upgrade", "remind"] },
"degraded": { "color": "status.info", "motion": "none", "action": ["continue"] }
},
"user_guesswork": "eliminated",
"semantic_coverage": "100%"
}
场景 5:跨工具消费 — Intent Schema Interface
Schema-As-Code 是所有 Design-to-Code 工具的"上游约束层"。同一份 YAML 语义契约,自动编译为不同工具的专属约束格式。
核心问题:Design-to-Code 工具(Claude Code / v0 / DevUI HMC / Figma)解决了"怎么写代码/怎么画界面",但没有解决"AI 生成的内容是否偏离设计意图"。
Schema-As-Code 的解法:在 AI 生成内容之前,先注入语义约束。同一份 YAML 契约,编译为每个工具能消费的格式。
Schema-As-Code 的解法:在 AI 生成内容之前,先注入语义约束。同一份 YAML 契约,编译为每个工具能消费的格式。
🎯 核心洞察
所有 Design-to-Code 工具都在解决形态问题(长什么样、用什么组件、怎么写代码)。
Schema-As-Code 解决的是语义问题(这个组件在这个场景下意味着什么、不能突破什么边界)。
我不替代任何工具,我给它们提供一层上游约束——让 AI 生成的内容,在视觉层和工程层之前,先过一遍语义层。
Schema-As-Code 解决的是语义问题(这个组件在这个场景下意味着什么、不能突破什么边界)。
我不替代任何工具,我给它们提供一层上游约束——让 AI 生成的内容,在视觉层和工程层之前,先过一遍语义层。
ISI 接口响应:多工具编译结果
{
"isi_version": "1.0",
"intent_id": "DEL-001",
"semantic_domain": "transactional",
"compiled_outputs": {
"claude_code": {
"type": "prompt_prefix",
"format": "markdown",
"injection_point": "system_prompt",
"priority": "high"
},
"v0": {
"type": "component_rules",
"format": "json",
"auto_inject": true
},
"devui_hmc": {
"type": "skill_config",
"format": "yaml",
"skill_name": "vue-devui-practices"
},
"figma_mcp": {
"type": "design_lint",
"format": "json",
"severity": "ERROR"
}
},
"tool_coverage": 4,
"immutable_boundaries": 2
}