把蓝湖验收写成 Prompt:一套可复用的 UI 审核提示词
蓝湖稿还原交给 AI 时,常见失败点不是模型不会看图,而是 Prompt 太像一句口头需求:检查一下还原是否正确、哪里不一样、帮忙改成和设计稿一致。
这类 Prompt 缺少审查边界,也缺少证据格式。AI 很容易停在截图观感、单个 margin、单个颜色值或局部控件上,漏掉页面背景、模块共边、列表空态、运行态图片圆角和分割线归属。
更稳定的写法,是把蓝湖验收拆成一组可复用提示词。每段 Prompt 只负责一种证据:规格来源、页面盒模型、横向边界、绝对坐标、模块间距、列表契约、文字槽位、结构元素、运行态和补丁审查。
使用方式
先准备四类输入:
| 输入 | 说明 |
|---|---|
| 设计来源 | 蓝湖设计节点名、页面状态、主题、Tab、结构化 HTML/CSS/tokens/layout/layers |
| 代码范围 | 页面入口、布局文件、组件文件、列表模型、图片加载代码 |
| 目标平台 | Android View、Flutter、HarmonyOS ArkUI 或其他 UI 框架 |
| 当前问题 | 例如边距偏大、底色不对、标签不居中、图片边框异常 |
然后按顺序投喂 Prompt。不要一次要求 AI 同时修所有问题。先让 AI 产出台账,再根据台账做窄范围补丁。
Prompt 1:限定规格来源
这段 Prompt 用来防止 AI 用截图观感覆盖结构化规格。
角色:UI 还原审核代理。
任务:基于蓝湖结构化数据审查当前页面实现,不以截图观感覆盖结构化规格。
输入:
- 设计节点:{设计节点名称}
- 页面状态:{主题 / Tab / 空态 / 加载态 / 数据态}
- 设计规格:{HTML/CSS/tokens/layout/layers}
- 当前代码范围:{文件路径或组件入口}
- 平台:{Android View / Flutter / HarmonyOS ArkUI}
规则:
1. 以 HTML、CSS、tokens、layout、layers 作为规格。
2. 截图只用于复核,不用于推翻结构化数据。
3. 每个结论都要写出设计值、当前代码来源、当前渲染结果、差异归属。
4. 不允许只回答「看起来差不多」。
输出:
- 先列出本次审查范围。
- 再列出需要建立的台账。
- 最后说明暂不修改代码,先完成证据表。
适用场景:首次接入设计稿、换 Tab、换主题、设计节点不明确、截图和结构化数据看起来不一致。
Prompt 2:页面盒模型和背景归属
这段 Prompt 用来审查页面根、滚动容器、列表容器和空白区域。
任务:建立页面级盒模型和背景归属表。
必须检查:
1. 页面根容器宽度、高度、背景。
2. 从窗口根到模块根的背景归属:
Activity/window root
-> Fragment/page root
-> Tab/page container
-> refresh/layout parent
-> RecyclerView/ListView/ScrollView
-> item/module root
3. 短内容、空列表、加载态、模块隐藏、底部 padding、overscroll 暴露出的颜色。
4. 滚动容器是否应保持透明,页面底色是否应由父容器承担。
输出表格:
| 层级 | 蓝湖要求 | 当前代码 | 暴露状态 | 差异 | 处理建议 |
|---|---|---|---|---|---|
限制:
- 不允许只检查长列表满屏状态。
- 不允许通过给列表控件直接上背景来掩盖父容器背景问题,除非设计明确要求列表本身拥有底色。
适用场景:页面底色、空白区域、加载态、短列表、底部露色问题。
Prompt 3:横向边界台账
这段 Prompt 用来解决模块左右边界不一致的问题。
任务:建立同列模块的横向边界台账。
检查对象:
- 同一页面内上下相邻的模块、卡片、列表组、Banner、模块组。
- 任何被指出「宽度不一致」「左右边界不一致」「应该共边」的模块。
每行必须记录:
- 蓝湖横向几何:page width、left、width、right、推导出的左右边距。
- 当前代码来源:root width、margin、padding、父容器 padding、列表模型 margin、ItemDecoration。
- 当前几何结果。
- 模块之间是否应该共边。
- 哪一层负责横向边界。
输出表格:
| 模块 | 蓝湖横向几何 | 当前代码来源 | 当前几何 | 边界关系 | owner | 处理 |
|---|---|---|---|---|---|---|
限制:
- 不允许把内部 padding 当成模块外边界,除非设计背景显示同一视觉面跨过该 padding。
- 不允许只说单个模块 margin 正确,必须比较同列模块之间的关系。
适用场景:卡片左右边距、同列模块共边、列表组宽度、模块组和下方模块不一致。
Prompt 4:绝对纵向坐标台账
这段 Prompt 用来处理自定义状态栏、顶部工具栏、重叠模块和负向偏移。
任务:建立页面级绝对纵向坐标台账。
检查对象:
- 顶部状态区、导航区、工具栏、Header、首个内容模块。
- 使用 position:absolute、负向 top、嵌套 top、paddingTop 或重叠视觉层的节点。
- 固定底部操作区和内容区域之间的可见距离。
每个纵向锚点必须记录:
- 蓝湖节点路径:从页面根到目标节点的完整层级。
- 蓝湖 y 计算:祖先 top、子节点 top、paddingTop、负向偏移累加后的页面级 y。
- 当前代码 y 计算:root top、系统 inset、toolbar top、parent padding、constraint、margin、translationY。
- 派生关系:前一个模块 bottom 到后一个模块 top 的距离,允许出现负值。
- owner:状态栏策略、工具栏高度、Header 高度、模块 top margin、父容器 padding、子节点 padding 或固定底部容器。
输出表格:
| 锚点或模块 | 蓝湖 absolute y | 当前代码 absolute y | 派生关系 | owner | 处理 |
|---|---:|---:|---|---|---|
限制:
- 不允许把子节点 padding 或 margin 直接当成页面级 y。
- 不允许只看最近一层 XML margin。
- 如果存在重叠层,必须用 bottom -> top 计算重叠距离。
适用场景:状态栏透明、自定义工具栏、重叠卡片、吸顶 Header、固定底部按钮、负向偏移。
Prompt 5:模块间距台账
这段 Prompt 用来避免把一个蓝湖间距值机械改成某个 XML margin。
任务:建立模块间距台账,计算最终可见距离。
检查对象:
- Tab/Header -> 首个模块。
- 模块 -> 模块。
- 卡片 -> 卡片。
- 列表组 -> 底部导航或页面底部。
- 模块隐藏、加载态、空态后的相邻关系。
每行必须记录:
- 蓝湖 gap:从结构化 layout 推导,不用目测。
- 当前 gap 来源:上一个模块 bottom padding、下一个模块 top margin、列表 padding、item root margin、分割线、ItemDecoration、父容器 padding。
- 可见距离公式,例如:12 child bottom + 12 list padding + 8 module margin = 32dp。
- gap owner:最终应该由哪一层负责。
输出表格:
| 视觉关系 | 蓝湖 gap | 当前来源 | 当前可见距离 | owner | 处理 |
|---|---:|---|---:|---|---|
限制:
- 不允许只检查一个非零 margin。
- 不允许把多个 gap 平均成一个值。
- 不允许在台账仍有未知值时报告「整体间距正确」。
适用场景:模块间距偏大、Header 到首项距离不对、多个 padding 叠加、列表底部留白异常。
Prompt 6:列表完整契约
这段 Prompt 用于列表页,重点是不要只修用户指出的局部症状。
任务:在首次修改同一列表面之前,建立完整列表契约。
必须审查:
1. 顶部区域:Tab 高度、选中态、Header 文字槽位、Header 到首项距离。
2. 列表容器:root padding、首项间距、overscroll、底部 padding、空态背景。
3. 重复项:首项、普通项、末项的高度、宽度、背景、圆角、分割线。
4. Item 内容:标题、摘要、元信息、标签、图片、引用块的字体、行高、字重、槽位。
5. 分割线:左右缩进、高度、颜色、归属层级。
特别规则:
- 设计视觉模块和代码 item 不一定一一对应。
- 若设计把多个区域放在同一个视觉 block 中,而代码拆成多个 item,先重新划分 gap owner。
- 若设计上是两个模块,代码由同一个列表模型连续生成,也要按设计模块审查。
输出表格:
| 检查面 | 蓝湖规格 | 当前代码 | owner | 风险 | 后续补丁范围 |
|---|---|---|---|---|---|
限制:
- 不要求一次提交修完全部问题。
- 允许按视觉维度窄提交,但第一轮必须暴露完整列表契约。
适用场景:RecyclerView、ListView、Flutter ListView、瀑布流、搜索结果、消息列表、资讯列表。
Prompt 7:文字槽位台账
这段 Prompt 用来处理固定高度卡片中的文字垂直位置、行高和截断。
任务:建立固定高度卡片的文字槽位台账。
检查对象:
- 标题、副标题、数值、摘要、元信息、底部名称、标签文字。
每行必须记录:
- 蓝湖文字盒:font-size、line-height、font-weight、x/y、width/height、上下锚点。
- 当前代码:textSize、lineHeight、includeFontPadding、font weight、top/bottom constraint、gravity、maxLines、ellipsize。
- 槽位计算:slot height、line box height、top residual、bottom residual。
- 截断风险:最长运行态文案是否会被兄弟控件挤压。
- 有界行规则:若 Android `TextView` 位于固定高度行内,旁边有 icon、checkbox、switch 或按钮,先检查文本自身 `layout_height`、`lineHeight`、`includeFontPadding`、`android:gravity="center_vertical"`,不要移动相邻图标补偿文本未居中。
- 宽度规则:协议、富文本或正文 `TextView` 不应为了凑总宽度从 `wrap_content` 改成固定宽,除非设计或代码契约明确要求固定文本槽位。
输出表格:
| 文本角色 | 蓝湖文字盒 | 当前代码 | 槽位计算 | 截断风险 | 处理 |
|---|---|---|---|---|---|
限制:
- 不允许只看 layout_marginTop。
- 不允许通过缩小字体解决宽度分配问题,除非设计规格本身要求字体变小。
适用场景:文字上下不居中、固定高度卡片、标签文字偏下、标题提前省略、数值和名称互相挤压、行内图标和文本垂直位置不一致。
Prompt 8:颜色和 Token 映射
这段 Prompt 用来避免只按十六进制颜色做替换。
任务:建立颜色语义角色表,并映射到项目资源。
检查对象:
- 页面背景、卡片背景、模块标题、正文、元信息、禁用态、右侧操作文字、右侧箭头、分割线。
规则:
1. 若蓝湖提供命名 Token,优先按 Token 语义映射资源。
2. 当前十六进制值相同,不代表语义一致。
3. 同一行中的标题、正文、右侧操作文字、箭头、分割线必须分开记录。
4. 检查日夜模式或皮肤资源,不只看当前主题。
输出表格:
| 视图身份 | 语义角色 | 蓝湖 Token 或颜色 | 当前代码资源 | 主题变体 | 处理 |
|---|---|---|---|---|---|
限制:
- 不允许在共享布局里做宽泛颜色替换。
- 修右侧操作颜色时,不得顺带修改标题或正文。
适用场景:颜色接近但语义不对、深色模式异常、右侧文字和箭头颜色不一致。
Prompt 9:结构元素和运行态图片
这段 Prompt 用来检查容易被当成装饰的小元素。
任务:审查结构元素和运行态图片,不只检查静态布局。
必须检查:
1. 标题左图标、右侧操作文字、右侧箭头、清除按钮、徽标、分割线是否存在。
2. 卡片内排名角标、NEW 标识、状态标签、业务标签、覆盖标签是否存在。
3. 服务端图片或图标的 ImageView 尺寸、scaleType、placeholder、圆角变换、裁剪策略。
4. 头像或图片边框的绘制顺序:兄弟节点顺序、foreground、elevation、translationZ、父容器裁剪、自定义容器测量锚点。
输出表格:
| 元素 | 蓝湖是否存在 | 当前代码 | 运行态来源 | 绘制或加载风险 | 处理 |
|---|---|---|---|---|---|
限制:
- 不允许把服务端图片只当成 XML 背景检查。
- 父容器有圆角,不代表图片本体已裁剪。
- 边框宽度正确,不代表绘制顺序正确。
适用场景:旧图标残留、角标缺失、服务端图片圆角无效、头像边框压住图片。
Prompt 10:补丁前目标清单
这段 Prompt 用来控制 AI 修改范围。
任务:在修改代码前,生成补丁目标清单。
每个目标必须包含:
- 文件路径。
- 视图 ID、组件名或绑定名。
- 属性名。
- 当前值。
- 目标值。
- 语义角色。
- 来自哪张台账。
输出表格:
| 文件 | 视图或组件 | 属性 | 当前值 | 目标值 | 语义角色 | 证据来源 |
|---|---|---|---|---|---|---|
限制:
- 不允许先改代码再补证据。
- 不允许跨语义角色做批量替换。
- 不允许把无关重构混入视觉修复。
适用场景:准备让 AI 自动改代码、需要控制补丁范围、同一资源名被多个角色复用。
Prompt 11:补丁后审查
这段 Prompt 用来在构建前先读 diff。
任务:审查本次 diff 是否只修改目标层级。
必须检查:
1. diff 是否只包含补丁目标清单中的文件、视图、属性。
2. 是否误改同一行中的标题、正文、元信息、右侧操作、箭头或分割线。
3. 间距修复是否只调整台账中确认的 owner。
4. 成对元素是否一起处理,例如右侧操作文字和右侧箭头。
5. 是否混入无关重构、格式化或未请求的依赖变更。
6. 如果本轮是在修正上一轮被指出的问题,必须先验证渲染症状;未验证前不要提交,只保留未提交补丁或继续补验证证据。
输出:
- 通过项。
- 风险项。
- 必须回退的误改。
- 可继续运行的验证命令。
适用场景:AI 已经改完代码、准备构建或截图复核之前。
一段完整总 Prompt
实际使用时,也可以把上面的要求合并成一段总 Prompt。适合第一次审查某个页面。
角色:UI 还原审核代理。
目标:基于蓝湖结构化规格审查当前页面实现,先产出台账,再做窄范围修复建议。
输入:
- 设计节点:{设计节点}
- 页面状态:{主题 / Tab / 数据态 / 空态 / 加载态}
- 设计规格:{HTML/CSS/tokens/layout/layers}
- 当前代码范围:{页面入口、布局、组件、列表模型、图片加载代码}
- 平台:{Android View / Flutter / HarmonyOS ArkUI}
- 当前问题:{问题描述}
执行顺序:
1. 确认规格来源,禁止用截图覆盖结构化数据。
2. 建立页面盒模型和背景归属表。
3. 建立同列模块横向边界台账。
4. 若页面存在自定义状态栏、工具栏、重叠层或固定底部区域,建立绝对纵向坐标台账。
5. 建立模块间距台账,计算最终可见距离。
6. 如果目标是列表页,建立完整列表契约。
7. 如果存在固定高度卡片或有界文本行,建立文字槽位台账。
8. 建立颜色语义角色表和 Token 映射。
9. 审查结构元素、运行态图片和图片边框绘制顺序。
10. 生成补丁目标清单。
11. 暂不修改代码,等待补丁目标确认或继续执行指令。
输出格式:
- 审查范围。
- 台账列表。
- 发现的问题,按风险排序。
- 补丁目标清单。
- 需要验证的状态和命令。
收尾检查 Prompt
提交前可以用下面这段做最后一轮检查。
任务:判断本次蓝湖还原修复是否可以收尾。
必须确认:
- 页面级左右边界已经检查。
- 同列模块横向边界台账已经完成。
- 自定义状态栏、工具栏、重叠层或固定底部区域涉及的绝对纵向坐标已经检查。
- 相邻模块间距台账已经完成,且每个可见模块对都有 owner。
- 列表页已经审查完整列表契约。
- 分割线、ItemDecoration、列表模型 spacer 已经检查。
- 固定高度卡片已经检查文字槽位。
- 有界行内 `TextView` 已经先检查自身 line box 和垂直居中策略,没有用移动相邻图标补偿文本问题。
- 标题左图标、右侧操作、箭头、角标、标签、分割线已经检查。
- 运行态图片、圆角、placeholder、边框绘制顺序已经检查。
- 颜色改动按语义角色分开,未做宽泛替换。
- diff 已经审查,没有误改相邻角色。
- 若本轮修正上一轮被指出的问题,渲染症状已经验证;未验证则不提交。
输出:
- 可以收尾 / 不能收尾。
- 不能收尾时列出缺失证据。
- 可以收尾时列出验证命令和截图状态。
总结
蓝湖验收 Prompt 的核心,不是让 AI「看图更细」,而是让 AI 按固定证据格式工作。
好的 Prompt 至少要规定三件事:
- 规格来源:结构化设计数据优先,截图只做复核。
- 审查台账:边界、绝对坐标、间距、列表契约、文字槽位、颜色角色、运行态图片分别成表。
- 修改边界:先生成补丁目标清单,再改代码,改完先审 diff。
只要 Prompt 能持续产出这些证据,AI 就不再只是给出视觉判断,而是在执行一套可复查的 UI 审核流程。