Spec-Driven UI 与 AI 协同设计

共 17 题
📑 题目列表 17 题
#
★★★

1. 用 JSON Schema 定义组件规格,props 类型、枚举与必填约束如何驱动运行时校验、文档生成与 AI 生成约束?

用 JSON Schema 定义组件规格时,props 的类型、枚举与必填约束是如何同时驱动运行时校验、文档生成与 AI 生成约束的?

  • JSON Schema 作为单一事实源描述组件 props 契约
  • 类型、枚举、必填约束的声明方式与校验语义
  • 校验器、文档生成器与 AI 提示词三路消费方的协同

JSON Schema 用 type(string/number/boolean/object/array)、enum、required 等关键字把组件 props 契约声明式地描述出来,这份规格成为"单一事实源",可被多个消费方复用。运行时侧,前端用 Ajv 或 Zod(通过 zod-to-json-schema 互转)编译 schema 校验传入的 props,非法值在渲染前被拦截,开发环境还能给出精确的错误路径;文档侧,遍历 schema 的 properties 自动生成 Storybook controls、API 表格与 props 类型提示,保证文档与实现永不漂移;AI 侧,把 schema 序列化进 prompt,让模型只能产出符合契约的 props 与调用方式,显著抑制幻觉字段。工程上通常将 schema 收敛为组件库公共元数据,一次定义、多处消费,实现"校验、文档、生成"三处口径一致。

本题的得分点是"单一事实源"思维:传统做法把类型(TS)、文档(MDX)、校验(手写)分散在三处,必然漂移;JSON Schema 让一份声明式契约同时喂给校验器、文档生成器与 AI 提示词,正是 Spec-Driven UI 的核心骨架。回答时按"运行时校验、文档生成、AI 约束"三条消费路径展开即可。

const buttonSpec = {
  type: "object",
  additionalProperties: false,
  properties: {
    variant: { type: "string", enum: ["primary", "secondary", "ghost"] },
    disabled: { type: "boolean", default: false },
    label: { type: "string", minLength: 1 },
  },
  required: ["label"],
};
import Ajv from "ajv";
const validate = new Ajv().compile(buttonSpec); // 运行时校验
// 文档侧:遍历 properties 生成 Storybook controls 与 API 表格
// AI 侧:将 buttonSpec 注入 prompt,约束模型只能产出契约内的 props
#
★★

2. Spec-Driven UI(规格驱动 UI)的工程范式,从 PRD → Design Spec → Component Spec → Generated Code 的工作流如何重塑前端开发?

Spec-Driven UI 的工程范式从 PRD 到 Design Spec、Component Spec 再到 Generated Code,这条工作流是如何重塑前端开发的?

  • 四阶段流水线中各环节的产出物与验收标准
  • 规格先行如何把"实现后评审"变为"规格后评审"
  • 对角色分工、返工成本与交付节奏的影响

Spec-Driven UI 把开发流程重排为"先定规格、后写实现":PRD 明确业务目标与用户故事,Design Spec 用设计令牌、组件清单与交互规则把视觉还原成可机器读取的描述,Component Spec 用 JSON Schema/TypeScript 类型定义 props、事件与状态契约,Generated Code 再由人写或 AI 生成并逐层校验。重塑体现在三方面:一是评审前移,设计与契约在写码前即可评审,缺陷成本从"实现后返工"降为"文档修改";二是 AI 可介入,规格本身就是结构化 prompt,生成代码被规格约束在契约内;三是交付物分层,设计、接口、实现解耦,组件可被多个项目按规格复用。前提是规格维护本身要投入成本,过细的规格在小项目里会拖慢节奏。

本题考察对"规格驱动"工作流的整体把握,不是背名词。答题要点是讲清每个阶段的产出物、评审如何前移、AI 如何被规格约束,以及规格粒度需要按项目规模权衡——这是工程判断力所在。

#
★★

3. Storybook 8 + Chromatic + AI Codegen 的视觉与代码一致性闭环,如何用视觉回归保障 AI 生成组件的稳定性?

