一、执行摘要
方案采用“视觉分析 IR → 提示词编译 → 模型适配 → 质量验证”的编译器式架构,避免把全部责任压在单次大模型调用上。
核心问题
同一张图,不同模型容易遗漏构图、镜头、材质、光影和负面约束,导致提示词不可复现、不可评估。
核心解法
先生成与模型无关的结构化视觉中间表示,再编译成 Midjourney、SDXL、Flux、即梦等目标格式。
核心收益
可观察每阶段质量、可替换底层模型、可回放失败任务,并通过反馈数据持续优化提示词模板。
二、问题定义与约束
业务目标
- 上传单张图片,输出中英文可复用提示词。
- 输出标题、简介、画幅、正向提示词、负向提示词和结构化标签。
- 强调“高度复刻原图”,减少模型自由发挥。
- 支持批量导入提示词站、人工编辑和版本追踪。
非功能约束
- 单图 P95 处理时间目标:15 秒以内。
- 文件大小限制、EXIF 清理、内容安全检测。
- 供应商 API 不稳定时可重试、降级和回放。
- 提示词结果必须具备可解释来源和质量分。
关键难点
| 难点 | 表现 | 设计应对 |
|---|---|---|
| 视觉信息密度高 | 主体、场景、构图、镜头、光影、材质同时存在 | 分维度抽取,禁止只生成自然语言长段落 |
| 模型格式差异 | 不同生图模型对词序、权重、参数敏感 | 建立 Target Model Adapter |
| 复现性不可直接验证 | “描述得像”不代表“生成得像” | 加入反向生成与图像相似度评估 |
| 大模型偶发幻觉 | 补充原图不存在的饰品、背景或风格 | Grounding 校验 + 置信度 + 人工确认 |
三、核心工作流
工作流将一次请求拆成七个可观测阶段,每一阶段都可独立重试、缓存和评估。
四、系统架构
推荐部署
Cloudflare Pages + Worker + D1 + R2 承载用户端和业务 API;复杂视觉推理通过模型网关调用云端 API 或独立 GPU Worker。
边界约束
Worker 不直接承载长时间 GPU 推理;领域层不依赖具体模型 SDK,避免未来更换模型时重写业务流程。
五、领域模型与职责边界
ReverseTask 聚合
维护任务状态机、输入图片、当前阶段、重试次数和最终发布版本。
Invariant 同一任务只能有一个已发布版本。
VisualPromptIR 值对象
不可变结构,表达主体、场景、构图、镜头、光线、材质、色彩与负面约束。
Invariant 关键维度必须带置信度与证据来源。
PromptVersion 实体
记录模型版本、模板版本、人工编辑、评分和发布时间,支持 A/B 对比。
Invariant 发布内容必须通过最低质量门禁。
状态机
UPLOADED → PREPROCESSED → ANALYZED → COMPILED → VALIDATED → SCORED → REVIEWED → PUBLISHED
任何阶段失败进入 FAILED_RETRYABLE 或 FAILED_FINAL;只有幂等阶段可自动重试。
六、结构化视觉中间表示
VisualPromptIR 是系统的稳定核心。模型只是产生 IR 的工具,最终提示词由确定性的编译器生成。
七、提示词编译器设计
编译顺序
- 主体与身份特征
- 姿态、动作与表情
- 服装、材质和局部细节
- 场景与背景
- 构图、镜头与景深
- 光线、色彩与风格
- 质量词、平台参数与负面词
编译策略
- 事实性描述优先于审美修饰。
- 低置信度信息不进入强约束词。
- 同义词去重,避免重复堆叠。
- 按目标模型控制词序、长度、权重语法。
- 中文与英文从同一 IR 分别编译,禁止互译串行造成语义损失。
目标模型适配器
| 目标 | 适配重点 | 输出示例 |
|---|---|---|
| 通用自然语言 | 完整、清晰、便于人工编辑 | 分段描述 + Negative Prompt |
| SDXL / Flux | 高信息密度、材质和镜头词、负向约束 | 逗号词组 + 参数字段 |
| Midjourney | 风格、画幅、stylize、chaos 等参数 | Prompt + --ar 3:4 |
| 国内平台 | 中文语义清晰、避免不支持的参数语法 | 中文自然语言描述 |
八、质量评估体系
单纯检查 JSON 完整度不足。质量评估需要同时覆盖“描述是否忠实”和“提示词是否能复现”。
离线指标
| 字段完整度 | 关键 IR 字段覆盖率 |
| 视觉忠实度 | VLM Judge 对原图与 IR 的一致性评分 |
| 幻觉率 | 原图不存在但提示词出现的属性比例 |
| 跨模型稳定度 | 不同视觉模型生成 IR 的一致性 |
| 复现相似度 | 反向生图后 CLIP / DINO / 人工评分 |
在线指标
| 用户编辑率 | 发布前被修改的字段比例 |
| 复制率 | 生成后提示词被复制的比例 |
| 发布率 | 任务完成后被正式发布的比例 |
| 重试率 | 用户主动重新生成的比例 |
| 人工回退率 | 低分任务进入人工修正的比例 |
质量门禁示例
自动通过,可直接发布。
进入轻量人工确认。
自动重试或切换模型。
九、可靠性、可观测性与安全
可靠性
- 按阶段幂等键去重。
- 指数退避重试与死信队列。
- 供应商级熔断和配额保护。
- 结果缓存按图片哈希 + 模型版本命中。
可观测性
- 每阶段 traceId 与耗时。
- 记录模型、模板和 Schema 版本。
- 监控成功率、P95、Token 成本、重试率。
- 保留原始模型响应用于审计。
安全与隐私
- 上传前端限制和服务端 MIME 二次校验。
- 移除 EXIF 与地理位置信息。
- 对象存储使用短期签名 URL。
- 敏感图像、未成年人和身份相关场景单独策略。
失败处理矩阵
| 失败类型 | 处理策略 | 是否自动重试 |
|---|---|---|
| 网络超时 / 429 | 指数退避,切换备用模型 | 是 |
| Schema 不合法 | 修复提示 + JSON Repair,仍失败则换模型 | 是 |
| 低质量或高幻觉 | 更严格 Grounding Prompt,再分析一次 | 是,最多 1 次 |
| 内容安全拦截 | 终止流程并返回明确原因 | 否 |
| 人工审核拒绝 | 生成新版本,保留原版本和修改原因 | 否 |
十、架构方案权衡
关键 ADR
ADR-001:采用 VisualPromptIR
Context:模型供应商输出格式和表达方式不稳定。
Decision:引入稳定的领域中间表示,所有模型结果先转换为 IR。
Consequences:增加一次映射成本,但编译、评估和迁移更稳定。
ADR-002:采用模块化单体
Context:团队规模小、领域边界仍在探索。
Decision:单仓库、单部署单元,模块间通过端口交互。
Consequences:部署简单,但必须通过代码规则保护依赖方向。
ADR-003:异步执行长任务
Context:多模型调用耗时和失败率不可控。
Decision:API 创建任务后进入队列,前端轮询或 SSE 获取进度。
Consequences:状态机更复杂,但避免请求超时并支持回放。
ADR-004:规则评分 + 模型评分组合
Context:纯规则无法判断视觉忠实度,纯模型评分不稳定。
Decision:Schema、长度和敏感词用规则;忠实度和幻觉用 VLM Judge。
Consequences:成本略增,但评分更可解释。
十一、接口与数据存储
核心 API
POST /v1/reverse-tasks | 创建逆向任务 |
GET /v1/reverse-tasks/:id | 查询进度和结果 |
POST /v1/reverse-tasks/:id/retry | 失败重试 |
PUT /v1/prompt-versions/:id | 人工编辑 |
POST /v1/prompt-versions/:id/publish | 发布版本 |
核心表
reverse_task | 任务状态、阶段、重试信息 |
image_asset | 原图、缩略图、哈希、元数据 |
visual_prompt_ir | 结构化视觉中间表示 |
prompt_version | 各目标模型提示词版本 |
quality_score | 各维度评分和证据 |
model_invocation | 调用成本、耗时、响应摘要 |
十二、实施与演进路线
规模触发器
| 触发条件 | 演进动作 |
|---|---|
| GPU 任务持续排队,P95 超过目标 | 独立 GPU 调度服务,按模型和显存分队列 |
| 模型供应商超过 5 个且策略频繁变化 | 拆出 Model Gateway 服务 |
| 评估任务计算量大于生成任务 | 拆出 Evaluation Worker,异步回填评分 |
| 团队按业务域分组 | 按任务、模型、评估、内容平台边界拆服务 |
十三、结论
本方案的核心价值,不是把大模型包装成一个接口,而是把不稳定的多模态推理转化为可治理的软件工程流程。 通过稳定的视觉语义中间表示、确定性的提示词编译器、模型适配器和质量闭环,系统能够在保持 MVP 开发效率的同时, 获得可解释、可替换、可评估和可持续演进的架构基础。