1. 从一句话到可交互界面,这条路到底走不走得通
前阵子在一个产品经理的交流群里,有人甩了张截图,说现在只要在输入框里敲一句“做一个记账 App 的首页,顶部显示本月支出,中间是饼图,底部三个 Tab”,几秒钟之后就能出来一张看起来像模像样的界面图。群里瞬间炸了锅,有人兴奋地说“UI 要失业了”,也有人泼冷水“生成的图能看不能用,切图还得自己来”。
我自己从去年开始就在折腾 Text-to-Prototype(文本生成原型)和 D2C(Design to Code,设计转代码)这条链路,前后试了七八种方案,踩过的坑能写满一个笔记本。今天就把这套东西从头到尾拆一遍,聊聊 AI 生成 App 原型图这件事,到底能做到什么程度,哪些环节是真能省时间的,哪些环节是看着美好实际鸡肋的。
先说结论,免得你看到一半发现方向不对:Text-to-Prototype 目前能帮你快速产出“可讨论的视觉稿”,D2C 能帮你把“规范的设计稿”转成“可运行的骨架代码”,但两者之间还隔着一道需要人工介入的鸿沟。这句话听起来有点丧,但如果你理解了这道鸿沟在哪里,反而能把它用得很顺手。
这篇文章适合三类人看:一是想快速验证产品想法但不想等设计师排期的产品经理;二是想提效但不确定 AI 能不能接住的前端和客户端开发;三是好奇这波 AI 工具到底改变了什么工作流的设计师。不管你是哪一类,我都会把原理、工具选型、实操步骤、参数细节和踩坑经验讲清楚,让你看完能直接上手试。
2. Text-to-Prototype 的核心原理与能力边界
2.1 它到底在做什么:从自然语言到界面结构的映射
很多人以为 Text-to-Prototype 是“AI 在画图”,其实更准确的理解是“AI 在做结构映射”。你输入的那句话,会被拆解成几个维度的信息:页面类型(首页、列表页、详情页)、组件类型(卡片、图表、导航栏)、布局关系(上下、左右、层叠)、数据占位(金额、头像、标题文本)。然后模型根据训练时见过的大量界面数据,把这些信息映射成一套界面描述结构,最后渲染成图。
这个“界面描述结构”是关键。不同的工具用的格式不一样,有的是 JSON 树,有的是类似 HTML 的 DSL,有的是直接生成设计工具的图层数据。理解这一点很重要,因为它决定了你后面能不能把生成的结果接进 D2C 流程。如果工具输出的是一张纯图片,那后面就没法自动化了;如果输出的是结构化的图层或代码,那就有继续往下走的可能。
我实测下来,目前主流方案在“结构映射”这一步的准确率大概是这样:简单页面(单列表、单表单)能到七八成,中等复杂度页面(带图表、带多状态)大概五成,复杂页面(多层级嵌套、自定义组件)基本只能给你个大概框架,细节全靠自己补。所以别指望一句话生成一个完整 App,把它当成“快速出草稿”的工具更现实。
2.2 三种主流技术路线,各自适合什么场景
市面上做 Text-to-Prototype 的方案,底层路线大致分三种,我分别说说它们的优缺点和适用场景。
第一种是基于设计工具插件的生成。这类方案通常是给某个设计工具做一个 AI 面板,你在面板里输入描述,它直接在你的画布上生成图层。优点是生成结果天然就是设计文件,图层结构清晰,后面接 D2C 很顺。缺点是受限于宿主工具的能力,生成风格比较单一,而且你得先有那个设计工具的账号和授权。
第二种是独立 Web 应用的生成。打开一个网页,输入描述,生成图片或可交互的 HTML。优点是门槛低,打开就能用,有些还支持直接预览交互。缺点是生成结果往往是“一张图”或“一个不可编辑的页面”,想改细节很麻烦,导出也不一定规范。
第三种是代码优先的生成。直接生成 React、Vue 或 Flutter 代码,你在本地跑起来就是一个真页面。优点是产物直接可用,改起来就是改代码。缺点是生成质量参差不齐,样式经常需要大改,而且对不懂代码的人不友好。
我的建议是:如果你是产品经理,想快速出图讨论,选第二种;如果你是设计师,想提效,选第一种;如果你是开发者,想快速搭骨架,选第三种。别想着一个工具通吃,组合使用才是常态。
2.3 能力边界:哪些需求它能接,哪些接不住
这里我得泼点冷水。Text-to-Prototype 有几个明确的能力边界,你如果不知道,很容易在错误的方向上浪费时间。
边界一:它不擅长处理“业务逻辑”。你说“做一个登录页”,它能给你画出输入框和按钮,但你说“登录失败三次锁定账号”,它画不出来,因为这是逻辑不是界面。逻辑部分还是得你自己写。
边界二:它不擅长处理“品牌一致性”。每个产品都有自己的设计规范,颜色、圆角、间距、字体都有讲究。AI 生成的东西默认是“通用审美”,你要它符合你的规范,得额外喂给它规范文档或者用支持自定义主题的工具。
边界三:它不擅长处理“复杂交互状态”。一个按钮有默认、悬停、按下、禁用、加载五种状态,AI 通常只给你默认态。多状态的东西还是得手动补。
边界四:它不擅长处理“精确的响应式布局”。你说“适配手机和 Pad”,它可能给你一个能看但不够精细的布局。真正的响应式适配,断点、栅格、弹性规则,还是得人工调。
知道了这些边界,你就不会在它做不到的事情上死磕,而是把它用在它擅长的地方:快速出草稿、快速试布局、快速生成占位内容。
3. D2C 设计转代码:从视觉稿到可运行骨架的关键环节
3.1 D2C 到底转的是什么:图层、样式与结构的翻译
D2C 这个词听起来很玄,其实拆开看就是三件事:把设计稿的图层结构翻译成代码的组件结构,把设计稿的样式属性翻译成代码的样式规则,把设计稿的布局关系翻译成代码的布局系统。
举个例子,设计稿里有一个“卡片”图层,里面包含一个头像图层、一个标题文本图层、一个描述文本图层。D2C 工具要做的是:识别出这是一个容器,里面有三个子元素,然后生成一个类似Card的组件,里面包一个Avatar、一个Title、一个Description。样式上,把设计稿里的颜色值、字号、间距、圆角翻译成 CSS 或对应平台的样式代码。布局上,把设计稿里的绝对定位或自动布局翻译成 Flexbox 或约束布局。
听起来很直接,但难点在于“识别”。设计稿里的图层命名千奇百怪,有的叫“矩形 1”,有的叫“Group 23”,工具得靠位置、大小、内容来猜这是什么组件。这就是为什么 D2C 工具对“规范的设计稿”效果很好,对“随手画的设计稿”效果很差。
3.2 影响 D2C 成功率的四个关键因素
我用了这么多工具,总结下来 D2C 的成功率主要受四个因素影响,你如果想让转换效果好,就得在这四个地方下功夫。
第一是图层命名规范。这是最容易被忽视但影响最大的因素。如果设计稿里图层都叫“Frame 123”,工具只能靠猜;如果叫“Header”“SearchBar”“ListItem”,工具就能准确识别。我建议团队里定一套命名规范,比如用“类型/用途/状态”的格式,像“Button/Primary/Default”。
第二是组件化程度。如果设计稿里每个按钮都是独立画的,D2C 会生成一堆重复代码;如果用了组件实例,D2C 就能生成可复用的组件。所以设计阶段就要有组件意识,重复的元素做成组件。
第三是布局方式。用自动布局(Auto Layout)画的设计稿,转出来的代码布局质量远高于用绝对定位画的。因为自动布局本身就对应 Flexbox 的逻辑,转换起来几乎是直译。
第四是样式变量的使用。如果设计稿里颜色、字号都用了变量(Design Token),D2C 就能生成带变量的代码,后面改主题很方便;如果都是硬编码的值,生成的代码里就全是魔法数字。
这四个因素里,命名和组件化是设计阶段的事,布局和变量是工具使用习惯的事。你如果能把前两个做好,D2C 的成功率能提升一大截。
3.3 转换产物的三种形态与各自的后续处理
D2C 转出来的东西,形态大致分三种,后续处理方式完全不同。
第一种是静态 HTML + CSS。这是最常见的产物,适合做静态页面或原型演示。后续处理就是把它拆成组件,接入你的框架,补上交互逻辑。我通常会把生成的 HTML 当作“视觉参考”,然后手动重写成框架组件,因为生成的代码结构往往不够优雅。
第二种是框架组件代码。有些工具能直接生成 React、Vue 或 Flutter 组件。这种产物可用性更高,但需要你检查生成的代码是否符合你的项目规范,比如状态管理方式、样式方案(CSS Modules 还是 styled-components)、目录结构等。我一般会把它当作“初稿”,然后按项目规范重构一遍。
第三种是设计工具的原生格式。有些工具不生成代码,而是生成设计工具里的“可交互原型”或“代码组件”。这种产物适合在设计工具内部继续迭代,或者交给开发作为参考。
不管哪种形态,我的经验是:别指望生成的代码能直接上生产,把它当作“省去从零搭建骨架的时间”就好。从零写一个页面可能要两小时,基于生成结果改可能只要四十分钟,这就是它的价值。
4. 完整实操:从一句话到可运行页面的全流程
4.1 环境准备与工具选型
在开始实操之前,先说说我用的工具组合。这里我不提具体品牌,只说类型,你可以根据自己的情况替换。
我用的是一套“生成 + 转换 + 编辑”的组合:一个支持结构化输出的 Text-to-Prototype 工具,一个支持设计稿转代码的 D2C 工具,一个本地代码编辑器。如果你只想试试水,其实一个支持生成 HTML 的 Web 工具就够了。
环境上没什么特殊要求,一台能上网的电脑,一个现代浏览器,一个代码编辑器。如果你想跑生成的代码,需要装 Node.js 环境,版本建议 18 以上。如果你用 Flutter,需要装 Flutter SDK。这些基础环境网上教程很多,我就不展开了。
选工具的时候,我建议你重点看三个指标:一是生成结果能不能导出结构化数据(JSON 或代码),二是 D2C 工具支不支持你用的框架,三是能不能自定义主题(颜色、字体、间距)。这三个指标决定了这套流程能不能真正接进你的工作流。
4.2 第一步:把需求描述写成“AI 能听懂的话”
这一步是很多人做不好的地方。你输入“做一个电商首页”,AI 只能给你一个很泛的结果。但如果你输入“做一个电商首页,顶部是搜索栏带扫一扫图标,下面是轮播图区域高度 200,再下面是四个分类入口横排,每个入口是图标加文字,最下面是商品瀑布流两列”,生成质量会高很多。
我总结了一个描述模板,你可以直接套用:页面类型 + 区域划分 + 每个区域的内容 + 布局方式 + 关键样式。比如“做一个个人中心页,顶部是头像和昵称居中对齐,下面是一行四个数据统计(关注、粉丝、获赞、收藏),再下面是功能列表,每项是图标加文字加右箭头,列表项之间有分割线”。
描述的时候有几个技巧:用“上下左右”描述位置关系,用“横排竖排”描述布局方向,用“居中对齐左对齐”描述对齐方式,用具体数字描述尺寸。避免用“好看一点”“现代一点”这种模糊词,AI 理解不了。
提示:如果你的工具支持上传参考图,强烈建议传一张你喜欢的界面作为风格参考。文字描述布局,图片描述风格,两者结合效果最好。
4.3 第二步:生成、筛选与迭代
输入描述之后,工具通常会给你几个候选结果。这时候别急着选,先看结构对不对。结构对了,样式可以后面调;结构不对,样式再好也没用。
我一般会生成三到五轮,每轮微调描述。比如第一轮生成后发现“分类入口”被理解成了竖排,我就在描述里加一句“分类入口横排显示”。第二轮发现“商品瀑布流”变成了单列,我就加一句“商品两列瀑布流”。这样迭代几轮,基本能得到一个结构可用的草稿。
这里有个经验:别在一轮里改太多东西。每次只改一个点,这样你能知道是哪个描述起了作用。如果一次改五个地方,生成结果变好了你也不知道为什么好,变差了也不知道为什么差。
生成结果满意之后,导出。如果工具支持导出 JSON 或代码,优先导出这些;如果只能导出图片,那就导出高分辨率图片,后面手动还原。
4.4 第三步:D2C 转换与代码检查
把导出的设计稿导入 D2C 工具,选择目标框架(React、Vue、Flutter 等),点击转换。转换完成后,你会得到一份代码。这时候别急着跑,先做几项检查。
检查一:布局方式是否正确。看看生成的代码用的是 Flexbox 还是绝对定位。如果是绝对定位,后面适配会很痛苦,建议手动改成 Flexbox。
检查二:样式值是否合理。看看颜色、字号、间距是不是硬编码的。如果是,考虑抽成变量。我一般会把颜色抽成 CSS 变量或主题对象,方便后面统一改。
检查三:组件拆分是否合理。看看有没有把重复元素拆成组件。如果没有,手动拆一下。比如列表项、按钮、卡片这些,都应该拆成独立组件。
检查四:命名是否可读。生成的类名往往是“div-1”“container-2”这种,建议改成有意义的命名,比如“search-bar”“category-list”。
这几项检查做完,代码的可维护性会提升很多。虽然花点时间,但比后面改起来痛苦要划算。
4.5 第四步:补交互、接数据、跑起来
生成的代码通常是静态的,没有交互逻辑。你需要补上这些东西:点击事件、状态切换、数据绑定、路由跳转。
补交互的时候,我建议按“先静态后动态”的顺序来。先把所有静态样式调好,确保视觉没问题,再加交互。如果一边调样式一边加逻辑,出了问题很难定位是样式问题还是逻辑问题。
接数据的时候,先用假数据(Mock Data)跑通流程,确认组件能正常渲染,再换成真实接口。假数据的结构要和真实接口一致,这样切换的时候不用改组件。
跑起来之后,在真机或模拟器上看看效果。重点看几个地方:滚动是否流畅、点击区域是否够大、文字是否溢出、图片是否变形。这些问题在设计稿上看不出来,只有跑起来才能发现。
5. 常见问题与排查技巧实录
5.1 生成结果与预期差距大,怎么调
这是最常见的问题。你描述了一个页面,生成结果完全不是你想的那样。遇到这种情况,先别怀疑工具不行,先检查你的描述。
我整理了一个排查顺序:第一,描述里有没有模糊词?把“好看”“现代”“简洁”换成具体的布局和样式描述。第二,描述里有没有矛盾?比如同时说“横排”和“竖排”,AI 会随机选一个。第三,描述是不是太长了?太长的描述 AI 可能抓不住重点,建议拆成几段,分段生成再拼。第四,工具有没有风格预设?有些工具默认风格和你想要的不一样,换个预设试试。
如果描述没问题,生成还是不行,那可能是工具的能力边界到了。这时候换个工具,或者手动补。别在一个工具上死磕,时间成本不划算。
5.2 D2C 转换后代码跑不起来,常见原因有哪些
D2C 生成的代码跑不起来,原因通常有这么几类,我做成表格方便你对照排查。
| 问题现象 | 可能原因 | 排查方法 | 解决方式 |
|---|---|---|---|
| 页面空白 | 组件未正确导入 | 看控制台报错 | 补上 import 语句 |
| 样式错乱 | 样式方案不匹配 | 检查 CSS 引入方式 | 统一样式方案 |
| 图片不显示 | 资源路径错误 | 看网络请求 | 修正资源路径 |
| 布局塌陷 | 缺少高度或宽度 | 检查容器样式 | 补上尺寸或改用 Flex |
| 字体不对 | 字体未加载 | 看字体请求 | 引入字体文件 |
| 交互无效 | 事件未绑定 | 检查事件处理函数 | 补上事件逻辑 |
这张表我用了大半年,基本能覆盖八成的问题。遇到新问题就往表里加一行,慢慢就形成自己的排查手册了。
5.3 生成代码的质量问题与重构建议
生成的代码质量参差不齐,有些能直接用,有些得大改。我总结了几类常见质量问题和对策。
问题一:嵌套过深。生成的代码经常有七八层嵌套的 div,读起来很累。对策是手动扁平化,把不必要的容器去掉。
问题二:重复代码多。相似的结构重复出现,没有抽成组件。对策是识别重复模式,抽成组件,用 props 传参。
问题三:魔法数字多。样式里全是“13px”“27px”这种数字,没有规律。对策是抽成设计变量,比如“font-size-sm”“spacing-md”。
问题四:命名混乱。类名没有语义,看不出是干什么的。对策是重命名,用“功能-位置-状态”的格式。
问题五:缺少注释。复杂逻辑没有注释,后面看不懂。对策是给关键部分加注释,说明意图而不是描述代码。
重构的时候,我建议一次只做一类改动,改完跑一遍,确保没问题再改下一类。如果一次改太多,出了问题很难定位。
5.4 独家避坑技巧:我踩过的那些坑
说几个我实际踩过的坑,你如果遇到类似情况可以绕开。
坑一:过度依赖生成结果。我一开始想着生成完直接用,结果发现细节问题一大堆,改的时间比重新写还长。后来我调整心态,把生成结果当作“初稿”,预期就是“省一半时间”,反而用得很顺。
坑二:忽视设计规范。有次生成了一堆页面,风格各不相同,拼在一起很违和。后来我每次生成前先定好颜色、字体、间距,生成时带上这些约束,风格就统一了。
坑三:不做版本管理。生成结果改来改去,改到最后发现还是第一版好,但已经找不回来了。后来我每次生成都存一份,用日期加描述命名,方便回溯。
坑四:在复杂页面上浪费时间。有次想生成一个带复杂图表和自定义组件的页面,折腾了一下午效果都不好。后来我学乖了,复杂页面只生成框架,细节手动补,效率高很多。
坑五:忽略可访问性。生成的代码往往没有考虑无障碍,对比度不够、点击区域太小、缺少语义标签。后来我每次生成后都检查一遍,该加的加上。
这些坑说起来都是泪,但踩过之后,这套流程就顺了。现在我用这套方法,一个中等复杂度的页面,从描述到可运行,大概两三个小时,比从零写快不少。
6. 这套流程适合谁,不适合谁
6.1 三类最适合的使用场景
根据我的经验,这套流程在三个场景下价值最大。
场景一:快速验证产品想法。产品经理有个新点子,想快速看看长什么样,用 Text-to-Prototype 几分钟就能出图,比等设计师排期快多了。虽然图不够精细,但用来讨论足够了。
场景二:搭建项目骨架。开发接到一个新项目,需要快速搭出页面框架,用 D2C 生成基础代码,然后在此基础上补逻辑,比从零写快很多。
场景三:生成占位内容。做演示或测试的时候,需要大量占位文本、占位图片、占位数据,用 AI 生成比手动编快得多,而且看起来更真实。
这三个场景的共同点是:对精度要求不高,对速度要求高。如果你的场景符合这个特点,这套流程就很适合你。
6.2 两类不建议使用的情况
反过来,有两种情况我不建议用这套流程。
情况一:对精度要求极高的项目。比如金融类 App 的界面,每个像素、每个颜色都有规范,AI 生成的东西很难达到要求,改起来比自己画还慢。
情况二:需要严格遵循设计系统的项目。如果你们团队有成熟的设计系统,组件都是现成的,那直接用组件搭页面比 AI 生成再改要快。AI 生成的东西往往不符合设计系统,改造成本很高。
判断标准很简单:如果“改”的成本大于“从零做”的成本,就别用 AI 生成。这个判断需要你对项目足够了解,做几次就有感觉了。
6.3 对工作流的影响与团队协作建议
这套流程对工作流的影响,我观察下来主要有三点。
第一,设计和开发的边界变模糊了。以前设计出图、开发实现,现在 AI 可以直接从描述生成代码,设计和开发的交接环节可能被压缩。但这不意味着设计师和开发会消失,而是他们的工作重心会转移:设计师更关注规范和创意,开发更关注逻辑和性能。
第二,原型和成品的界限变模糊了。以前原型是原型,成品是成品,现在 AI 生成的原型可能直接就是可运行的代码,原型和成品的距离缩短了。这对快速迭代是好事,但也带来了“原型代码直接上生产”的风险,需要团队有明确的规范。
第三,对描述能力的要求变高了。以前你说“做个页面”,设计师能理解;现在你说“做个页面”,AI 只能给你个泛泛的结果。能把需求描述清楚的人,在这套流程里效率会高很多。
团队协作上,我建议定几条规矩:生成的结果必须经过人工审核才能进代码库;生成的代码必须符合项目规范;生成的过程和结果要记录,方便回溯。这几条规矩能避免很多混乱。
7. 我对这套流程的真实体会
折腾了这么久,我最大的体会是:AI 生成原型这件事,价值不在于“替代谁”,而在于“让想法更快变成看得见的东西”。以前一个想法从脑子里到屏幕上,要经过写文档、画草图、做设计、写代码好几道工序,现在可能几分钟就能看到一个大概的样子。这个速度的提升,改变的是“试错成本”,而试错成本的降低,改变的是“创新的可能性”。
当然,它现在还不完美,生成的东西经常需要大改,D2C 的转换也经常出问题。但我觉得这些都是阶段性的问题,随着工具迭代会慢慢改善。更重要的是,它逼着我们把需求描述得更清楚,把设计规范得更严格,把代码结构得更合理。这些事本来就是应该做的,只是以前可以糊弄,现在糊弄不过去了。
最后分享一个小技巧:如果你刚开始用这套流程,别一上来就做复杂页面。先从一个简单的列表页或表单页开始,跑通整个流程,熟悉每个环节的脾气,再逐步增加复杂度。这样你的学习曲线会平缓很多,也不容易因为一开始受挫就放弃。
这套东西后续还可以往几个方向扩展:一是接入真实的设计系统,让生成结果直接符合规范;二是结合组件库,让生成的代码直接复用现有组件;三是打通数据层,让生成的页面直接连真实接口。这些方向我都在试,有进展再聊。