Storybook 8 结合 Chromatic 与 AI Codegen 如何形成视觉与代码的一致性闭环?视觉回归是怎样保障 AI 生成组件稳定性的?

  • Storybook 作为组件渲染与测试基座的作用
  • Chromatic 的像素级视觉回归与基线管理机制
  • AI 生成代码接入快照、回归、修复的 CI 闭环

闭环的核心是"生成即验证":AI Codegen 产出的组件先被渲染进 Storybook 的 stories,Chromatic 对每个 story 截图并与基线对比,像素差异(如布局偏移、颜色偏差、未加载字体)会标记为待审变更,人工确认后成为新基线。这样 AI 生成的视觉结果在合入前就经过"快照、diff、评审、定基线"四步,视觉回归像单元测试一样守护组件稳定性。工程上常把 Chromatic 的 check 挂进 PR 的 CI 门槛,AI 生成代码不通过视觉对比不得合并,并将回归失败信息回传给生成器做修复提示,形成人机协同的稳定闭环。

本题要点是把"AI 生成组件不稳定"的问题转化为"可自动验证"的问题:Storybook 提供渲染基座,Chromatic 提供像素级 diff 与基线管理,CI 把验证变成硬门槛。答出"基线—diff—评审—更新基线"的循环即抓住闭环本质。

#
★★

4. Spec-Driven UI 中"规格文件"如何组织(JSON Schema/组件规格),如何驱动生成与校验?

Spec-Driven UI 中"规格文件"应如何组织?JSON Schema 与组件规格如何驱动代码生成与校验?

  • 规格文件的目录结构与单一来源原则
  • JSON Schema/TypeScript 类型作为组件契约的表达
  • 生成器与校验器对规格的消费方式

规格文件按"单一事实源、分层引用"组织:顶层是 design-tokens(颜色、间距、字体),中间层是组件规格目录(每个组件一个 spec 文件,定义 props、事件、插槽与状态),引用关系用 JSON Schema 的 $ref 链接 token 文件,避免重复定义。驱动生成时,生成器读取 spec 产出组件骨架、类型定义与 story;驱动校验时,运行时用 Ajv 校验 props,构建期用类型检查,Storybook 里用 stories 做渲染冒烟。组织要点:规格文件应与应用代码分离存放(如 spec/ 目录),版本化并与组件一一对应;修改规格后生成与校验链路自动重跑,保证规格始终领先于实现。

本题考察规格文件的落地形态,回答要具体:目录如何分、token 如何被引用、生成器与校验器如何消费。能说出"规格目录与应用代码分离、$ref 复用 token、spec 驱动 story 生成"就证明有实操经验。

{
  "$schema": "http://json-schema.org/draft-07/schema#",
  "type": "object",
  "properties": {
    "color": { "$ref": "tokens/color.schema.json#/$defs/colorToken" },
    "size": { "$ref": "tokens/space.schema.json#/$defs/spaceScale" }
  }
}
#
★★

5. Design Tokens(W3C Design Tokens Community Group 规范)与 AI 生成组件的样式一致性如何工程保障?

W3C Design Tokens Community Group 规范如何与 AI 生成组件协作?样式一致性靠什么工程手段保障?

  • Design Tokens 的规范化描述(名称、类型、值、分组)
  • Token 与 CSS 变量/样式生成的映射链路
  • 对 AI 生成代码的约束与一致性校验方式

W3C Design Tokens Community Group 规范(DTCG 规范)用 JSON 结构化描述设计令牌:每个 token 含名称、类型(color/dimension/typography 等)、值及分组(如 color.primary.500),并可携带主题与引用关系。工程上把 tokens.json 作为唯一视觉来源,经构建工具(如 Style Dictionary、Tokens Studio)转译成 CSS 变量、SCSS 或 Tailwind 主题,UI 代码只消费变量不写死色值。对 AI 生成组件,把 token 清单与"仅允许使用变量"的约束写进 prompt,生成后用静态检查(禁止硬编码颜色/字号)与视觉回归双保险,AI 输出偏离 token 即被打回。这样设计变更只需改 tokens.json,全站组件与 AI 生成物同步更新。

答题主线是"规范化 token + 转译工具 + AI 约束 + 静态/视觉双重校验"四层保障。提到 DTCG 规范的 JSON 结构与 Style Dictionary 转译即可体现专业性,再讲清"AI 只用变量、硬编码即失败"的约束策略。

