当设计系统有了自己的执行官:Agent 化设计系统,让 AI 理解并执行设计约束规则

发布时间:2026/7/9 9:27:59

当设计系统有了自己的执行官:Agent 化设计系统,让 AI 理解并执行设计约束规则 当设计系统有了自己的执行官Agent 化设计系统让 AI 理解并执行设计约束规则一、深度引言与场景痛点设计系统的规范像一本法律条文——每个组件有接口约束Props 类型与默认值每个 Token 有使用约束只能用在语义层级而非原始层级每个交互有行为约束按钮的 loading 状态禁止重复点击。条文写得再清楚执行仍然依赖人的自觉——开发者可能忽略约束直接引用原始 Token设计师可能违反间距规则手动调整。Agent 化设计系统给法律条文配了一位执行官——AI Agent 不仅能理解规范条文还能在开发流程中主动执行约束规则。当开发者提交一段代码Agent 自动检查是否符合设计系统约束当设计师修改一个 TokenAgent 自动验证修改是否影响下游组件的合规性。从被动查阅规范到主动执行约束设计系统的治理方式从人自觉遵守升级为Agent 自动检查。二、底层机制与原理深度剖析flowchart TD A[设计系统约束规则库] -- B[规则解析层] B -- B1[接口约束Props 类型与默认值] B -- B2[使用约束Token 语义层级引用] B -- B3[行为约束交互状态转移规则] B -- B4[视觉约束间距和颜色 Token 白名单] B1 B2 B3 B4 -- C[Agent 执行层] C -- C1[代码提交时自动检查约束合规] C -- C2[设计修改时自动验证下游影响] C -- C3[组件开发时自动生成合规代码] C -- C4[异常时自动生成修复建议] C1 C2 C3 C4 -- D[执行报告层] D -- D1[合规报告哪些约束被违反] D -- D2[影响分析修改会影响哪些组件] D -- D3[修复补丁自动生成合规代码]Agent 的三种执行模式拦截模式代码提交前检查违规则阻断合并通知模式设计修改后分析通知受影响的组件维护者生成模式组件开发时辅助自动生成符合约束的代码三、生产级代码实现与最佳实践约束规则定义格式# design-system-constraints.yaml constraints: # Token 使用约束组件必须引用语义 Token token_hierarchy: rule: 组件样式必须引用语义级 Token--color-primary禁止直接引用原始级 Token--blue-500 check: scan all component CSS for hardcoded color values not in token whitelist severity: critical fix: replace hardcoded value with semantic token reference # 间距 Token 白名单约束 spacing_whitelist: rule: 间距值只能使用定义的 Token 值4/8/12/16/24/32/48/64px check: scan CSS for spacing values not in whitelist severity: moderate fix: replace with closest token value # 交互状态约束 button_states: rule: Button 组件必须覆盖 idle/hover/active/loading/disabled 五个状态 check: verify Button component covers all 5 states severity: critical fix: add missing state definitions # 无障碍约束 aria_required: rule: 所有交互元素必须有 aria-label 或文字内容 check: scan for interactive elements without aria-label or text content severity: critical fix: add aria-label attributeAgent 执行引擎// scripts/design-agent/constraint-executor.ts import { OpenAI } from openai; import fs from fs; interface ConstraintResult { rule: string; violations: Violation[]; severity: string; fixSuggestions: string[]; } interface Violation { file: string; line: number; description: string; currentValue: string; expectedValue: string; } async function executeConstraints( constraintsPath: string, componentDir: string ): PromiseConstraintResult[] { const constraints parseConstraints(constraintsPath); const results: ConstraintResult[] []; for (const constraint of constraints) { // 执行规则检查 const violations await checkConstraint(constraint, componentDir); // 生成修复建议 const fixes violations.length 0 ? await generateFixes(constraint, violations) : []; results.push({ rule: constraint.rule, violations, severity: constraint.severity, fixSuggestions: fixes }); } return results; } async function checkConstraint( constraint: Constraint, dir: string ): PromiseViolation[] { const openai new OpenAI({ apiKey: process.env.OPENAI_API_KEY }); // 收集组件代码 const files fs.readdirSync(dir, { recursive: true }) .filter(f f.endsWith(.tsx) || f.endsWith(.css)); const codeSnippets files.map(f { const content fs.readFileSync(fs.join(dir, f), utf-8); return ${f}:\n${content.substring(0, 2000)}; }).join(\n---\n); const response await openai.chat.completions.create({ model: gpt-4o, messages: [ { role: system, content: 你是设计系统约束检查 Agent。根据规则检查代码违规。 }, { role: user, content: 规则${constraint.rule}\n检查方法${constraint.check}\n代码${codeSnippets} } ], response_format: { type: json_object }, max_tokens: 4000 }); return JSON.parse(response.choices[0].message.content || {}).violations || []; } async function generateFixes(constraint: Constraint, violations: Violation[]): Promisestring[] { const openai new OpenAI({ apiKey: process.env.OPENAI_API_KEY }); const violationSummary violations.map(v ${v.file}:${v.line} — ${v.description}当前${v.currentValue}期望${v.expectedValue} ).join(\n); const response await openai.chat.completions.create({ model: gpt-4o, messages: [ { role: system, content: 生成修复代码补丁。 }, { role: user, content: 规则${constraint.rule}\n修复方向${constraint.fix}\n违规项${violationSummary} } ], max_tokens: 3000 }); return [response.choices[0].message.content || ]; }CI 集成# .github/workflows/design-agent.yml name: Design Agent Constraint Check on: pull_request: paths: [src/components/**, src/styles/**] jobs: constraint-check: runs-on: ubuntu-latest steps: - uses: actions/checkoutv4 - run: npm ci - run: node scripts/design-agent/constraint-executor.ts # 有 critical 违规时阻断合并 - run: node scripts/design-agent/block-if-critical.ts四、边界分析与架构权衡Agent 检查的不确定性。大模型对约束规则的检查可能遗漏某些违规——比如 Token 层级约束的检查模型可能只扫描了部分文件。确定性规则白名单检查应该用代码扫描而非大模型大模型只处理需要语义理解的规则比如间距值是否在语义上应该使用 Token。修复建议的验证成本。Agent 生成的修复补丁需要开发者验证——自动修复可能引入新的违规或改变组件的意图行为。修复建议只作为参考而非自动执行开发者确认后才合并。约束规则的维护成本。规则库需要随设计系统演进持续更新——新 Token 加入后白名单要扩展新交互规范发布后状态约束要调整。规则库的维护是设计决策而非技术决策需要设计师参与定义而非开发者自行添加。Agent 的执行频率。拦截模式在每次 PR 合并前执行执行频率可控。通知模式在设计修改后执行可能触发大量下游影响分析——一个基础 Token 的修改可能影响 50 个组件每个组件的影响分析需要一次大模型调用。成本控制只对关键 Tokenprimary color、spacing-4触发影响分析次要 Token 修改只在合并时检查。五、总结Agent 化设计系统从被动规范查阅升级为主动约束执行——AI Agent 不仅理解规范条文还在开发流程中自动检查合规性、分析修改影响、生成修复建议。三种执行模式——拦截、通知、生成——覆盖了规范执行的不同场景。Agent 的核心价值是让约束不只是条文而是执行力量——规范写得再清楚没有执行机制就只是建议而非约束。Agent 的自动检查让约束成为 CI 的一部分违规的代码无法合并违规的修改自动通知受影响方合规的代码自动生成。执行不是万能的——大模型的检查有不确定性修复建议需要验证约束规则需要维护。Agent 是治理的辅助而非替代——它加速检查、减少遗漏、提供修复方向但决策权始终在人。Agent 执行 人工决策才是设计系统治理的正确节奏。

相关新闻