尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

设计规范AI化:用结构化Markdown构建机器可读的设计系统

设计规范AI化:用结构化Markdown构建机器可读的设计系统 1. 项目缘起当设计规范遇上AI我们到底在解决什么最近在跟几个产品团队做设计走查一个老问题又冒出来了新来的开发同学对着UI稿把本该是#333333的标题色用成了#666666按钮圆角从8px变成了4px间距系统更是乱成一锅粥。设计师气得跳脚开发也委屈——“规范文档几十页PDF我哪记得住啊” 这场景太熟悉了几乎每个追求体验一致性的团队都会遇到。设计规范这本应是提效和保质的“宪法”在实际协作中却常常沦为一座信息孤岛查阅成本高执行靠人肉记忆和自觉。与此同时AI正在席卷一切。从代码补全到UI生成AI助手似乎无所不能。但你会发现一个尴尬的现象当你让AI“基于我们的设计规范生成一个登录页”时它要么天马行空要么只能给出一个通用模板。原因很简单AI并不真正“理解”你的设计规范。它看到的规范文档和人类看到的没有区别——都是一堆需要被解析的、非结构化的文本和图片。颜色、字体、间距、组件状态……这些构成设计系统的原子在AI眼中只是一串模糊的字符而非可被精确调用和组合的“乐高积木”。这就是awesome-design-md这个开源项目试图破局的关键点。它的核心目标非常直接将人类可读的设计规范转化为机器尤其是AI可读、可理解、可执行的标准化数据。它不是另一个设计工具也不是一个在线的规范展示平台而是一座“翻译桥梁”。通过将规范以结构化的Markdown格式进行描述并辅以一套明确的元数据约定它让设计系统中的每一个元素都变得“可检索”、“可引用”和“可编程”。想象一下这个场景设计师在Figma中更新了主色板只需运行一个脚本对应的awesome-design-md文件便自动同步更新。随后这份文件可以被接入到开发侧CI/CD流程读取该文件自动生成或更新项目的CSS变量、Tailwind配置、甚至React组件的Props类型定义。AI侧你的内部AI助手无论是基于GPT还是其他模型在接到“做一个按钮”的指令时能精准地从这份结构化规范中提取颜色、圆角、字体、间距生成完全符合规范的代码或设计稿。文档侧基于同一份数据源动态生成始终最新的、可交互的线上设计文档站告别手动维护的滞后与错误。awesome-design-md解决的正是设计系统在“人机协同”时代的“最后一公里”问题——让规范不仅被人遵守更能被机器理解和运用从而实现从“静态文档”到“动态资产”的质变。接下来我们就深入拆解如何利用这个项目一步步搭建起这座连接设计与智能的桥梁。2. awesome-design-md 的核心一份给AI的“设计系统说明书”初次接触awesome-design-md你可能会觉得它“过于简单”——不就是用Markdown写文档吗但它的精妙之处恰恰在于在Markdown的简洁之上构建了一套严谨的、面向数据结构的约定。这份约定就是AI能“读懂”规范的前提。2.1 基础结构从零散到有序一个典型的awesome-design-md项目仓库结构清晰得像个教科书your-design-system-md/ ├── README.md # 项目总览与使用说明 ├── design-tokens/ # 设计原子Design Tokens │ ├── color.md │ ├── typography.md │ ├── spacing.md │ └── radius.md ├── components/ # 组件规范 │ ├── button.md │ ├── input.md │ └── modal.md └── patterns/ # 设计模式与页面模板 └── dashboard-card.md这个结构本身就在传递一个理念分层与抽象。最底层是design-tokens设计原子这是构成所有视觉样式的基础单元如颜色值、字体大小、间距尺度。中间层是components由Token组合而成的具体UI组件。上层是patterns描述组件如何组合以完成特定场景的交互。这种自底向上的结构非常符合AI从基础元素到复杂组合的理解逻辑。2.2 关键语法YAML Front Matter与结构化表格普通的Markdown文档AI只能做文本分析。而awesome-design-md通过两种方式注入了“结构化”的灵魂1. YAML Front Matter为文档定义元数据在每个Markdown文件的顶部用三条虚线---包裹的区域可以写入YAML格式的元数据。这是给AI的“导读”和“索引”。--- component: Button status: stable version: 1.2.0 figma_link: https://www.figma.com/file/xxx/Button storybook_link: https://storybook.example.com/?path/story/button--primary ---这段元数据明确告诉AI这是一个关于“Button”组件的文档它处于“稳定”状态版本是1.2.0相关的设计源文件在Figma可交互的示例在Storybook。AI在检索时可以快速通过这些键值对定位到准确信息。2. 结构化表格将属性定义标准化在描述组件属性时避免使用自由段落而是采用表格。这强制了信息的规整性。以button.md中描述按钮变体为例变量名 (Variant)描述使用场景CSS类名primary主要按钮视觉权重最高核心操作如“提交”、“确认”.btn-primarysecondary次要按钮非主要操作或与Primary按钮搭配.btn-secondaryghost幽灵按钮透明背景用于工具栏、卡片操作等非突出场景.btn-ghostdanger危险操作按钮删除、永久性破坏等操作.btn-danger对于AI来说解析一个结构清晰的表格远比从一段话中提取“我们有主要、次要、幽灵、危险四种按钮”要简单和准确得多。表格的每一列都定义了明确的语义变量名、描述、场景、类名AI可以轻松地将这些映射到代码生成的逻辑中。2.3 Design Tokens的机器友好描述这是让AI真正“理解”视觉风格的基础。在color.md中我们不应只写“我们的主色是蓝色”而应该这样描述## 品牌色 (Brand Colors) | 名称 | 角色 | HEX值 | SCSS变量 | CSS自定义属性 | | :--- | :--- | :--- | :--- | :--- | | Primary Blue | 品牌主色用于主要按钮、重要链接 | #007AFF | $color-primary | --color-primary | | Primary Blue / Hover | 主色悬停状态 | #0056CC | $color-primary-hover | --color-primary-hover | | Success Green | 成功状态 | #34C759 | $color-success | --color-success | ## 中性色 (Neutral Colors) | 名称 | 角色 | HEX值 | SCSS变量 | CSS自定义属性 | | :--- | :--- | :--- | :--- | :--- | | Gray 900 | 主要文字颜色 | #1D1D1F | $gray-900 | --gray-900 | | Gray 200 | 边框、分割线颜色 | #C7C7CC | $gray-200 | --gray-200 | | Gray 50 | 页面背景色 | #F5F5F7 | $gray-50 | --gray-50 |注意这里的细节每一行都包含了语义化名称如“Primary Blue”、设计角色如“品牌主色”、具体值HEX、以及在不同技术栈中的引用方式SCSS变量、CSS变量。当AI需要生成一个“主要按钮”时它可以执行这样的逻辑链查找component: Button- 找到variant: primary- 根据映射关系知道primary对应CSS类.btn-primary- 在样式定义中.btn-primary的背景色应引用--color-primary- 最终值确定为#007AFF。实操心得命名是人与AI沟通的协议在定义Token名称时务必保持一致性。例如颜色用color-前缀间距用spacing-圆角用radius-。避免混用space-和spacing-。统一的命名约定能极大降低AI的理解成本也方便团队内部沟通。我建议采用类似类别-属性-状态/变体的格式如color-background-primary-hover。3. 实战将Figma设计稿转化为AI可读的规范理论很美好但起点往往是混乱的。大多数团队的设计规范存在于Figma的某个文件中由画板、Frame和一堆散落的样式构成。如何从这里开始产出第一版awesome-design-md文件这个过程可以半自动化核心是“提取、转换、装载”。3.1 第一步从Figma中提取结构化数据Figma本身提供了强大的API我们可以利用它来获取设计文件中的样式数据。虽然不能一键生成完美的Markdown但能极大减少手动录入的工作量。方法A使用Figma API脚本适合开发者你可以写一个简单的Node.js脚本调用Figma API获取特定文件中的样式颜色、文本、效果等。// 示例获取颜色样式 const fetch require(node-fetch); const FIGMA_TOKEN 你的个人访问令牌; const FILE_KEY 你的Figma文件Key; async function getColorStyles() { const response await fetch(https://api.figma.com/v1/files/${FILE_KEY}/styles, { headers: { X-Figma-Token: FIGMA_TOKEN } }); const data await response.json(); // 过滤出颜色样式 const colorStyles data.meta.styles.filter(style style.style_type FILL); colorStyles.forEach(style { console.log(| ${style.name} | ${style.description || } | #${style.color} | \$${style.name.toLowerCase().replace(/ /g, -)}\ | \--${style.name.toLowerCase().replace(/ /g, -)}\ |); }); } getColorStyles();运行这个脚本你会得到一份颜色样式的表格行稍作整理就能放入color.md。方法B使用社区插件适合设计师与非开发者搜索Figma社区中的“Design Token”或“Export”相关插件如“Style Organizer”、“Tokens Studio for Figma”有免费版或“Figma to JSON”。这些插件可以帮助你将Figma中的本地样式颜色、文本、网格等导出为JSON格式。拿到JSON后你可以用在线工具或写个小脚本将其转换为Markdown表格。踩坑记录注意样式的嵌套与别名Figma中可能存在样式嵌套如一个颜色样式被另一个样式引用或使用“样式别名”。直接导出原始数据可能会丢失这些关联关系。在提取后务必人工核对一遍确保“主色/悬停”这样的关联被正确表达在Markdown中而不是两个独立的、无关联的颜色值。3.2 第二步手工整理与语义化增强机器导出的数据是“形”我们还需要注入“神”——即语义。这是AI能否正确“理解”设计意图的关键。补充“角色”与“使用场景”对于导出的颜色不要只留一个HEX值。为每一行补充“角色”如“主要文字”、“背景”、“错误状态”和典型“使用场景”。这部分需要设计决策者的输入。建立Token与组件的关联在button.md中明确写出## 视觉样式 (Visual Styles) - **背景色**: 使用设计Token color-primary (#007AFF)。 - **文字色**: 使用设计Token color-text-on-primary (#FFFFFF)。 - **圆角**: 使用设计Token radius-medium (8px)。 - **内边距**: 使用设计Token组合 spacing-vertical-md (12px) 与 spacing-horizontal-lg (16px)。这种明确的引用关系让AI知道组件是Token的“消费者”。描述交互状态这是设计规范中最易被忽略的部分。务必为组件如按钮、输入框的每一个交互状态默认、悬停、聚焦、禁用、加载提供清晰的描述和对应的Token引用。3.3 第三步版本管理与自动化同步设计规范是活的会迭代。我们需要建立机制让awesome-design-md与源头Figma保持同步。策略GitHub Actions 简易同步脚本将你的awesome-design-md仓库放在GitHub上。编写一个同步脚本如sync-from-figma.js定期如每周调用Figma API获取最新的样式数据与你仓库中的Markdown文件进行比对和更新。在仓库中配置GitHub Actions工作流定时例如每周一凌晨执行这个同步脚本。如果脚本检测到变更会自动提交并推送到仓库的主分支。这样只要设计师在Figma中更新并发布了样式库最迟一周内你的AI可读设计规范就会自动更新无需人工干预。这保证了规范作为“单一数据源”的权威性和时效性。# .github/workflows/sync-tokens.yml 示例 name: Sync Design Tokens from Figma on: schedule: - cron: 0 2 * * 1 # 每周一凌晨2点 (UTC) workflow_dispatch: # 也支持手动触发 jobs: sync: runs-on: ubuntu-latest steps: - uses: actions/checkoutv3 - name: Setup Node.js uses: actions/setup-nodev3 with: node-version: 18 - name: Install dependencies run: npm ci - name: Run sync script env: FIGMA_TOKEN: ${{ secrets.FIGMA_TOKEN }} FIGMA_FILE_KEY: ${{ secrets.FIGMA_FILE_KEY }} run: node scripts/sync-from-figma.js - name: Commit and push if changed run: | git config user.name github-actions[bot] git config user.email github-actions[bot]users.noreply.github.com git add . if git diff --staged --quiet; then echo No changes to commit. else git commit -m chore: auto-sync design tokens from Figma git push fi4. 让AI“消费”你的规范集成与提示工程有了结构化的awesome-design-md规范库下一步就是让AI真正用起来。这里的关键在于“喂数据”的方式和“提问”的技巧。4.1 数据接入从文本文件到向量数据库直接让大语言模型LLM去读你仓库里所有的Markdown文件是不现实的会很快耗尽上下文窗口。标准的做法是将这些文档“嵌入”到向量数据库中。文档切分 (Chunking)将每个Markdown文件如button.md按照章节或逻辑段落切分成更小的文本块。一个段落或一个完整的表格可以作为一块。向量化 (Embedding)使用嵌入模型如OpenAI的text-embedding-3-small或开源的BGE-M3将这些文本块转换为高维向量。这个向量代表了文本的语义。存储与检索将这些向量及其对应的原文块存储到向量数据库如Pinecone、Chroma、Weaviate或本地运行的Qdrant中。当AI需要回答关于设计规范的问题时例如“我们的危险按钮是什么样子的”系统会将用户问题也转换为向量。在向量数据库中搜索与问题向量最相似的几个文本块即相关的规范片段。将这些片段作为“上下文”连同用户问题一起发送给LLM让它生成最终答案。这样AI的“知识”就基于了你最新、最准确的设计规范。4.2 构建设计系统专属的AI助手基于上述检索增强生成RAG架构你可以打造一个内部的设计系统问答机器人。技术栈可以很简单后端框架FastAPI或Express.js提供一个查询接口。向量数据库对于初创团队使用Chroma本地运行简单或Pinecone托管服务省心都不错。LLM根据预算和需求选择。OpenAI的GPT-4 Turbo API效果最好开源模型如DeepSeek、Qwen2.5也足够胜任规范查询这类任务。前端一个简单的聊天界面可以用Vue/React快速搭建或直接用Gradio、Streamlit这类工具。这个助手可以回答诸如“主色是什么”、“表单输入框在错误状态下边框用什么颜色”、“弹窗组件支持哪些尺寸”等具体问题答案完全基于你的awesome-design-md仓库准确且一致。4.3 提示工程教会AI如何“使用”规范仅仅检索到规范文本还不够我们需要在给AI的提示词Prompt中明确指令让它以特定的格式和逻辑来运用这些知识。这对于生成代码或设计稿尤其重要。一个用于生成React组件代码的Prompt示例你是一个资深的前端开发者精通我们的设计系统。请根据以下设计规范生成一个React函数式组件。 设计规范上下文 {{ retrieved_design_specs }} /设计规范上下文 具体要求 1. 组件名PrimaryButton 2. 功能一个主要按钮接收children作为文案onClick作为点击事件处理器disabled和loading两个布尔属性。 3. 样式必须严格使用规范中定义的CSS自定义属性CSS Variables。不要硬编码颜色或尺寸值。 4. 交互状态 - 默认状态使用规范中定义的primary变体样式。 - 悬停状态:hover使用规范中定义的primary-hover样式。 - 禁用状态应用disabled样式并阻止点击事件。 - 加载状态显示一个旋转的加载图标使用规范中的icon-loading文字变为“加载中...”。 5. 输出只给出完整的、可运行的React组件代码TSX格式包含必要的import语句和CSS模块引用。不要额外解释。在这个Prompt中我们做了几件关键事角色设定让AI进入“资深前端”的角色。提供上下文用明确的标签包裹检索到的规范。给出具体、可验证的指令从组件名、Props、到每种状态的具体实现要求都非常明确。约束输出格式要求“只给出代码”避免AI生成冗余的说明文字。通过精心设计的Prompt我们可以引导AI从简单的“信息检索”升级为“规范执行者”产出可直接用于项目的资产。5. 扩展应用不止于问答赋能全流程当你的设计规范被AI彻底“读懂”后其应用场景可以远远超出一个智能客服。5.1 自动化代码生成与校验在代码审查Code Review环节可以集成一个机器人。当它检测到PR中修改了UI组件时自动去检索awesome-design-md中对应的组件规范并比对代码中的样式值如颜色HEX值、间距、字体大小是否与规范一致。如果发现使用#333333而不是规范定义的--color-text-primary可以直接在PR评论中给出警告和修改建议。这能将UI一致性检查左移从设计评审延伸到代码层面。5.2 设计稿自动审查与标注在设计师提交Figma设计稿链接后自动化脚本可以解析Figma稿件的样式。与awesome-design-md中的规范进行比对。自动生成一份审查报告高亮出所有偏离规范的地方例如使用了未定义的字体大小、圆角值不符合Token体系等。 这为设计负责人提供了客观、高效的走查工具确保设计产出从一开始就符合系统标准。5.3 动态、可交互的文档站传统的设计文档站如用Storybook或自定义站点需要手动编写示例和文档容易过时。利用awesome-design-md作为数据源可以构建一个“动态文档站”。组件示例读取button.md中定义的变体和属性自动渲染出所有按钮变体的实时示例。Token可视化读取color.md自动生成一个颜色色板点击即可复制值或变量名。实时搜索集成前述的RAG检索功能让用户可以直接在文档站内用自然语言提问如“弹窗的阴影效果是什么”并立刻得到答案。这种文档站本身就是规范“活”起来的证明它降低了新成员的上手成本也成为了团队内关于设计决策的权威参考。5.4 辅助AI生成设计AIGC这是更前沿的应用。当你使用Midjourney、Stable Diffusion或Figma AI等工具生成图像或界面时可以在提示词中附上你的awesome-design-md中关于颜色、字体、布局的關鍵描述。例如“生成一个科技感的管理后台仪表盘卡片使用深色主题主色为#007AFF字体使用规范中的Inter字体家族圆角为8px。” 虽然当前AIGC在精确执行复杂规范上还有局限但提供清晰的结构化约束能显著提高产出与品牌形象的符合度。6. 避坑指南从理念到落地的常见挑战将设计规范AI化听起来很酷但在落地过程中你会遇到不少现实的阻力。以下是我和几个团队实践后总结出的核心挑战与应对策略。6.1 挑战一规范本身不健全或不一致这是最根本的问题。如果Figma里的样式本身命名混乱、存在大量重复或未定义的“野值”那么无论用什么工具产出的都将是“垃圾数据”。应对策略规范先行工具后置在启动awesome-design-md项目前必须花时间整顿现有的设计资产。召开设计团队内部会议统一以下事项Token命名体系采用如类别-属性-状态/变体的通用格式。样式清理删除所有未使用的本地样式合并含义相同的样式。建立核心Token确定颜色、字体、间距、圆角等核心原子并确保所有组件都引用这些Token而不是硬编码的值。 这个过程可能很痛苦但它是所有后续自动化的基石。可以把它看作是一次设计系统的“数据治理”。6.2 挑战二维护成本与更新动力新鲜感过后如何保证这份Markdown规范能持续更新如果设计师更新了Figma却忘了更新文档一切都会失效。应对策略将更新融入现有工作流并尽可能自动化流程绑定在设计评审流程中增加一个“规范同步检查”环节。只有当相关组件的awesome-design-md文档已更新设计稿才能进入下一阶段。责任到人明确每个组件或Token区域的负责人Owner而不是依赖所有人的自觉。工具辅助如前所述建立Figma到GitHub的自动同步流水线将手动更新的工作量降到最低。对于无法自动同步的复杂组件描述如交互逻辑可以将其作为PRPull Request的一部分由组件开发者负责更新。6.3 挑战三AI理解偏差与幻觉即使提供了最结构化的数据AI尤其是LLM也可能产生“幻觉”即生成看似合理但不符合规范的内容。应对策略约束输出与人工复核严格的Prompt工程在Prompt中明确要求AI“严格遵循以下规范”、“只使用提供的变量”并采用“Few-Shot”示例给出1-2个完全正确的输出样例让AI模仿。输出格式标准化要求AI以JSON、特定代码格式或表格形式输出便于后续用程序进行自动化校验。关键环节保留人工审核对于自动生成的代码或设计建议在初期必须引入人工审核环节。可以将AI的产出作为“初稿”由工程师或设计师进行快速复核和微调这比从零开始创作仍然高效得多。建立反馈循环记录AI出错的案例分析是规范描述不清、Prompt指令不当还是模型本身的问题并持续优化你的规范和提示词。6.4 挑战四跨团队协作与认知统一开发、设计、产品对“设计规范”的认知和需求可能不同。开发者关心变量名和代码用法设计师关心视觉表现产品经理关心使用场景。应对策略一份数据多种视图awesome-design-md作为单一数据源但可以通过不同的生成器产出不同团队需要的视图对于开发自动化脚本从Markdown生成tokens.scss、tailwind.config.js或 TypeScript 类型定义文件。对于设计可以探索从Markdown反向生成Figma样式库的插件虽然较难但至少可以生成一份更视觉化的PDF或网页色板。对于所有人构建前述的动态文档站同时满足查阅、搜索、示例交互的需求。 通过提供各取所需的“出口”提升所有相关方维护和使用这份规范的动力。从一份看似普通的Markdown文件出发awesome-design-md项目为我们勾勒了一个设计系统与AI深度协同的未来图景。它不再仅仅是一本供人翻阅的静态手册而是一个活的、可编程的、能够驱动工具链的核心数据源。实现这一愿景的道路上技术工具的选择固然重要但更关键的是团队对设计系统“数据化”思维的认同以及将规范维护视为核心工程实践而非边缘文档工作的决心。开始行动的最佳时机永远是现在——从整理你Figma文件中的第一个颜色样式并把它写进一份结构化的Markdown表格开始。
返回列表