{
  "color": {
    "primary": { "500": { "type": "color", "value": "#1677ff" } }
  },
  "space": { "md": { "type": "dimension", "value": "16px" } }
}
#
★★

6. shadcn/ui + Radix UI 作为 AI 友好组件库的优势,复制即可用、无运行时依赖、类型优先

shadcn/ui 与 Radix UI 作为 AI 友好组件库,其"复制即可用、无运行时依赖、类型优先"的优势是如何体现的?

  • shadcn/ui 的源码分发模型与普通 npm 包的差异
  • Radix UI 的无样式原语(unstyled primitives)设计
  • 类型优先对 AI 生成与类型检查的收益

shadcn/ui 不是 npm 依赖而是"源码复制"分发:通过 CLI 把组件源码直接拷贝进项目,代码归你所有、可随意修改,且无运行时依赖(只在开发期用到类库与工具),构建产物干净、升级不受包版本绑架。Radix UI 提供无样式、可访问性完备的原语(Dialog、Dropdown、Tooltip 等),shadcn/ui 在其上套 Tailwind 样式,实现"交互逻辑与视觉完全解耦"。类型优先体现在完整导出的 TypeScript 类型(props、variant、polymorphic 的 asChild)让编辑器提示、编译器校验与 AI 补全都基于同一套类型契约。对 AI 而言,复制进项目的代码就是最佳上下文:模型可读全量源码做精准修改,而不是面对黑盒 npm 包,生成结果天然贴合项目现有风格与类型。

本题要抓住"分发模型差异"这一根本:shadcn/ui 是源码进项目而非包进 node_modules,由此衍生出可改、无运行时依赖、类型完整三个优势,最后落到"AI 可读源码即最佳上下文"。能对比传统组件库讲清这一点,回答就立住了。

#
★★

7. AI 生成 UI 代码的"设计令牌一致性"如何用 Design Tokens 约束?

AI 生成 UI 代码时,"设计令牌一致性"如何通过 Design Tokens 进行约束?

  • Token 命名体系作为生成约束注入 prompt
  • 禁止硬编码色值/间距的静态检查手段
  • token 变更后的全量同步更新机制

约束分三层:第一层是生成前约束,把完整 token 清单(color、space、radius、font 的语义化名称与用途说明)写进系统提示词,要求 AI 一律以 var(--token-name) 或语义化 token 名引用样式,并在示例中给出正确写法;第二层是生成后校验,用 ESLint 自定义规则或 Stylelint 禁止十六进制色值、魔法数字间距等硬编码,CI 中不通过即构建失败;第三层是回归保障,视觉测试对 AI 生成组件截图并与 token 主题下的基线比对,防止"值对但上下文错"。token 变更时只需更新 tokens.json 并重跑构建,AI 生成物与手写代码同步更新,保证全站一致。

回答按"生成前约束、生成后静态校验、视觉回归兜底"三阶段展开最清晰。核心是"让 AI 没有机会写错"而不是"事后人工挑错":prompt 给清单、规则禁硬编码、测试验结果,三层缺一不可。

/* 允许:语义化 token */
color: var(--color-primary-500);
/* 禁止:硬编码 */
color: #1677ff;
#
★★

8. 如何评估 AI 生成前端代码的可维护性(可访问性、性能、可测试性)?

应从哪些维度评估 AI 生成前端代码的可维护性?可访问性、性能与可测试性分别如何考察?

  • 可访问性:语义结构、键盘操作与 aria 属性
  • 性能:包体、渲染开销与加载路径
  • 可测试性:可注入依赖、稳定选择器与测试友好结构

评估 AI 前端代码的可维护性要落到三个可自动化考察的维度:可访问性上检查语义标签是否用对(按钮是 button 而非 div+onclick)、键盘是否可达、弹层焦点是否管理、是否依赖 aria-label 掩盖结构缺陷,用 axe-core 批量扫描是性价比最高的手段;性能上考察产物大小(是否整库引入、有无 tree-shaking 障碍)、列表是否全量渲染、图片有无懒加载与尺寸约束,用 Lighthouse 与打包分析器量化;可测试性上检查组件是否依赖全局状态与随机值、选择器是否稳定(不用索引定位)、副作用是否可从外部注入,直接决定单元测试与组件测试能不能写。可维护性评估应固化为流水线中的自动检查与人工 review 清单,而非一次性评审。

