同一段提示词时而正常、时而崩坏时,先判断是「输入没锁住」还是「参数在互相牵制」,而不是立刻改写提示词。建议的排查顺序是:先把提示词结构和 seed 固定成一条可复现的基线,再按尺寸、步数、引导系数的顺序逐项做单变量替换,每确认一组就把整组参数写进配置文件,并同步记下批次、尺寸和提示词长度。改动一旦超过一项,后面的废图就归不到具体原因上,这是排查卡住最常见的原因。下面的顺序表、配置骨架和记录表都按这个前提给,键名与取值范围需要结合你实际使用的工具确认。
适用场景:同一段提示词输出时好时坏、参数在界面上手改、事后说不清哪一步起了作用。处理动作:固定提示词结构与 seed 取基线,每轮只改一项,参数落盘到配置文件,并按批次、尺寸、提示词长度记录结果。验证方式:同一份配置连续生成数次,主体与构图应基本一致;若不一致,说明还有随机项没关掉,先解决这一层再测参数。边界:模型版本、采样器、调度器、量化精度变化同样会改变结果,跨版本或跨尺寸的对比不能直接沿用旧结论。
锁死提示词和种子,把其他变量清空
可复现的起点只有两个要求:提示词一个字都不改,seed 固定且关闭随机化。提示词建议先整理成固定结构,例如「主体 + 场景 + 光线 + 镜头 + 质量词」,顺序和标点都定下来,排查期间不要在句尾追加形容词;负向提示词同样固定,不要边测边加。很多工具在界面里还有「每次生成随机种子」「批内种子递增」这类开关,排查阶段需要关掉,否则同一个 seed 拿到的并不是同一张图的起点。
# 基线配置示例(键名以实际工具为准)
prompt:
positive: ceramic cup on wooden table, soft window light, 50mm lens, shallow depth of field
negative: blurry, watermark, extra fingers
structure: subject + scene + light + lens + quality
seed: 123456789
randomize_seed: false
复现验证的做法是:用上面这份配置连续生成 3 到 5 次,把输出并排放在一起看主体轮廓、构图位置和整体色调是否基本一致。如果同配置同 seed 仍有明显差异,问题不在参数,而在还没关掉的随机项——常见的是采样器带随机、调度器不同、批大小导致的种子偏移、以及精度切换。这一层没稳住之前,测尺寸和步数没有意义。需要提醒的是,换尺寸或换模型版本之后,原 seed 不再等价于原来的起点,要重新取一次基线,不能拿跨尺寸的结果做比较。
尺寸、步数、引导系数逐项单变量测试
顺序建议按「影响面从大到小」排:先尺寸,再步数,最后引导系数。每测完一个变量,把参数改回基线值再动下一项,不要在前一轮的结果上叠加。尺寸这一轮只做等比缩放,宽高比例的变化会同时改变构图,属于复合变量,应单独建一轮再测;宽高通常取 8 或 16 的整数倍,避免工具内部做隐式裁剪。
| 顺序 | 变量 | 基线值 | 测试取值(逐轮只取一个) | 其余项 | 重点看什么 |
|---|---|---|---|---|---|
| 1 | 尺寸 width/height | 1024×1024 | 768×768、896×896、1024×1024、1152×1152 | 提示词、seed、步数、引导系数全部不动 | 主体是否仍是同一个构图,边缘是否出现断裂或重复元素 |
| 2 | 步数 steps | 24 | 12、16、20、24、30 | 提示词、seed、尺寸、引导系数不动 | 细节从哪一档开始不再增加,低于哪一档开始糊 |
| 3 | 引导系数 guidance | 3.5 | 1.5、2.5、3.5、5.0、7.0 | 提示词、seed、尺寸、步数不动 | 过低时主体松散、过高时色彩发硬或细节发散 |
每一轮都记录同一组字段,避免事后只记得「好像改过步数」:seed、width/height、steps、guidance、sampler、scheduler、提示词字符数、输出文件名、以及一句症状描述(主体崩、文字乱码、构图漂移、局部糊)。步数不要一味追高,找到「再加也不明显」的拐点就停;引导系数在 1.5 到 7 之间测即可,超出这个区间通常已经不是稳定性问题而是风格问题。
把每组参数写进配置文件而不是手改界面
界面手改的问题不是麻烦,而是漏改和记错:改完尺寸忘了改回步数,或者把两次不同配置的结果当成同一次对比。建议每确认一组就存一份配置文件,用批次名区分,并在文件里带上提示词哈希,方便把输出目录和配置对上。
# batch_004.yaml
batch: batch_004
prompt_file: prompts/base_v1.txt
prompt_hash: 9f2c...(读取后自动计算并回填)
seed: 123456789
randomize_seed: false
size:
width: 1024
height: 1024
steps: 24
guidance: 3.5
sampler: 按实际工具填写
scheduler: 按实际工具填写
output_dir: out/batch_004
note: 尺寸单变量,其余沿用基线
读取后要做一次校验,不能只看文件写了什么,要看程序实际用了什么:启动时打印生效的 seed、尺寸、步数、引导系数;断言 randomize_seed 为 false;打印提示词字符数并与提示词文件长度比对,接近或达到工具长度上限就要单独标出来——提示词被静默截断时表现往往就是「同一段词时好时坏」。输出文件名里带上批次名和提示词哈希前缀,事后回溯不用靠记忆。
# 校验思路,语言按你的环境替换
cfg = load(batch_004.yaml)
print(cfg.seed, cfg.size.width, cfg.size.height, cfg.steps, cfg.guidance)
assert cfg.randomize_seed is False
assert cfg.size.width % 8 == 0 and cfg.size.height % 8 == 0
print(prompt_chars, prompt_limit) # 判断是否接近截断阈值
记录不稳定出现的规律
偶发问题之所以难查,是因为只在脑子里记着「有时候会崩」。把每次生成的结果按批次、尺寸、提示词长度三列归档,几轮之后通常就能看出废图集中在什么条件下,而不是随机分布。
| 批次 | 尺寸 | 提示词字符数 | seed | steps / guidance | 结果 | 症状 |
|---|---|---|---|---|---|---|
| batch_004 | 1024×1024 | 186 | 123456789 | 24 / 3.5 | 稳定 | — |
| batch_004 | 1152×1152 | 186 | 123456789 | 24 / 3.5 | 偶发 1 张 | 主体边缘断裂 |
| batch_005 | 1024×1024 | 340 | 123456789 | 24 / 3.5 | 连续多张 | 后半段细节丢失 |
判断规则可以先用这几条,命中后回到配置文件层复核,不要直接下结论:废图集中在同一批次的后半段,先查批大小、显存和并发,而不是提示词;废图只在某个尺寸出现,锁定尺寸相关,回到基线尺寸做对照;废图只在提示词字符数超过某个阈值后出现,优先怀疑长度截断或尾部权重被挤掉;换一个 seed 就恢复正常,属于该 seed 的个案,不必改整体配置;回到最初的基线配置仍能复现,问题在环境层,例如模型版本、精度设置或节点差异,这时继续调参数意义不大。记录保持克制,只写可复现的条件,不写下「感觉这次更好」之类的判断。