* feat(portrait-clearance): 肖像排查 - 增加画布插件与本机检测链路 * fix(web): 插件中心 - 修复应用插件筛选与自动定位 * feat(plugin): AI审美批改 - 完成分析报告与问题标注闭环
42 KiB
AI 审美批改画布插件方案(评审稿)
状态:方案评审稿。本文用于确认产品边界和后续实现顺序,不代表功能已经全部接通。
1. 一句话定义
AI 审美批改是画布里的“视觉质检员”:输入一张图片和可选的创作意图,输出结构化的批改报告、问题位置和下一步修改动作;它默认不修改原图。
本评审稿新增一项核心技术取舍:审美判断与区域定位分离。审美仍由云端通用多模态模型负责;区域定位使用同一云端模型的独立 grounding 请求,只返回已有问题对应的矩形框或全局范围。第一版不部署本地定位模型,也不要求模型输出像素级 mask。
推荐的长期闭环是:
图片 + 创作意图
-> 视觉理解
-> 多维审美检查
-> 问题聚合与定位
-> 可靠性复核
-> 批改报告 + 下一步动作
-> 修改或重新生成
-> 新旧版本对比
第一版不追求“一次生成修正版图片”,而是先把“看懂、说清、定位准、建议能执行”做好。
2. 调研结论:别人主要怎么做
目前的参考项目大致分成五种模式。它们没有一个和影策的画布节点完全相同,但可以拼出一条比较成熟的产品路线。
| 参考项目 | 实际做法 | 对影策的启发 |
|---|---|---|
| AI Photo Critic | 先让视觉模型描述图片,再从摄影知识库检索构图、光线等原则,最后生成个性化点评。 | 将“看图”和“套用方法论”分开,减少泛泛而谈。 |
| PicSpeak | 对构图、光线、色彩、影响力和技术执行打分,解释可见证据,并把弱项转成下一次拍摄动作;还支持原图与重拍图比较。 | 把点评延伸成“下一次怎么拍、改完是否变好”的练习闭环。 |
| Nodaro Image Critic | 画布节点接收图片、参考图和 Prompt,按阈值输出 approved 或 rejected,反馈可直接接入修改图片节点。 |
适合把批改结果接到自动质检、重试和生成工作流。 |
| Facet | 本地批量分析照片,在审美、构图、锐度、人脸、曝光、色彩等多个维度评分,再用于筛选和整理图库。 | 可作为低成本的批量预筛选层;详细点评不必每张都调用大模型。 |
| Grounding-IQA | 将图像质量描述和局部区域定位结合,并支持针对局部区域的质量问答。 | 支持“问题必须能落到图上”,也说明了定位需要单独校验。 |
| Q-Ground | 专门定位和描述图像质量失真,并通过质量 grounding 数据和 mask decoder 训练提升区域定位。 | 说明“审美判断”和“精准定位”是不同任务;第一版借鉴其任务拆分和评估思路,但不引入专用模型。 |
| Aestheval / The Photographer’s Eye | 从摄影社区的真实评论中整理、改写、过滤训练数据,让模型学习摄影师式的解释,而不只是输出通用图像描述。 | 后续如需提升审美质量,应积累真实创作者反馈,而不是无限堆 Prompt。 |
补充参考:NIMA 实现和 CLIP+MLP aesthetic predictor更偏向快速评分或排序,适合做底层筛选,不足以单独承担“为什么、改哪里、怎么改”的批改任务。
2.1 共同规律
- 成熟产品不会只返回一句“这张图不错/不好”,而是拆成维度、证据和动作。
- “分数”适合排序和筛选,“文字解释”适合教学和修改,两者最好分工。
- 创作意图会影响判断。同样的居中构图、强烈高光或低饱和处理,可能是错误,也可能是有意选择。
- 真正有价值的反馈需要进入下一轮创作,而不是停在报告页面。
- 让模型定位问题区域,比让模型单纯描述问题更难,需要单独的 grounding 和复核步骤。
3. 产品目标和边界
3.1 目标
- 帮创作者快速发现 0~5 个真正值得处理的问题;没有可靠问题时明确告诉用户“本轮未发现重点问题”。
- 解释问题为什么影响画面表达,而不是机械套用“三分法”。
- 给出可以转成下一轮提示词、修图动作或拍摄动作的建议。
- 在原图上标出问题的大致区域,无法可靠定位时明确使用“全局”。
- 对可定位的局部问题输出一个可解释的矩形证据框;无法可靠定位或属于整体关系的问题使用“全局”,不伪造精确框。
- 保存报告和输入指纹,图片变化后提醒重新批改。
- 为后续的修正版生成、重拍比较和自动质检预留接口。
3.2 第一版不做
- 不把审美压成一个绝对总分。
- 不自动覆盖或修改输入图片。
- 不默认生成修正版图片。
- 不在每次分析时动态抓取互联网文章作为知识来源。
- 不一开始引入新的任务队列、数据库表或独立后端服务。
- 不在第一版部署本地视觉定位模型;先复用现有云端模型渠道验证 grounding 质量。
- 不把任意第三方 React 代码直接注入主应用运行。
4. 推荐用户流程
flowchart TD
A[启用 AI 审美批改插件] --> B[在画布添加批改节点]
B --> C[连接一张图片]
C --> D[可选:填写创作意图、用途和需要保留的内容]
D --> E[点击开始批改]
E --> F[读取图片并生成输入指纹]
F --> R[场景路由:只判类型与意图,不找错]
F --> G1[构图与叙事 Reviewer]
F --> G2[色彩与调色 Reviewer]
F --> G3[光线与曝光 Reviewer]
F --> G4[结构、比例与透视 Reviewer]
R --> H[保守裁判:去重、验来源、允许 0 个问题]
G1 --> H
G2 --> H
G3 --> H
G4 --> H
H -->|有可靠 issue| I0[先展示报告初稿:问题与建议,无矩形框]
I0 --> I[定位问题区域]
H -->|没有可靠 issue| L[清晰报告:本轮未发现重点问题]
I --> J[云端 Grounding:只返回矩形框]
J --> K[独立复核可靠性]
J --> Q1[AI Prompt Writer:生成局部修改提示词]
K --> L[原图 SVG 标注 + 报告面板]
Q1 --> L
L --> M[复制动作或生成下一轮提示词]
M --> N[修改或重新生成]
N --> O[上传新版本]
O --> P[按同一套标准比较前后变化]
第一版的最短路径仍然是“连接图片 → 点击批改 → 查看报告”。意图输入应当是可选的,不能成为第一次使用的阻碍。
5. 交互方案
5.1 画布节点
- 名称:AI 审美批改。
- 输入:图片;第一版只消费第一张已连接且可读取的图片。
- 右侧输出:第一版关闭,避免用户误以为它会产生新图片。
- 节点状态:未开始、运行中、已完成、失败、待更新。
- 节点内展示:输入图片预览、当前阶段、问题数量、报告摘要和主按钮。
- 插件关闭后:已有报告可以只读查看,没有报告时提示先启用插件。
- 节点图标:标题栏、添加节点菜单和节点卡片统一使用
ScanSearch(扫描并查找问题),不使用通用 AI 闪光图标,避免把分析节点误解成图片生成节点。 - 图标职责:图标由宿主前端静态渲染,只承担节点识别;问题原因由 AI 分析,坐标由定位阶段返回,矩形框和 SVG 由前端绘制,三者不混在图标层实现。
5.2 批改弹窗
左侧是原图和 SVG 标注,右侧是报告:
- 整体判断:一句话总结,不强制输出总分。
- 画面优点:先说值得保留的内容,避免批改只剩否定。
- 重点问题:只展示通过证据门槛的
issue,按优先级展示,并支持构图、色彩、光线、比例筛选。 - 可选方向:将主观风格建议单独展示,不使用错误色标,也不计入问题数量。
- 无问题状态:明确显示“本轮未发现需要优先修改的问题”,不能显示为空白或失败。
- 问题详情:问题是什么、为什么、把握度、严重程度。
- 修改建议:目标、具体动作、需要保留的优点、预期效果。
- 降级提示:哪些阶段失败、哪些标注被降级为全局范围。
5.3 创作意图上下文
建议提供一个轻量的“批改上下文”入口,而不是复杂表单。可选字段包括:
- 图片类型:人像、风景、产品、插画、概念设计、建筑等。
- 创作目的:作品集、海报、分镜、封面、社交媒体、概念探索等。
- 视觉重点:主体、动作、情绪、空间或产品信息。
- 风格与技法:低饱和、强逆光、长曝光、拼贴、故意不对称等。
- 必须保留:人物、构图、色调、品牌元素或叙事重点。
没有填写时由模型估计,但报告应标记为“基于图片推断”,避免把推断当成用户意图。
6. AI 分析链路
评审修订:原方案虽然已经拆成两个并行调用,但两个 Reviewer 都会收到全量 Rubric,职责仍然偏宽。本方案改为“轻量场景路由 + 多个窄职责 Reviewer 并行 + 保守裁判”,并明确允许返回 0 个问题。
6.1 当前 Prompt 和规则匹配(以代码为准)
当前画布弹窗实际调用的是 web/src/lib/art-critique/pipeline.ts 的 runArtCritiquePipeline。它最多发起 9 次模型调用,使用设置中的同一个视觉/文本模型,但每次是独立请求。场景路由与四个 Reviewer 现在会同时启动,场景结果只用于后续本地过滤和聚合;Grounding 完成后,Verification 与 AI Prompt Writer 同时启动;聚合完成后先回传一份不显示矩形框的报告初稿,后续阶段完成后再更新最终标注和可复制提示词。没有候选时会跳过后续聚合、定位、复核和提示词生成:
| 阶段 | 当前 Prompt 的核心内容 | 当前行为 | 主要风险 |
|---|---|---|---|
| Scene Router | “只理解图片类型、主体、意图和视觉上下文,不评价问题,不提交批改候选。” | 只输出场景理解,不输出问题。 | 场景意图是模型推断,不应被当成用户明确要求。 |
| 四个窄 Reviewer | 每个请求只注入自己的 Rubric 子集:构图、色彩、光线、结构分别处理;都明确允许返回 0 个候选。 | 并行输出带 kind、checkId、证据和置信度的候选。 |
同一个模型仍可能有视觉误判,因此还需要本地门槛和独立复核。 |
| Aggregator | “只能从真实候选中去重、合并和排序;0 个问题合法;主观方向放到 options。” |
最多输出 5 个 issue 和 4 个 option,并带真实 sourceCandidateIds。 |
聚合器仍可能错误引用或混淆候选,必须由本地再次校验。 |
| Grounding | “唯一任务是把已有问题绑定到图片中的位置。” | 继续复用当前云端视觉模型,但作为独立请求,只返回一个主矩形框或 global,并附定位置信度。 |
通用模型可以理解目标,但坐标仍可能偏移,需要候选约束、复核和降级。 |
| Verification | “没有参与前面判断的 fresh visual reviewer”逐项返回 confirmed、uncertain 或 rejected。 |
对已有问题做证据复核。 | 只有在前面已经生成问题后才触发,不能阻止前面的负面偏置。 |
| Prompt Writer | “只为已有问题生成可直接用于局部编辑的提示词;严格依据 target 和 targetDescription。” |
为每个问题输出 issueId 对应的 editPrompt,不新增问题、不生成坐标。 |
提示词仍是模型生成文本,缺失时必须明确提示,不能用本地模板伪装成 AI 结果。 |
当前的“规则匹配”不是一个真正能够看图的确定性规则引擎,而是“Prompt 约束 + 模型返回 checkId + 本地结构过滤”:
buildArtCritiqueRubricPrompt()会按 Reviewer 注入对应 Rubric 子集;完整 Prompt 才会附带四类规则和参考方法,每条规则都包含check、flagWhen、适用图片类型、最低置信度、证据要求和合并关键词。- Reviewer 返回
checkId、类别、观察、原因、证据、严重程度、置信度和目标区域描述。 - 本地解析会过滤未知规则、类别不匹配、Reviewer 越权、缺少证据、低于规则最低置信度的候选,并在场景识别后按图片类型继续过滤。
- 聚合结果会严格校验
sourceCandidateIds必须真实存在,且同一个聚合项的来源必须是同类别、同kind的候选;否则过滤该结果。通过来源校验后,本地还会按来源交集和同根因主题做保守去重合并。issue和option分开排序与展示。 web/src/lib/art-critique/review.ts仍保留旧的单次批改适配,但数量提示已改为允许 0 个可靠问题;当前弹窗默认使用多阶段管线。
所以测试中出现“没有明显问题也一定挑毛病”,并不一定是某一条构图规则写错,更可能是以下组合:规则清单过宽、模型被要求持续寻找可报告项、confidence 是模型自报而非校准值,以及聚合器可以重新创造问题。当前实现已通过窄 Rubric、0 问题约束、issue / option 分离、候选来源校验和独立复核逐层收紧。
6.2 准备阶段
- 检查是否有可读取的图片,没有图片时不发起模型请求。
- 从现有资源系统读取 data URL 或可访问的媒体数据。
- 生成轻量输入指纹,不把图片 URL、Cookie 或完整图片内容写入节点状态。
- 读取可选的创作上下文和当前 Rubric 版本。
- 启动轻量的 Scene Router 与四个窄 Reviewer;Scene Router 只负责判断图片类型、主体、可见性、可能的创作意图和需要启用的检查通道,不产生问题,不得输出“画面缺陷”。
6.3 更多并行的窄职责 Reviewer
Scene Router 与 Reviewer 并行启动;Reviewer 先依据原图和默认场景上下文工作,场景结果返回后再由本地按图片类型过滤候选。每个 Reviewer 使用 Promise.allSettled 并只接收自己的 Rubric 子集,不再接收全量规则:
- Composition / Narrative Reviewer:主体位置、视觉平衡、留白、视觉动线、裁切、景深,以及这些选择是否损害当前表达。
- Color / Palette Reviewer:主辅色关系、冷暖、明度、饱和度、色彩分离;不评价光源方向和人物结构。
- Lighting / Exposure Reviewer:光源方向、曝光、局部对比、体积、主体光线分离;不重复评价构图和色彩偏好。
- Structure / Anatomy / Geometry Reviewer:人物比例、物体相对尺寸、透视、遮挡、细节一致性;先并行检查,再依据场景类型、规则适用性和可见证据过滤候选。
后续可针对插画或 AI 生成图增加独立的 Artifact / Style Consistency Reviewer,但不作为第一版默认通道。Reviewer 只返回“可靠候选”或明确的 clean,不生成最终总结、坐标和修图 Prompt。
这里的“更多并行”不要求立刻采购多个模型。即便四个请求暂时使用同一个模型,它们也拥有独立上下文、独立职责和独立规则,注意力负担已经从“一次处理全部审美维度”降为“一次只判断一个维度”。后续有条件时,再为结构或技术检查配置更适合的专用模型。
6.4 反“鸡蛋挑骨头”的 Reviewer 合同
每个 Reviewer 的系统 Prompt 必须明确以下底线:
你的任务不是证明图片有问题,而是判断是否存在“有证据、影响表达、值得现在修改”的问题。
允许返回 0 个问题;不要为了覆盖规则、满足数量或显得有帮助而制造问题。
只有同时满足以下条件才提交候选:
1. 能指出图片中看得见的具体事实;
2. 能说明这个事实如何影响当前主体、叙事、视觉层级或可信度;
3. 能提出针对这个事实的可执行修改动作;
4. 判断不是个人偏好、风格选择、正常透视或看不清的细节。
没有创作意图时,主观构图和色彩判断只能作为“可选方向”,不能写成错误。
如果证据不足、影响很小、或你无法排除这是有意为之,请不要提交候选。
本地还要设置硬门槛,不能只相信模型自报的 confidence:
| 门槛 | 规则 | 不满足时 |
|---|---|---|
| 规则适用 | checkId、类别、Reviewer 通道和图片类型全部匹配 |
丢弃候选 |
| 证据完整 | 至少有一个具体可复核的画面事实,并有影响说明 | 丢弃候选 |
| 意图关系 | 没有用户意图时,主观项必须标为可选方向;只有明确损害表达才进问题列表 | 降级为 option 或丢弃 |
| 候选来源 | 聚合问题的 sourceCandidateIds 必须是已存在候选的子集 |
丢弃该聚合问题 |
| 数量 | 0~5 是上限,不是目标;允许输出“未发现需要优先修改的问题” | 不补问题 |
| 复核 | uncertain 不能显示成确定性错误;高置信度 rejected 必须过滤 |
过滤或标记待确认 |
建议把输出分成两类:issue 是有充分证据且值得修改的问题;option 是“如果你想往某种风格走,可以考虑”的方向。option 不使用红色错误标记,也不计入问题数量。这样模型即使有审美建议,也不会把每个建议都包装成缺陷。
6.5 保守聚合阶段
聚合器的职责收缩为“编辑已有候选”,而不是第二个批评家:
- 只能引用和合并已有候选,不能凭空创建新的问题。
- 删除重复问题,保留共同根因和最清楚的证据。
- 对客观结构问题和主观审美方向分别处理,不把个人偏好升级为错误。
- 如果没有候选通过门槛,输出清晰的“未发现需要优先修改的问题”,并保留真实优点;不为了让报告看起来完整而补问题。
- 只有
issue才进入定位和复核;option作为低强调建议展示。
如果聚合调用失败,使用本地规则整理已经通过硬门槛的候选;如果所有 Reviewer 都失败,则整体任务失败,不伪造报告。
6.6 云端通用模型 Grounding(第一版方案)
第一版不再要求审美 Reviewer 同时负责精确坐标,也不部署本地视觉定位模型。定位阶段继续复用现有云端通用多模态模型,但使用独立请求和更窄的输出合同:它只绑定已有问题,不重新评价图片,也不创建新问题。
这里的“精准”定义为:返回一个能解释问题证据的矩形区域,而不是承诺框住每一个异常像素。第一版只向用户展示 box 和 global;现有合同中的 point、points、polygon 暂不作为云端定位器的输出,未来有专用模型时再开放。
6.6.1 四类请求的职责
Request A:审美判断
图片 + 创作意图 + Rubric
-> issue、checkId、evidence、targetDescription
Request B:区域定位
图片 + 场景 + 已有 issue
-> 每个 issue 一个 box 或 global + groundingConfidence
Request C:位置复核
图片 + issue + box 对应的裁剪/标注预览
-> confirmed / uncertain / rejected
Request D:AI 修改提示词
图片 + 场景 + issue + 已定位的区域 + 修改建议
-> 每个 issueId 一个可直接用于局部编辑的 editPrompt
Request A 的 targetDescription 必须是可定位目标,而不是抽象结论。例如:
“主人物的脸部区域”
“画面右上角的高光背景”
“前景桌面上的物体”
“主体与右侧画面边缘之间的留白关系”
不要把“视觉平衡差”“色彩不统一”“氛围不够集中”直接作为定位短语;这类问题应由审美模型先指定可见证据对象,定位器再框出该对象。若不存在稳定的局部证据,直接返回 global。
6.6.2 定位输出合同
逻辑格式如下,实际传输继续适配现有的 ArtCritiqueTarget:
{
"issueId": "human-proportion",
"target": {
"type": "box",
"points": [
{ "x": 0.42, "y": 0.48 },
{ "x": 0.61, "y": 0.76 }
]
},
"groundingConfidence": 0.86
}
约束如下:
- 坐标使用原图左上角
0,0、右下角1,1的归一化坐标,不使用展示容器坐标。 box只使用左上角和右下角两个点,并校验边界、宽高和方向。- 每个
issue默认只有一个主矩形框;多个互不相连的区域不强行包成一个大框,必要时拆成独立问题,否则降级为global。 groundingConfidence只能作为筛选信号,不能代替验证;模型自报高置信度不等于位置正确。- 参考区域坐标必须标记为
reference,不能伪装成云端模型检测结果。
6.6.3 按审美维度选择定位策略
| 审美维度 | 定位器寻找的证据对象 | 位置判断方式 |
|---|---|---|
| 构图与视觉层级 | 主体、前景、背景、视觉焦点、边缘干扰物 | 云端模型返回对象框;主体位置、留白和边距由审美模型解释,必要时由本地几何逻辑计算。 |
| 色彩 | 主体、背景、局部色块或明显跳出的区域 | 先框出可见对象,再用原问题和局部裁剪复核;没有稳定色块目标时使用 global。 |
| 光线 | 脸部、主体、高光、阴影、背景光区 | 优先框出受影响主体或光区;不要把整张图的光照判断伪装成局部框。 |
| 比例、结构与透视 | 人物、脸、手、物体、建筑结构或透视参照物 | 框出实体后再判断比例、遮挡和透视关系;不让定位器单独判断“是否畸形”。 |
对于主体偏移、物体相对大小和边距等问题,矩形框表示“被评价的主体/证据对象”,不是数学意义上的“错误像素”。这能让标注既能解释问题,又不会制造虚假的精确感。
6.6.4 复核与降级
复核请求应同时看到原图、问题文本和候选框对应的局部区域,重点确认:
- 候选框内是否包含问题描述中的对象。
- 框内是否有支持问题的可见证据。
- 框是否偏离主体、落在相邻对象或只覆盖无关背景。
- 这个问题是否其实是全局关系,而不是局部缺陷。
通过本地几何校验且复核为 confirmed 时,targetSource 才记为 model。复核为 uncertain 时保留文字问题但显示待复核提示;复核为 rejected 时过滤该标注。云端 grounding 失败、框无效或置信度不足时,优先使用带来源提示的参考区域;没有明确位置线索才使用 global。
这套方案与 Grounding-IQA 的“质量描述 + 局部区域问答”任务拆分一致,也吸收 Q-Ground 对质量 grounding 单独训练和评估的做法;但第一版仍使用当前云端通用模型,暂不引入它们的专用训练模型。
6.6.5 云端模型调用边界
第一版不锁定某一家云端模型,也不新增专用模型服务;继续使用当前配置和现有请求适配。被选中的云端模型必须满足:
- 支持图片输入,并能看到原图而不是只接收文字描述。
- 支持函数调用或等价的严格结构化输出。
- 能接收原图、场景上下文和已有问题,单独执行 grounding。
- 能在复核请求中理解“问题文本 + 候选框对应区域”的关系。
同一个云端模型可以承担审美分析、定位和复核,但三者必须是独立请求、独立系统职责和独立输出合同。这样既保留当前渠道的可替换性,也避免模型在同一次回答中先猜问题、再为自己的猜测补坐标。
如果某个渠道不支持严格结构化输出或对图片细节支持不足,不应在前端增加特殊解析和坐标修补逻辑;应切换模型配置或降级为参考区域/全局。
6.7 独立复核阶段
复核器不参与前面的判断,只逐项检查:
- 问题是否真的有图像证据。
- 问题是否会影响主体表达或视觉层级。
- 位置是否与问题描述一致。
- 是否把正常透视、特殊技法或创作意图误判为错误。
被明确判定为不可靠且置信度足够高的问题被过滤;不确定的问题保留,但在界面上标为“待复核”。当最终没有可靠问题时,界面应显示正常的“本轮未发现重点问题”空状态,而不是错误状态。
6.8 AI 修改提示词阶段
Grounding 完成后,Prompt Writer 与独立复核并行运行。它接收原图、场景上下文、已有问题、target、targetDescription 和结构化建议,只负责把这些信息写成可直接交给图像编辑模型的自然语言指令:
- 每个返回项必须通过
issueId对应已有问题。 - 必须说明修改区域、要解决的问题、具体动作、必须保留的主体/构图/风格和预期效果。
- 不重新评价图片,不新增、合并或删除问题,不生成坐标 JSON,不输出 Markdown 代码块。
- 结果写入
issue.editPrompt;详情页只有在该字段存在时启用“复制提示词”。请求失败或返回不完整时保留报告,但不使用本地模板冒充 AI 生成结果。
6.9 建议阶段
每个 issue 的建议必须回答四件事:
- 这次修改的目标是什么。
- 创作者具体要做什么,例如移动主体、裁切、调整视角、改变局部光线或重生成。
- 哪些已有优点必须保留。
- 改完后预期会有什么变化。
option 只需要说明适用的风格方向和可能收益,不应使用“必须”“错误”“需要修复”等措辞。这一步的产物应当能直接复制到下一轮图片生成或修图 Prompt 中。
7. 评分和知识库策略
7.1 不采用单一总分
单一分数容易制造“审美有标准答案”的错觉,也不利于解释为什么要修改。建议第一版使用:
- 问题类别。
- 严重程度:优先处理、建议处理、可选优化。
- 判断置信度。
- 位置置信度。
后续如果需要排序或批量筛选,可以增加构图、光线、色彩、技术质量等维度分数,但不默认合成为一个总分。
7.2 Rubric 先本地化
第一版采用版本化的本地 Rubric,作为稳定的评价框架;不在每次请求时抓取互联网内容。这样可以保证:
- 同一张图重跑时标准相对稳定。
- 不引入不可信或互相矛盾的网页内容。
- 便于测试、回归和解释报告。
- 后续可以按项目、品牌或导演风格替换 Rubric。
知识库或 RAG 可以作为后续增强项,用于补充摄影教学内容,不应直接决定问题是否成立。
8. 画布数据合同
8.1 输入
type ArtCritiqueInput = {
imageNodeId: string;
sourceFingerprint: string;
imageData: string; // 只在请求生命周期内使用
intent?: {
imageType?: string;
purpose?: string;
focus?: string;
style?: string;
preserve?: string[];
};
};
8.2 报告
报告至少包含:
summary:整体判断。strengths:已有优点。issues:最多 5 个重点问题;没有可靠问题时可以为空。options:最多 4 个可选风格方向,不计入问题数量。category、severity、confidence:问题分类和可信度。target:第一版主要使用归一化的矩形框或全局范围;现有合同保留点、多点、多边形的兼容空间,但云端通用 grounding 暂不输出它们。定位失败时可为带明确提示的参考区域。suggestion:目标、动作、保留项、预期效果。editPrompt:由独立 AI Prompt Writer 根据最终问题和定位区域生成的局部编辑提示词;缺失时不使用本地拼接替代。sourceFingerprint:报告对应的图片版本。rubricVersion、createdAt、modelLabel:可追溯信息。pipelineWarnings、verificationSummary:降级和复核信息。
8.3 节点状态和过期
- 报告保存到节点 metadata 中,不保存原图二进制。
- 节点保存输入节点 ID 和输入指纹。
- 输入图片变化后,报告显示为
stale,不能继续伪装成最新报告。 - 刷新画布后,已完成报告可以恢复。
- 取消时恢复为可再次运行的状态,不留下半份成功报告。
9. 后续输出设计
第一版可以保持“分析终点”形态,先保证体验完整。第二阶段建议增加可选的逻辑输出,而不是默认输出图片:
| 输出 | 用途 |
|---|---|
report |
给报告查看器、历史记录或导出使用。 |
nextPrompt |
将重点问题和修改动作转成下一轮生成/修图提示词。 |
approved / rejected |
用于自动质检和失败重试;不能只由审美总分决定。 |
retakeContext |
将本次问题、目标和成功检查传给下一张重拍或重生成图片。 |
其中 approved / rejected 需要补充通用插件输出协议,不能只在本节点内部临时实现。
10. 版本规划
P0:当前已接通
- 在画布项目页挂载
AiArtCritiqueModal。 - 在
CanvasNodeActionContext.Provider注入openArtCritique。 - 复用现有节点 metadata 更新和画布保存机制。
- 支持插件启用、图片连接、弹窗打开、开始/取消/失败/重试。
- 专项测试覆盖节点注册、入口菜单、报告解析、窄 Rubric、来源过滤和标注降级。
当前代码已经有插件清单、节点渲染器、报告合同、分析管线、弹窗组件和画布页面接线;浏览器中的真实模型调用仍需要按部署环境做人工冒烟。
P1:当前可靠性版本与后续增强
- 已将全量 Rubric 改为按 Reviewer 通道注入的窄 Rubric,拆成构图、色彩、光线、结构四个并行 Reviewer。
- 已删除“必须输出 3~5 个问题”的数量暗示,允许 Reviewer 和最终报告返回 0 个问题。
- 已增加
issue/option语义和本地候选硬门槛,聚合器只能引用真实候选,不能凭空新增问题。 - 采用云端通用多模态模型的独立 grounding 请求:审美 Reviewer 输出
targetDescription,Grounding 只返回一个矩形框或global,不新增问题。 - 将 grounding 复核输入明确为“原图 + 问题 + 候选框对应区域”,并区分
model、reference、global三类定位来源。 - 待增加轻量创作意图上下文,让主观判断有更明确的参照。
- 待将“下一步动作”和“成功检查”加入报告。
- 已在问题详情的“改进”区域提供“复制提示词”动作;文本由独立 AI Prompt Writer 生成,且与 Verification 并行执行,前端不再本地拼接提示词。
- 已明确显示报告依据的图片和 Rubric 版本。
- 已优化定位失败、模型部分失败和取消时的提示。
P2:接入画布创作闭环
- 增加
nextPrompt和retakeContext逻辑输出。 - 支持从报告直接创建新的修改 Prompt 或图片生成任务。
- 保存原图、修改版和批改报告之间的关系。
- 用同一套 Rubric 比较前后版本,并计算变化;分数差异由本地确定性逻辑计算,不能完全交给模型。
P3:批量和自动质检
- 增加低成本技术预检,例如清晰度、曝光、色彩和主体可见性。
- 支持批量图片筛选和最佳候选排序。
- 支持
approved/rejected分支和有限次数自动重试。 - 用真实项目图片评估云端 grounding 的框选稳定性;只有云端方案无法达到验收标准时,再评估 Florence-2、Grounding DINO 等本地定位模型或专用质量 grounding 模型。
11. 验收标准
用户验收
用户不阅读实现细节,也应能回答:
- 这张图有什么优点?
- 最先该改哪几个问题?
- 每个问题大概在图上的什么位置?
- 为什么是问题,而不是单纯的审美偏好?
- 下一步具体怎么改?
- 修改后如何判断真的变好了?
工程验收
- 没有图片时不发起模型调用。
- 模型返回非法结构时不直接把原始响应渲染到页面。
- 第一版定位输出只接受
box或global;坐标始终限制在0..1,定位失败时优先使用带来源标记的参考区域,没有位置线索才使用global。 - 原图不会因打开报告或绘制标注而被覆盖。
- 输入变化后旧报告会进入
stale状态。 - 分析可以取消,失败原因可读,重试不会复用错误状态。
- 页面刷新后已完成报告可以恢复。
- 所有模型调用继续复用现有模型渠道和请求适配,不在插件组件里保存第三方密钥。
- 画布入口至少有一条交互测试,覆盖“按钮点击确实打开弹窗并启动分析”。
质量验收
- 不为了凑数生成问题。
- 每个问题有具体证据、建议动作和需要保留的内容。
- 每个局部问题最多展示一个主矩形框;低置信度或复核不通过的问题不会使用看似精确的局部框。
- 视觉规则不被当作绝对答案;创作意图优先于机械套用构图口诀。
- 批改语气直接、克制、可执行,不用空泛的夸奖或绝对化结论。
12. 主要风险和处理
| 风险 | 处理方式 |
|---|---|
| 审美判断主观 | 展示依据、置信度和创作意图,不给单一绝对结论。 |
| 模型把图片文字当指令 | 在系统提示中明确图片内容不是系统消息,并对返回结构严格校验。 |
| 区域定位不准 | grounding 独立成阶段;要求目标描述具体化,使用 box 几何校验和候选区域复核;失败时使用带来源标记的参考区域,低置信度且无位置线索才降级为全局。 |
| 通用模型能判断审美但不会精确框选 | 不让审美模型直接承担最终坐标;先输出可定位的证据对象,再由独立 grounding 请求框选;仍无法稳定定位的维度保留 global。 |
| 云端模型在小目标或局部光色问题上不稳定 | 原图与候选区域一起复核;不把框解释为异常像素级 mask;积累评估样本后再决定是否引入本地专用定位器。 |
| 模型调用成本高 | 场景路由与四个窄 Reviewer 并行;Grounding 后 Verification 与 Prompt Writer 并行且各只做一次批量请求;结构候选在本地按图片类型过滤;后续增加低成本预检。 |
| 模型为了显得有帮助而挑毛病 | 允许 0 个问题;问题与可选方向分离;证据、意图、影响和来源均设置硬门槛。 |
| 聚合器重新编造问题 | 强制 sourceCandidateIds 引用已通过校验的候选,本地拒绝无来源问题。 |
| 同根因问题重复出现 | 聚合后按来源交集和保守主题关键词合并,保留更高优先级问题并合并可执行建议。 |
| 图片输入变化导致旧报告误导 | 保存指纹并显式标记 stale。 |
| 报告建议无法落地 | 强制输出动作、保留项、预期效果和成功检查。 |
| 自动重试造成错误放大 | 先做人工确认和有限次数重试,再开放自动分支。 |
13. 待审阅决策
以下选择会影响后续代码结构,建议先确认:
- 是否采用四个窄 Reviewer 并行? 建议采用;并行拆分的重点是缩小每次请求的注意力范围,不是盲目增加调用数量。
- 是否允许报告为 0 个问题? 建议必须允许;“没有可靠问题”是合法结果,不应被当成模型失败。
- 是否把主观建议和确定性问题分开? 建议分成
issue与option,只有前者进入红色标注、定位和复核。 - 是否加入创作意图输入? 建议加入,但全部可选,默认仍可直接批改。
- 是否加入维度分数? 建议第一版不加总分;如有批量筛选需求,再加维度分数。
- 是否马上增加输出连线? 建议 P0 保持分析终点,P2 再补
nextPrompt、retakeContext和质检分支。 - 是否马上接入 RAG? 建议先使用版本化本地 Rubric,等真实反馈积累后再接知识库。
- 是否马上支持原图/修改版对比? 建议作为 P2 主线,它比“再生成一张图”更能证明批改是否有效。
- 第一版是否采用云端通用模型做独立 grounding? 建议采用;审美和定位分开请求,定位只输出矩形框或
global,暂不部署本地模型。 - 是否要求第一版框选到异常像素? 不建议;第一版定义为“可解释的证据矩形框”,不是像素级缺陷分割。
14. 最终建议
最小可行路线不是继续堆更多审美检查项,而是先完成这条可靠链路:
接通入口
-> 看懂图片
-> 由窄 Reviewer 并行检查
-> 只保留有证据的重点问题(允许 0 个)
-> 云端独立 Grounding 返回矩形框
-> 用原图和候选区域复核
-> 给出可执行动作
-> 能进入下一轮创作
-> 能比较改前改后
因此建议优先级为:
- 修复当前画布入口缺口,让已有 MVP 真正可用。
- 加入可选创作意图和“成功检查”。
- 将报告动作接到下一轮 Prompt 或生成节点。
- 增加原图与新版本比较。
- 用真实样本评估云端框选稳定性;只有达不到验收标准时,再考虑本地定位模型、专用质量模型和自动重试。