答题框架是"三个维度 + 可自动化的度量手段":a11y 用 axe、性能用 Lighthouse/打包分析、可测试性看依赖注入与选择器稳定性。能说出每个维度的具体工具与检查项,说明不是空谈概念。

#
★★

9. Spec-Driven 开发,从接口契约到 UI 的自动化?

Spec-Driven 开发中,从接口契约(API Contract)到 UI 是如何实现自动化的?

  • OpenAPI/GraphQL Schema 作为接口契约单一来源
  • 契约驱动生成客户端类型、请求封装与 mock 数据
  • 契约变更对 UI 类型与 mock 的联动影响

接口契约(OpenAPI、GraphQL Schema、tRPC 类型)作为后端与前端共享的单一事实源:前端用 openapi-typescript、graphql-codegen 等工具从契约生成请求客户端、类型定义与 hooks,消除手写接口层;mock 层用 MSW 读取同一契约生成响应数据,开发期与联调期前端完全不依赖后端可用性。契约变更时,类型错误在编译期暴露,mock 数据结构同步更新,UI 层的类型安全由代码生成保证。Spec-Driven 在此的自动化闭环是"契约 → 类型/客户端/mock 三件套 → UI 消费",任何一环都不再手写,接口漂移从运行时问题前移到编译期问题。

本题关键词是"契约驱动生成",要点是三类自动化产物(类型、客户端、mock)都源自同一契约,并把"手写接口层"消灭掉。能顺带讲出 MSW 让前端在契约确定后即可并行开发,是加分项。

# 从 OpenAPI 契约生成类型安全的客户端
npx openapi-typescript api/openapi.json -o src/api/schema.d.ts
#
★★

10. AI 与 Spec 的闭环,从设计令牌到代码生成?

AI 与 Spec 的闭环是如何运转的?从设计令牌到代码生成的完整链路是怎样的?

  • 设计令牌与组件规格作为 AI 的生成上下文
  • 生成结果经校验反馈回规格与基线的闭环
  • 人工在闭环中的审核与规格演进角色

闭环链路是"规格 → 生成 → 校验 → 反馈 → 规格演进":起点是设计令牌与组件规格(props、状态、约束),它们作为结构化上下文注入 prompt;AI 据此生成组件代码与 story;生成物进入自动校验——类型检查、lint、axe 可访问性扫描、视觉回归——失败信息回流给生成器或开发人员修正;通过的代码合入后,新组件及其 story 又成为后续生成的参考样例,规格基线随之演进。人工在环中负责规格评审、基线与异常确认,不负责逐行审查重复劳动。这个闭环的价值在于每次生成都被规格约束、被校验把关、其结果又反哺规格,系统越用越一致。

答题要用"环"的结构讲完整链路,重点是"生成结果反哺规格"这一步:通过的样例成为新参考、失败的样例成为约束补充,闭环才有迭代价值。能画出"规格→生成→校验→反馈→规格"的循环,即得高分。

#

11. Storybook 与 AI 结合做组件级回归与视觉测试的实践?

Storybook 与 AI 结合做组件级回归与视觉测试的实践要点有哪些?

  • Storybook 作为组件级测试基座(stories 即测试用例)
  • 视觉回归工具与交互测试(play function)的分工
  • AI 在用例生成与差异归因中的应用

实践要点有三:一是把 stories 当测试用例,每个组件至少覆盖默认态、边界态与错误态,Storybook 8 的 play function 可模拟点击、输入后再截图,让视觉测试覆盖交互后状态;二是用 Chromatic 或 loki 做像素级回归,基线管理、跨浏览器截图与差异评论;三是 AI 的介入点——用 AI 批量生成边界 story 与 play 脚本,对视觉 diff 结果做初步归因(布局偏移/字体加载/动画时序),把可疑变更摘要给人工评审。工程落地时把 story 覆盖率与 Chromatic 状态进 CI,组件级回归成为合入门槛。

