基础篇
进阶篇
高频篇
精选篇
手写篇
面经篇
AI 篇
原理篇
每日一题
小程序题库
知识卡片
  • 场景篇按分类整理的大前端场景考点
  • 历年面经按年份追踪真实考点
  • 算法题库NEW在线编码即时判题
  • 专项自测100 题快速查漏
  • 前端基础
    • HTTP从报文一路讲到 HTTPS
    • 浏览器渲染、事件循环、进程
    • 计算机基础Linux、网络、操作系统
  • 进阶专项
    • 设计模式23 种模式怎么用
    • 前端系统进阶学习大型项目工程化
    • 前端综合文章长期沉淀的实践文
  • 工程与工具
    • Node学习指南从环境搭建到服务端
    • NPM工作流script、依赖与发布
    • Docker容器化部署上手
    • Canvas图形与动画实战
  • 路线与导图
    • 思维导图知识点全景图
    • 学习路线按图索骥不跑偏
  • 动态
    • 公众号动态公众号历史文章
    • 博客动态站长的技术博客
    • 开发者导航常用工具与文档站
  • AI 助手随时提问,即时解析
  • AI 模拟面试模拟真实面试 + 报告
  • AI 知识地图串起全站知识点
  • AI 定制路线按你的简历现排
AI 热点
旧版
AIHT
内容
精选全部 AI 动态热点榜AI 日报收藏
分类
模型行业编程产品技术观点开源
更多
Agent 接入
返回首页开发者导航
AIHT
精选 / 资讯详情
8.0
热点
AI SCORE
技术实践2026-10-31 11:47

用策略映射适配图像模型并实现失败兜底

dev.to · AI#提示词#图像生成#容错
Editor brief · 编辑速览

文章用代码展示如何在用户意图与模型调用之间加入策略映射,针对不同图像模型调整提示词重点。AI 调用失败时,通过确定性逻辑生成可用提示词。

文章思维导图
Knowledge map
拖拽缩放
AI deep read

AI 深度解读

同一个画面描述,换个图像模型,效果可能就变了。作者给出的办法,是在用户需求与模型之间加一层「模型策略」:主体保持一致,再按目标模型补上不同的表达重点,用共享骨架组装提示词,最后交给 LLM 润色。

这篇更值得程序员看的,是它的工程取舍:模型差异如何维护,AI 服务失败后怎样继续交付,以及示例库怎样帮助用户验证效果。不过,代码能证明流程跑得通,不能证明作者对七个模型的判断都经过了充分测试。

七个模型,为什么不维护七套模板

作者用一个简单需求贯穿全文:木桌上的陶瓷咖啡杯,旁边放着笔记本电脑,晨光从窗户照进来。切换模型时,这些内容无需变化,需要调整的是提示词的强调顺序。

他们把差异放进 MODEL_STRATEGY,每个模型对应一句策略:

  • GPT Image 2 强调现实知识、准确文字、精确构图和细节一致性。
  • GPT Image 1.5 强调摄影真实感、自然光、清晰主体,并减少复杂文字。
  • Nano Banana Pro 强调创意探索、复杂场景、多图融合和风格化。
  • Seedream 5 Pro 强调可控编辑、可读文字、局部修改和商业设计。
  • Seedance 2.0 强调关键帧、分镜、动作节点、镜头语言和运动方向。
  • Grok Imagine 强调社交传播、视觉反差和一秒内能抓住注意力的画面。
  • Gemini 3 Pro 强调复杂指令、多模态推理、信息结构和长上下文一致性。

这些是作者采用的策略描述,原文没有提供逐项验证它们的对照实验。

策略表解决的是维护问题。七套完整模板容易各自演化:公共构图规则修了一处,其他六处可能还留着旧版本。抽成共享骨架后,公共要求集中维护,模型差异也更容易审查。

先集中管理差异,再讨论哪种提示词更有效。

共享骨架怎样容纳模型的特殊要求

本地生成器接收 subject、model、ratio,把主体、目标模型、策略、画幅比例和公共约束拼成提示词。下面这段代码完整展示了作者的做法:

function buildLocalPrompt({ subject, model, ratio }) {
  const lines = [
    `Subject: ${subject}`,
    `Target model: ${model}`,
    `Model strategy: ${MODEL_STRATEGY[model] || "Create a high-quality visual result based on the model's strengths."}`,
    `Aspect ratio: ${ratio}`,
    "Composition: clear subject, readable foreground/midground/background layers, enough negative space, complete lighting and material details.",
    model === "Seedance 2.0" ? "Seedance keyframe note: write a single image as a video keyframe with a clear action moment, motion direction, lens focal length, and dynamic tension." : "",
    model === "Seedance 2.0" ? "Optional storyboard extension: for video, add 3-5 shots and specify framing, subject action, camera movement, duration, and transition for each shot." : "",
    "Text rule: if text appears in the image, keep it short, readable, and naturally integrated with the layout.",
    "Quality rule: no watermark, no extra distortions, no broken fingers, wrong perspective, messy background, or low-quality texture.",
    "Replaceable variables: swap [subject], [brand/person], [scene], and [text] with your specific need.",
  ];
  return lines.filter(Boolean).join("\n");
}

重点看最后的 filter(Boolean):模型专属规则不适用时返回空字符串,最终统一过滤,共享流程无需复制。遇到未知模型,策略行还有通用描述兜底。

