你写了一段 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 会把 glasses、hat、smiling 当成相关词,否定那部分被剥掉。你大概率会得到一副眼镜。
如何判断:在正向 prompt 里搜 no、not、without、avoid。任何一个出现都是问题。
4. 属性自相矛盾
Tall short woman、dark blonde hair、wearing a t-shirt and a formal gown、running 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 X、not X 全部剥掉。
Midjourney:用 --no 标志,如 --no glasses, hat, smiling。
DALL-E / Imagen / ChatGPT 图像工具:没有专用负面字段。把负面改成正向的反义(no glasses → clear 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 和图,不需要你解释他也能确认匹配。
- 风格符合你想要的,没有平均成糊状。
如果还是没修好
- prompt 砍到最简(主体 + 1 属性),再逐句加回,加哪句崩就是哪句出问题。
- 同 prompt 在另一个模型上跑(Flux → Midjourney、SDXL → Imagen)。在别处能跑,就是模型特定的问题。
- 从文生图换到图生图:放一张大致样子的参考图 + 文字写改动。参考图会主导模型注意力。
- 求助前打包好 prompt、模型、seeds、各次输出。
预防建议
- 按用途维护一份”能跑通”的 prompt 模板库,从已知模板开始改。
- 每次只改一个变量。
- SDXL 控制在 50 词以内,Midjourney / Flux 控制在 150 词以内。
- 主体永远放最前,风格放最后。
- 负面词当独立概念处理,永远不写在正向 prompt 里。