答题抓住"stories 即用例、play 覆盖交互态、视觉回归管像素、AI 做生成与归因"四件事。区分开交互测试(play)与视觉测试(截图 diff)的职责是本题关键。

#

12. AI 生成 UI 的规格约束,设计规范作为 prompt?

把设计规范作为 prompt 来约束 AI 生成 UI,具体应如何组织?有哪些要点?

  • 设计规范转译为 prompt 的内容组织(token、组件规则、反例)
  • 系统提示词与少量示例(few-shot)的结合
  • 输出结构化与约束失败时的兜底校验

把设计规范转译为 prompt 的关键是结构化组织:系统提示词里放入三部分——设计令牌清单(颜色/间距/字号及其语义)、组件规则(本项目的按钮、表单、弹层交互约定)、禁用清单(禁止硬编码色值、禁止 div 模拟按钮等反例)。配合 few-shot 给出 2-3 个"输入需求 → 符合规范代码"的完整样例,模型模仿的稳定性远高于纯文字描述。输出侧要求 AI 返回结构化结果(组件代码 + 使用的 token 清单 + story),便于后续自动校验 token 是否越界。规范作为 prompt 不是一次性的,需随设计迭代维护提示词版本,并把校验失败案例追加为反例。

本题考察"把隐性规范显式化为生成约束"的能力。回答覆盖"内容组织(令牌+规则+反例)、few-shot 示例、结构化输出、反例回流"四点即完整,重点是反例回流让提示词随实践演进。

系统提示词:你是该设计系统下的前端工程师。样式只能使用以下 token:
--color-primary-500 / --space-md / --radius-lg ...
禁止:十六进制色值、魔法数字、div 模拟按钮。
#

13. Spec 的版本管理与评审流程?

Spec(规格文件)的版本管理与评审流程应如何设计?

  • 规格文件的语义化版本(major/minor/patch)规则
  • 变更影响面分析与兼容性判断
  • 评审流程与生成/校验链路的联动触发

规格文件应与代码同仓同版本管理,采用语义化版本:破坏性变更(删除 prop、改变必填项、token 重命名)升 major,向后兼容新增(加可选 prop、加 token)升 minor,描述修正升 patch。变更流程上,先提交 spec 变更 PR 说明影响面(哪些组件、哪些消费方、是否破坏现有 API),评审关注兼容性、命名与一致性,合并后自动触发生成与校验链路重跑,生成代码与测试随之更新。关键实践是"spec 变更先于实现变更",并把规格变更记录进 changelog,让消费方(含 AI 生成器)能感知规格演进。

本题考点是"规格即代码"的管理意识:同仓、语义化版本、先 spec 后实现、变更触发全链路重跑。能讲出 major/minor/patch 的划分依据与评审关注点,回答即完整。

#

14. Spec-Driven 与组件测试的联动?

Spec-Driven 开发与组件测试如何联动?规格如何驱动测试的编写与维护?

  • 规格中的 props/事件契约映射为测试用例边界
  • 生成 story 与测试脚本的自动化
  • 规格变更驱动测试同步更新的机制

联动机制是"规格即测试蓝图":组件规格中声明的 props 类型、必填项、枚举与事件回调,直接映射为测试用例的边界条件——必填缺失、枚举越界、事件触发与载荷形状都是天然用例;story 也可由规格生成器自动产出,配合 play function 形成交互级测试。规格变更时,类型错误与生成的测试断言同时更新,保证测试不落后于契约;校验规则(如 zod schema)可被组件测试直接复用,实现"同一份规格既校验运行时又驱动测试"。工程上把"spec → story → 测试"的生成放进脚手架,让规格成为测试维护的唯一入口,避免测试与规格各写一套导致漂移。

本题得分点是"从规格推导测试用例边界":props 契约给出输入边界,事件契约给出交互断言,生成器让 story 与测试自动同步。答出"规格变更驱动测试同步更新、避免双写漂移"即抓住本质。

#

15. Spec 的自动化校验,设计稿与实现的 diff?