Seedance 2.0 的条件行要求把静态图当作视频关键帧,补充动作瞬间、运动方向、焦距和动态张力;如果扩展成视频,再给出 3-5 个镜头,逐个说明取景、动作、运镜、时长和转场。

末尾的 [subject]、[brand/person]、[scene]、[text] 则提示用户哪些内容可以替换。它只提供替换说明,并没有实现变量插值。

选择 Seedream 5 Pro 后生成的咖啡杯提示词

工具支持中文和英文输出,以及 1:1、4:5、9:16、16:9 四种比例。比例会写进提示词,但原文没有展示把它转换成各家图像服务原生参数的过程,不能据此认定最终图片一定按指定尺寸生成。

AI 负责润色,本地规则负责保底

作者在 Cloudflare Worker 中提供 /api/generate-prompt,将相同的主体、目标模型、比例和模型策略发给聊天模型,生成更自然的提示词。

系统指令要求只返回最终提示词,不加解释、Markdown 或标题,并覆盖场景、构图、镜头、光照、材质、风格、文字规则和质量约束。生成参数是 max_tokens: 900、temperature: 0.75。这些是作者的配置选择,原文没有展示参数比较。

入口也做了约束:Origin 必须在 ALLOWED_ORIGINS 中,否则返回 403;主体去除首尾空白、合并空白字符后,限制为 3,000 个字符;模型名上限为 80,比例上限为 20。缺省模型和比例分别为 GPT Image 2、1:1。

真正决定失败体验的是客户端这段代码,它在请求 AI 前先生成本地结果:

async function generatePrompt() {
  const localPrompt = buildLocalPrompt({ subject, model, ratio });
  try {
    const prompt = await requestGeneratedPrompt({ subject, model, ratio });
    render(prompt, "Generated by AI");
  } catch {
    render(localPrompt, "Generated locally");
    showToast("Live generation failed. Showing a local prompt instead.");
  }
}

要看的是 try 之前的 buildLocalPrompt:上游密钥过期、触发限流或网络失败后,页面仍有可复制的内容,并用 Generated by AI、Generated locally 区分来源。

AI 调用失败后,用户仍然能拿到一份结构完整的提示词。

但标题里的「永不失效」需要收窄理解。代码没有展示超时控制;请求一直不结束,就不会进入 catch。它也没有展示成功响应的内容校验,空结果或不合要求的文本是否触发回退,原文没说清。

作者还把真实示例放在生成器下方,帮助用户检查提示词与画面的对应关系。

支持模型与分类筛选的提示词库

索引收录了 3,493 条提示词,支持筛选、排序,以及按作者、模型或关键词搜索。数据按模型拆成 JSON 文件,通过 IntersectionObserver 随滚动延迟加载,避免首屏下载整个库。

同时展示图片、完整提示词与作者来源的卡片

卡片保留作者和来源,首页的 Try it 按钮能把示例复制到生成器,再修改模型或比例。作者也提醒,商业复用前应检查对应来源;注明出处不等于获得授权。

我的判断

我认可它把可预测规则与生成式润色拆开的做法。对于提示词工具,本地结果已经能交付核心价值,LLM 可以改善措辞,产品也就不必把全部可用性押在一次远程请求上。

相比七套独立模板,这种结构更容易保持公共规则一致。不过,「每个模型一句话」适合表达风格偏好,未必足以覆盖不同服务的能力边界。如果以后涉及原生尺寸参数、编辑接口或不同输入格式,还需要独立的适配代码。

效果判断则要保留。原文没有同一主体的七模型成图对照,没有盲评、重复生成记录,也没有失败率数据。「自然段提示词通常更好」和各模型擅长什么,目前只能视作作者的经验。示例库能帮助理解,却不能替代控制变量的比较。

安全上也有一个明确边界:Origin 白名单可以限制浏览器中的跨站调用,但不能充当身份认证,非浏览器客户端可以构造这个请求头。若接口要承担公开流量,还得结合实际需求考虑鉴权、限流和额度控制。

能拿来做什么

  • 做多模型提示词工具时,可以先抽出共享骨架,把模型偏好集中到策略表中维护;用固定的一组需求比较修改前后的成图,再决定策略是否保留。
  • 在前端接入 AI 润色时,可以提前生成本地版本,并明确显示结果来源;同时补上请求超时和响应校验,让回退条件覆盖真正影响使用的情况。
  • 用 Node 或 Worker 包装生成接口时,可以参考原文的字段长度限制、默认值和纯文本输出约束,再按业务补充模型白名单与访问控制。
  • 建立提示词示例库时,可以同时展示图片、完整提示词、作者和来源,并按模型拆分加载;让用户有依据地修改提示词,也能追溯复用条件。
Original source

本文由 AI 通读原文后重新编写,观点部分为站内判断,细节以原文为准,来源 dev.to · AI,原文版权归原作者所有。

阅读原文
上一篇
用RRF融合关键词与向量检索
下一篇
用表筛选与错误重试提升文本转 SQL

资讯速览

dev.to · AI · 2026-10-31 11:47

AI 评分 8.0 / 10

相关标签

#提示词#图像生成#容错

继续阅读

  • 让 AI 编程更可靠的项目协作习惯
  • 用RRF融合关键词与向量检索
  • 用表筛选与错误重试提升文本转 SQL
  • Docker 内启用 Claude Code 沙箱的陷阱
  • 为大模型缓存建立可验证的失效规则