AI 图片总是不像 prompt:原因 + 修复路径

模型忽视了 prompt 大部分内容——通常是顺序 / 权重 / 自相矛盾。

你写了一段 40 词的精细 prompt:“金发女性穿红色皮夹克,靠在 1970 年代肌肉车上,黄金时刻、35mm 胶片、轻微动态模糊”。出来的图是一位深棕发的女性穿绿色连衣裙、靠在一辆现代轿车上,时间还是正午。模型没”失败”——它给某些 token 加了大权重、忽略了另一些、剩下的当装饰。修复几乎从来不是加更多词,而是重新排序、删除、消除冲突。

常见原因

按命中率排序。

1. 主体被埋在 prompt 中段

SDXL、Flux、Midjourney v7、Imagen 3 这一档当前都对前面的 token 给更高权重。如果你的 prompt 开头是 golden hour, shot on 35mm film, slight motion blur, blonde woman in a red leather jacket...,模型在读到”金发女性”之前就已经锁定了”黄金时刻胶片感”这个泛概念。

如何判断:你 prompt 里”主体本体”出现在第几个词?超过第 10 个词就太晚了。

2. 风格修饰互相打架

Photorealistic, oil painting, hyper-detailed, watercolor, anime——五种风格抢镜。模型挑 1-2 个赢家、扔掉其余,或者更糟,平均成一锅糊。

如何判断:把 prompt 里描述”怎么画”而不是”画什么”的词数出来。超过两个就在打架区间。

3. 负面词夹在正向 prompt 里

在正向 prompt 里写 “no glasses, no hat, not smiling”——模型 tokenizer 会把 glasseshatsmiling 当成相关词,否定那部分被剥掉。你大概率会得到一副眼镜。

如何判断:在正向 prompt 里搜 nonotwithoutavoid。任何一个出现都是问题。

4. 属性自相矛盾

Tall short womandark blonde hairwearing a t-shirt and a formal gownrunning while sitting。模型挑一个,扔掉另一个。

如何判断:把 prompt 读出声,听有没有自相矛盾的描述。

5. token 权重语法你的模型不支持

(blonde:1.5)[red car]((muscle car))——这是 SD 家族特有的权重写法。Midjourney 完全不理;Flux Pro 也基本忽略。把 SD 教程里的 prompt 复制到 Midjourney 里,半句白写。

6. prompt 超出模型上下文

CLIP(SDXL 用的)有 77-token 上限。超过 77 会被截断或拆分成多 pass 重合并,丢一致性。Flux 上下文大(T5 大约 512 token),但超过 200 也开始退化。

如何判断:数词数。SDXL 超 50 词、Flux/Midjourney 超 150 词就进入风险区。

7. 工具在你看不见的地方改写了 prompt

ChatGPT 图像工具、Canva、一些套壳产品会在传给 DALL-E / Imagen 之前重写你的 prompt。你的”精确”prompt 变成了泛化版。

动手前先确认

  • 把当前 prompt、模型、seed、失败结果都存好。
  • 找出最关键的那个被忽略的属性(主体?颜色?光线?)。修一个具体的失败,比修”全错”容易。
  • 记录用的是什么模型 / 工具——SD 家族和 Midjourney 修复路径不一样。
  • 想清楚被忽略的元素是必须有还是可有可无。
  • 改 prompt 模板前,先备份。

需要收集的信息

  • 完整 prompt、负面 prompt、模型、版本、seed、sampler、步数。
  • 具体是哪个属性 / 短语被忽略。
  • 同 prompt 跑 4 个不同 seed 是不是同种失败(prompt 结构问题),还是各种各样(接近随机)。
  • 把 prompt 砍到只剩 3 个词,能不能命中那个属性。

最短修复路径

Step 1:主体 + 关键属性放前 10 个词

把”必须有”的放最前,描述其次,风格放最后:

改前:

golden hour lighting, shot on 35mm film, slight motion blur, 
blonde woman in a red leather jacket leaning against a muscle car

改后:

blonde woman in red leather jacket, leaning against red 1970s muscle car, 
golden hour, 35mm film, slight motion blur

主体和主要属性(woman、blonde、red jacket、muscle car)现在都在前 12 个词里。风格放后面。

Step 2:风格修饰最多 2 个

prompt 里超过 3 个风格修饰,砍掉最弱的两个。留 1-2 个定义画面感的。常用结构:

[主体 + 属性], [环境 + 光线], [单个风格修饰]

示例:blonde woman in red leather jacket, leaning against muscle car, golden hour, shot on Kodak Portra 400 film

Step 3:负面词放专用字段

SDXL / A1111 / ComfyUI / Flux:所有负面词放负面字段。从正向里把 no Xnot X 全部剥掉。

Midjourney:用 --no 标志,如 --no glasses, hat, smiling

DALL-E / Imagen / ChatGPT 图像工具:没有专用负面字段。把负面改成正向的反义(no glassesclear face, no eyewear)。DALL-E 仍可能小概率画出被否定的元素。

Step 4:消除矛盾

prompt 再读一遍,找互相打架的对子,砍掉一边。

Step 5:权重语法只对支持的模型用

SDXL / Flux Dev / SD 1.5:(blonde:1.3) 有效。Midjourney v7:无效,用 --iw(image weight)或重复词加权(blonde, blonde hair, light blonde)。Imagen / DALL-E:完全不要写语法,靠词序。

Step 6:绕过会改写你 prompt 的工具

如果你在 ChatGPT 或某个套壳里跑、模型明显收到了被改写的版本,那就直接走原生:Midjourney 用 Discord、OpenAI Images 用 API、Imagen 用 Imagen Studio,别用 UI 套壳。

Step 7:一次只改一个变量

prompt 结构没问题后,每次生成只改一个东西。改两个就没法诊断了。

怎么确认已经修好

  • 输出包含 prompt 明确点名的每个属性。
  • 同 prompt 不同 seed 出 3 张,3 张都包含点名属性。
  • 给同事看 prompt 和图,不需要你解释他也能确认匹配。
  • 风格符合你想要的,没有平均成糊状。

如果还是没修好

  1. prompt 砍到最简(主体 + 1 属性),再逐句加回,加哪句崩就是哪句出问题。
  2. 同 prompt 在另一个模型上跑(Flux → Midjourney、SDXL → Imagen)。在别处能跑,就是模型特定的问题。
  3. 从文生图换到图生图:放一张大致样子的参考图 + 文字写改动。参考图会主导模型注意力。
  4. 求助前打包好 prompt、模型、seeds、各次输出。

预防建议

  • 按用途维护一份”能跑通”的 prompt 模板库,从已知模板开始改。
  • 每次只改一个变量。
  • SDXL 控制在 50 词以内,Midjourney / Flux 控制在 150 词以内。
  • 主体永远放最前,风格放最后。
  • 负面词当独立概念处理,永远不写在正向 prompt 里。

相关阅读

标签: #Prompt #排查 #排查 #图像生成