Spec 的自动化校验如何实现"设计稿与实现的 diff"?关键技术手段有哪些?

  • 设计稿 token 与实现样式值的映射对比
  • 截图级视觉对比与 DOM/CSS 级断言的分工
  • 差异分类(视觉/结构/语义)与人工复核阈值

设计稿与实现的 diff 分两个层次:样式值层,把设计稿(Figma)导出的 token 值与实现中的 CSS 变量取值对比,用脚本比对间距、颜色、圆角等数值是否一致,发现"用了 token 但值不同"这类硬伤;视觉层,用截图对比工具把设计稿渲染图与实现渲染图做像素 diff,辅以 DOM/CSS 断言(元素尺寸、字体加载状态)减少误报。差异需分类处理:像素级噪声(抗锯齿、字体渲染差异)设阈值自动忽略,结构级差异(布局偏移、缺失元素)必须人工复核。自动化校验的价值是把"设计走查"从周期性人工活动变成每次提交都执行的检查,设计回归成本大幅下降。

答题分"数值层比对 + 视觉层 diff + 差异分类"三层。关键认知是"像素 diff 不等于 bug":字体渲染与抗锯齿噪声需阈值与人工复核,回答中体现这种工程判断更显专业。

#

16. Spec 驱动的可访问性,规范中的无障碍约束?

在 Spec-Driven 开发中,可访问性约束应如何写进规格?规范中的无障碍约束有哪些形态?

  • 无障碍要求的结构化表达(属性、焦点、语义)
  • 规格中 a11y 检查项的自动执行方式
  • 无障碍契约的验收标准与回归保障

可访问性约束写进规格有三种形态:一是 schema 级约束,在组件规格中声明必填的无障碍属性(如 aria-label 对应字段必填、role 的允许枚举),运行时校验拦截缺失;二是规则级约束,把项目无障碍规范(焦点可见、键盘可达、对比度达标、prefers-reduced-motion 处理)写成检查清单,随规格文件维护;三是测试级约束,为每个组件生成包含 axe-core 扫描与键盘导航脚本的 story/测试,作为规格验收标准的一部分。规范还应收录反例——常见违规模式(div 按钮、无标签输入框)及其正确写法,作为 AI 生成与人工评审的共同依据。规格驱动的意义在于无障碍不再依赖个人自觉,而是与 props 校验同级的硬性验收项。

回答要点是"可访问性约束的三种形态:schema 必填属性、规则清单、自动化测试验收"。强调"无障碍成为规格验收的一部分、回归由 CI 保障"即是本题核心。

{
  "properties": {
    "label": { "type": "string", "description": "必填:供 aria-label 使用" }
  },
  "required": ["label"]
}
#

17. AI 生成组件的可访问性自动检查,将 axe 集成到生成流水线,a11y 失败自动修复提示与人工复核的分工?

如何将 axe 集成到 AI 生成组件的流水线中做可访问性自动检查?自动修复提示与人工复核如何分工?

  • axe-core 在生成流水线中的接入点(渲染后扫描)
  • 自动修复提示的生成方式(失败信息回喂 AI)
  • 自动化判定与人工复核的边界划分

集成方式:AI 生成组件后立即在测试环境渲染(Storybook 或 jsdom+axe-core),对每个实例执行全量规则扫描,把违规项(规则 ID、影响节点、修复建议)结构化回传给生成器或开发人员。自动修复的边界:确定性违规(缺失 aria-label、color-contrast 未达标、重复 id)可让 AI 依据失败信息自动修复并复扫,形成"生成→扫描→修复→复扫"循环;涉及语义判断的(role 选择是否恰当、焦点顺序是否符合业务流、自定义组件是否真需要复杂 ARIA)必须人工复核。分工原则是"机器判定的交给机器,语义判断的留给人":CI 中扫描结果必须全绿才能合入,但复杂交互组件额外要求人工无障碍走查记录。

本题考察"自动化与人工的边界感":axe 擅长确定性规则扫描,AI 修复也要限定在确定性违规内;role 语义、焦点序等业务判断才是人工复核点。能清晰划分边界是回答的核心得分点。

import { AxeBuilder } from "@axe-core/playwright";
const results = await new AxeBuilder(page).analyze();
// results.violations 回喂 AI 生成修复建议,复扫通过后才合入