玩 Stable Diffusion 有段时间的人大概都有这个体会:同一个模型、同一张显卡、同一组采样参数,别人甩出来一张光影层次分明的图,你照着参数抄一遍,出来的东西像被搅拌机打过。多数时候问题不在显卡,也不在模型,而在那一行提示词(Prompt)上。AI绘图这件事里,模型是发动机,提示词是方向盘,发动机再好,方向盘乱打也开不到目的地。
这篇内容聊的就是提示词本身——它为什么有效、权重怎么算、词库怎么攒、报错了怎么办。目标读者是所有正在用 Stable Diffusion 出图的人:刚装好整合包、还在随便试词的新手,可以直接抄第 3 章的分类词库;已经能稳定出图的,重点看第 2 章的权重语法和第 4 章的迭代方法;把出图当生产环节的人,第 6 章把提示词当资产管理那部分可能更值钱。全文不聊玄学,只聊能复现的操作。
1. 提示词到底在做什么:从文本编码到潜空间
1.1 一条提示词在模型内部的完整旅程
很多人把提示词当成"咒语",觉得念对了就灵,念错了就崩。这个理解偏差会直接导致后面所有的调试都走错方向。提示词的本质是一段被转成数字的约束条件,它不"命令"模型画什么,它只是把生成过程往某个方向推。
流程大概是这样:你敲进去的那串文字,先被分词器(Tokenizer)切成一个个 token,每个 token 再被文本编码器(CLIP Text Encoder)查表映射成一个高维向量。这一步很关键——模型不认识"单词",它只认识向量。所以当你说"这个词明明写对了为什么没效果",很可能是因为这个词在 CLIP 的训练语料里出现得太少,它的向量位置离你想表达的概念很远。
这些向量随后会通过交叉注意力(Cross-Attention)机制注入到 U-Net 的每一层里去。扩散过程从一张纯噪声图开始,每一步都在用这些向量做指引,去判断"这块噪声应该往哪个方向去噪"。最后经过 VAE 解码,潜空间里的张量被还原成你能看到的像素图。
理解这条链路的价值在于:你能知道问题出在哪一环。词没效果,是编码环节的语义问题;画面整体垮掉,是注意力权重分配的问题;图能出来但糊,是采样步数或解码环节的问题。修的方向完全不同,乱改参数只是碰运气。
1.2 提示词的词法结构:主体、动作、环境、风格、技术五段式
我见过太多新手把提示词写成一长串形容词的堆砌,像"beautiful, amazing, stunning, gorgeous, masterpiece, 8k, ultra detailed……"排了二十个词。这种写法在早期的某些模型上确实能骗到一点画质提升,但在现在的主流模型上基本是浪费 token,还容易把画面带偏。
比较稳的写法是按功能分段,我给自己的模板是五段式:
- 主体:谁/什么,数量,外观特征。例如
1girl, silver long hair, red eyes - 动作与姿态:在做什么。例如
sitting on a windowsill, looking out - 环境:在哪里,什么时间,什么天气。例如
rainy night, city street, neon lights - 风格:什么画风、什么媒介。例如
anime style, flat color, cel shading - 技术参数:画质、镜头、光照。例如
depth of field, soft lighting, film grain
这个顺序不是硬性规定,但有个原则值得遵守:越重要的信息放在越靠前的位置。因为注意力机制对序列前段的内容天然有更高的关注度,这是 Transformer 架构的特性,不是玄学。你把"1girl"放在第五十个词的位置,模型很可能已经先按前面的场景词构图了,再想拉回人物主体就很吃力。
顺带说一句,标点符号在这套体系里没有语法意义。逗号、句号、换行,模型一视同仁,都只是分隔符。所以别纠结用逗号还是用竖线,用你看着舒服的就行。真正有语法意义的是括号和数字,那是下一章的内容。
2. 权重语法与分词陷阱:让模型听懂重点在哪
2.1 括号、数字、混合权重的实际效果对照
提示词里唯一带"编程味"的部分就是权重语法。不同前端对它的支持略有差异,但主流的两套(WebUI 系和 ComfyUI)在基础用法上是一致的。
最基础的几种写法:
| 写法 | 含义 | 等效权重 |
|---|---|---|
(word) | 加权 | 1.1 |
((word)) | 加权两次 | 1.21 |
[word] | 减权 | 约 0.91 |
(word:1.4) | 显式指定 | 1.4 |
(word:0.6) | 显式降权 | 0.6 |
我个人的习惯是只用显式写法,因为括号嵌套那种写法在读自己的旧提示词时非常难还原——你看到((((word))))需要心算四次 1.1 次方,而(word:1.46)一眼就懂。提示词是要复用的资产,可读性很重要。
显式权重里,我的经验区间是 0.5 到 1.5。低于 0.5 基本等于删掉这个词,高于 1.5 容易出现过曝、色带断裂、结构扭曲。真正需要 1.5 以上强推的情况很少,遇到那种情况,正确做法通常是换一个更有辨识度的词,而不是把权重拉到 2。
还有几个进阶语法值得知道。[a:b:0.5]表示前 50% 的采样步数用 a,后 50% 用 b,这个在需要"前期定构图、后期改风格"时很好用。[a|b]表示每一步在 a 和 b 之间交替,能做出混合风格的质感,但结果不太可控,适合玩票不适合生产。
注意:权重语法在不同模型上表现差异明显。同一个
(red dress:1.3)在 SD1.5 上可能只是加深红色,在 SDXL 上可能直接把整幅画面的色调都带偏。换模型后,权重需要重新校准,不要照抄。
2.2 75 token 截断与提示词过长的处理
这是新手最容易踩的隐形坑。CLIP 文本编码器的上下文窗口是 77 个 token,其中首尾各占一个特殊标记,所以实际可用的只有 75 个 token。超过这个长度的部分,处理方式取决于你的前端。
大多数前端会把超出的内容切成第二个 chunk 单独编码,然后再拼接进注意力层。听起来好像没损失,但实际效果是:第二个 chunk 的语义和第一个 chunk 是割裂的,模型在两者之间找不到连贯性,容易出现"前半句画了个人,后半句画了个场景,最后两张皮"的情况。
怎么判断自己的提示词是不是太长了?一个粗略的换算:一个英文单词大约对应 1 到 1.5 个 token,标点和大写字母会额外消耗。所以 75 个 token 大约对应 50 到 60 个英文单词。中文更麻烦,常见的分词器对中文的处理粒度很粗,一个汉字有时会被拆成多个 token。
我自己的控制线是:核心提示词控制在 40 个词以内。超过这个数量,我会开始做减法,删掉那些"看起来很美但删了也不影响"的词。实测下来,删掉 30% 的冗余词,出图质量通常不降反升,因为模型的注意力更集中了。
如果确实需要很长的描述,正确的做法不是硬写,而是分层:用简短的提示词定住主体和构图,把风格和细节交给 LoRA、Embedding 或者后期处理来补充。这也是为什么专业工作流里提示词往往很短——他们的信息量放在了别的模块里。
2.3 负面提示词该写什么,不该写什么
负面提示词(Negative Prompt)的作用是在采样过程中把结果往远离某些概念的方向推。它和正面提示词共享同一个编码空间,但作用方向相反。
有一份被抄烂了的通用负面词,我列一下并说清楚每一项在干什么:
lowres, bad anatomy, bad hands, extra fingers, missing fingers, extra limbs, cropped, worst quality, low quality, jpeg artifacts, signature, watermark, blurry这里面lowres、worst quality、low quality是画质兜底;bad anatomy、bad hands、extra fingers是结构修正;jpeg artifacts抑制压缩噪点;signature、watermark抑制水印和签名;blurry提升锐度。
但负面词不是越多越好,这里有两个反直觉的经验。
第一,负面词和正面词会打架。你在负面里写blurry,同时正面里写soft focus,模型就会左右为难,最后出来的图经常是既不够柔也不够锐的半吊子状态。所以我现在的做法是:负面词只保留结构类和画质类,光影风格类的一律不放负面。
第二,负面词会挤占 token 预算。负面提示词同样受 75 token 限制。你写了两百个词的负面提示词,后面那些词的编码基本是无效的,纯属自我安慰。精简到 15 到 20 个词,覆盖结构、画质、水印三个方向就够了。
提示:如果你用的是 SDXL 或更新的架构,负面提示词的边际收益会明显下降,因为训练方式变了。这时候负面词只留最核心的三五个,剩下的精力花在正面描述上,效率更高。
3. 可复用的词库模块:按功能分类的提示词积木
3.1 画质与质感:把"清晰"写具体
一堆人写画质词只会写masterpiece, best quality, 8k, ultra detailed。这几个词在早期模型上有用,现在是标配,写了约等于没写,因为模型训练时见过太多次,它们已经失去了区分度。
真正有区分度的是具体到质感层面的描述。同样是"清晰",下面这几个方向出来的效果完全不同:
sharp focus, crisp lines—— 边缘锐利,适合产品图和插画fine details, intricate texture—— 细节密集,适合机械、织物、皮肤纹理photorealistic, raw photo—— 照片质感,适合人像写实clean composition, minimal—— 干净简洁,适合海报和封面film grain, analog photo—— 胶片颗粒,适合复古氛围
我的建议是按用途建三套画质前缀,而不是混着用。写实人像用一套、二次元插画用一套、概念场景用一套。混用会出现"照片质感 + 平涂色块"这种互相抵消的组合,出来的图很怪但你说不出哪里怪。
顺便提一个高频误区:分辨率词不控制分辨率。8k、4k这些词对实际输出像素没有任何影响,输出尺寸是你设置框里定的。它们只在训练语料里关联了"高细节照片"这个概念,间接影响细节密度。指望写个8k就出高清图,不如老老实实开高清修复或者后期放大。
3.2 镜头与构图:控制画面里的眼睛
画面"好不好看"和"对不对",很大程度上取决于镜头语言。提示词里能直接控制的部分包括机位、焦段感、景深、构图方式。
常用的一组对照:
| 需求 | 推荐词 |
|---|---|
| 突出人物情绪 | close-up, portrait, upper body |
| 展示全身穿搭 | full body, wide shot |
| 交代环境关系 | medium shot, environmental portrait |
| 仰视压迫感 | low angle, from below |
| 俯视掌控感 | high angle, from above |
| 电影感 | cinematic composition, rule of thirds |
| 模糊背景 | depth of field, bokeh, blurred background |
| 广角张力 | wide angle lens, 24mm |
这里有个容易被忽略的点:机位词要放在主体词附近。你在提示词开头写了1girl,中间隔了三十个环境词,末尾才写close-up,模型很有可能先把全身构图定下来,等你写到机位的时候已经来不及改了。我的写法是把1girl, close-up, upper body连在一起写,让它们在 token 序列上相邻,注意力权重才会叠加。
另外,depth of field这类词对二次元模型的效果不稳定,有些模型会把景深理解成"整体变糊"。遇到这种情况,换成blurred background单独控制背景,主体清晰度不受影响,效果更可控。
3.3 光影与色彩:氛围感的主要来源
如果说构图决定画面骨架,光影就决定画面的情绪。这一块是我花时间最多、收益也最大的部分。
光影词可以按"光源方向 + 光源性质 + 光比"三个维度拆:
- 方向:
backlight(逆光)、side lighting(侧光)、rim light(轮廓光)、top lighting(顶光) - 性质:
soft lighting(柔光)、hard light(硬光)、diffused light(漫射)、volumetric lighting(体积光) - 氛围:
golden hour(黄金时刻)、blue hour(蓝调时刻)、neon glow(霓虹光晕)、candlelight(烛光)
组合起来写,比如rim light, soft lighting, golden hour,出来的质感会比单写beautiful lighting强一个档次。原因是前者给了模型三个具体的、可复现的约束,后者只是给了一个模糊的评价。
色彩方面,我习惯用两组词:一组控制色调倾向(warm tones、cool tones、muted colors、high saturation),一组控制配色关系(complementary colors、monochromatic、pastel palette)。这两组配合光影词用,画面的整体感会强很多。
实操心得:光影词的效果和采样步数有关。步数低于 20 的时候,光影层次往往还没铺开就结束了,画面会显得平。想要明显的光影效果,步数至少给到 25 到 30。
3.4 风格词的边界:艺术家名与版权风险
风格词里最敏感的是具体创作者的名字。写名字确实能快速复现某种风格,但这里有几个现实问题需要注意。
一是效果不稳定。同一个名字在不同模型上的表现可能天差地别,取决于模型训练时用了多少该创作者的作品。你在 A 模型上试出来很惊艳的组合,换到 B 模型可能就是一团噪声。
二是商用风险。如果你的图要用于商业用途,模仿在世创作者的个人风格存在法律和伦理上的不确定性。稳妥的做法是描述风格特征而非作者姓名,比如不说具体名字,而是写bold outlines, flat color blocks, exaggerated proportions这样的特征描述。这样既能得到想要的视觉效果,又避开了风险。
三是风格词的叠加会失真。写三个不同风格的名字,得到的通常不是三种风格的融合,而是互相干扰后的四不像。需要混合风格时,用权重语法明确主次,比如(style A:1.2), (style B:0.6),让一个主导一个点缀。
我会把用到的风格词按"媒介 + 时代 + 技法"三维来整理:媒介是oil painting、watercolor、ink wash、3d render;时代是retro、vintage、futuristic;技法是impasto、cross-hatching、cel shading。这样组合出来的风格描述既具体又安全,比堆名字靠谱得多。
4. 完整实操:从一句人话到一张成图
4.1 需求拆解与初稿
拿一个具体需求来走一遍全流程。假设我要出一张"雨夜街头,一个女生在便利店门口等雨停"的图,风格偏日系动画。
第一步不是写提示词,是拆解。把这句人话拆成五段式的槽位:
- 主体:
1girl, short black hair, wearing a beige coat - 动作:
standing, holding a transparent umbrella, looking at the rain - 环境:
convenience store entrance, rainy night, wet asphalt, reflections - 风格:
anime style, cel shading, japanese animation - 技术:
medium shot, soft lighting, cool tones, depth of field
第一稿我会用最简单的词,不做任何权重修饰,先看模型的默认理解是什么。这一步的目的是建立基线,没有基线你后面所有的调整都是瞎调。
第一稿输出后,大概率会有问题。可能是人物太小、可能是雨没出来、可能是便利店不像便利店。这时候不要一次改五个地方,一次只改一个变量。
4.2 迭代记录法与对照实验
这是我踩过坑之后养成的最重要的习惯:每次出图都记参数。不记参数的调参就是赌博,你今天调出来一张好图,明天想复现,只能靠回忆。
我的记录表长这样:
| 轮次 | 变更内容 | 种子 | 步数 | CFG | 结果评价 |
|---|---|---|---|---|---|
| 1 | 初稿 | 1234567 | 25 | 7 | 人物偏小,雨感弱 |
| 2 | 加close-up | 1234567 | 25 | 7 | 人物合适,但没雨 |
| 3 | 加(rain:1.3) | 1234567 | 25 | 7 | 雨有了,地面反光弱 |
| 4 | 加wet asphalt, reflections | 1234567 | 25 | 7 | 基本达标 |
关键点是固定种子。种子固定之后,同样的提示词、同样的参数,出来的图是几乎可复现的。这样你改一个词,就能清晰地看到这个词带来的变化,而不是在一堆随机性里猜。
CFG 这个参数我单独说一下。它控制模型对提示词的"服从程度"。太低(4 以下)提示词约束弱,出来的图很自由但经常跑题;太高(10 以上)服从性强但画面僵硬、色彩过饱和、容易出现结构畸变。7 左右是大多数模型的甜点区,遇到画面过曝或者色彩炸裂,先怀疑 CFG 而不是提示词。
步数方面,20 到 30 是常规区间。低于 15 画面通常没收敛完,细节缺失;高于 40 边际收益极低,纯浪费算力。我用 DPM++ 2M Karras 这个采样器比较多,它在 25 步左右就能收敛得不错,速度和质量平衡得比较好。
4.3 LoRA、ControlNet 与提示词的配合
提示词不是孤军奋战,工作流里还有两个大件:LoRA 和 ControlNet。
LoRA用来注入特定概念、画风或人物。语法是在提示词里用尖括号挂载:<lora:filename:0.8>。这里的数字是 LoRA 权重,我的经验是 0.6 到 0.9 之间比较稳,超过 1.0 容易过拟合,画面会出现明显的重复纹理或者色偏。
注意 LoRA 的触发词。很多 LoRA 需要特定的触发词才能激活,不写触发词它可能完全不起作用。触发词信息一般在模型作者提供的说明里,拿到 LoRA 第一件事就是确认触发词。
ControlNet用外部图像控制结构,常见的有 OpenPose(姿势)、Depth(深度结构)、Canny(边缘)、Lineart(线稿)。用了 ControlNet 之后,提示词里关于姿态和构图的描述可以大幅精简,因为结构信息由 ControlNet 提供了,你再写一遍反而会和它打架。
我的一般原则是:ControlNet 接管结构,提示词负责语义和风格。比如用 OpenPose 定好姿势后,提示词里就不用写standing、arms crossed这种姿态词了,省下来的 token 预算用来加强服装、表情、光影的描述。
5. 常见报错与出图故障排查速查
5.1 结构崩坏类问题
出图最常见的三大故障:多手多脚、人脸畸变、画面重复拼接。这三个的成因不同,修法也不同。
多手多脚,八成是分辨率设置不对。SD1.5 的原生分辨率是 512×512,SDXL 是 1024×1024。你直接用 512×1024 这种极端比例生成,模型在训练时很少见到这种尺寸,就容易把人物复制拼接。正确做法是在原生分辨率附近生成,然后用高清修复(Hires.fix)放大到目标尺寸。
人脸畸变,小尺寸全身图里特别常见,因为人脸在 512 像素的图里可能只占 30 个像素,模型没有足够的空间去画五官。解法是先出人物特写,或者用面部修复功能,或者放大后再重绘面部。
画面重复拼接,通常也和分辨率、步数有关。步数过低时模型还没收敛完就停下了,容易出现拼接感。另外某些采样器在低步数下也不稳定,换个采样器试试往往能解决。
排查顺序我总结成一句话:先看分辨率,再看步数,最后看提示词。因为前两个是系统性错误,改了就能立刻见效,提示词的问题排查成本高得多。
5.2 提示词被拒与内容审核
有时候你会遇到这种情况:本地跑得好好的提示词,换到某个在线服务或者 API 上,直接返回一句invalid prompt: your prompt was flagged as potentially violating our usage policy。这不是你的提示词有语法错误,而是平台的内容安全策略触发了。
遇到这种情况,处理思路是这样的:
第一步,定位触发词。把你的提示词二分,先提交前半段,再提交后半段,看是哪一半被拒。然后继续细分,通常三五次就能定位到具体的词。
第二步,中性化改写。被拒的词往往是因为表述存在歧义或者过于具体的指代。把它换成客观、中性的描述通常就能通过。比如把情绪化、指向性强的形容词去掉,改成描述客观事实的词汇。
第三步,如果确实得不到想要的效果,改走本地流程。本地运行不涉及平台的内容校验环节,但同样要遵守使用规范,生成内容需符合公序良俗。
注意:不同平台的审核阈值差别很大,同一个提示词在 A 平台被拒、在 B 平台正常,这是常态。不要把某个平台的拒绝当成自己提示词有问题,先确认是不是平台策略差异。
另外提一句,如果用的是带工具的智能体流程,把用户输入直接拼进提示词模板时要注意提示词注入风险——用户输入里如果包含指令性的内容,可能会覆盖你原本的模板逻辑。稳妥做法是给用户输入加分隔和转义,不要让输入内容和你的指令混在同一个语义层级里。
5.3 环境与性能类问题
还有一类问题跟提示词本身无关,但表现得像是提示词出问题。
prompt is too long这类报错,说明输入超过了服务端的长度限制。处理方式就是第 2.2 节说的做减法,把提示词压到限制以内。如果服务端限制特别严,考虑把风格信息转移到 LoRA 上。
提交就闪退,这种情况通常不是提示词导致的,而是显存不够或者插件冲突。先看显存占用,如果生成高分辨率图时显存爆了,降低分辨率或者开启显存优化选项。如果显存正常还是闪退,那就是插件问题,逐个禁用最近装的扩展来定位。
环境里的库缺失,比如在某些命令行环境里跑脚本时提示找不到某个图像处理库,这是依赖没装全的问题,和提示词没关系。用包管理工具装一下对应的库就行,注意要和主环境的版本匹配,版本冲突比缺库更难排查。
提示词生效但速度奇慢,检查是不是分辨率开太高、步数给太多、或者同时挂了多个 ControlNet。这三项每一个都是算力消耗大户,叠加起来性能会断崖式下降。我的习惯是先把工作流跑通再谈优化,不要一上来就堆满功能。
6. 把提示词当资产来管:模板、版本与复用
6.1 建立自己的提示词库
出图半年之后你会发现,真正高频使用的提示词其实就那么几十条。把这些沉淀下来,比每次重新想词效率高得多。
我的库分三层:原子词、模块、配方。
原子词是最小的可复用单元,比如rim light、wet asphalt、cel shading,一条一个词,标注清楚它的作用和适用场景。模块是把原子词按功能打包,比如"雨夜氛围模块"包含光照、地面、天气、色调四组词。配方是完整的成品提示词,包含五段式结构和参数,用一句话命名,比如"雨夜便利店等待(日系动画)"。
分层的好处是可组合。新需求来了,先从配方库里找最接近的,然后替换模块,再微调原子词。这样一次出图的时间能从半小时压到五分钟。
6.2 变量化模板与批量生产
如果你需要批量出图,比如给同一套角色出十个不同场景,就该上变量化模板了。
思路是把提示词拆成固定部分和可变部分。固定部分是角色特征、画质词、负面词,这些每次都一样;可变部分是场景、动作、光影,这些每张不同。把可变部分做成一个列表,逐行替换,就能批量生成。
这种做法在需要保持角色一致性的项目里特别有用——固定角色的描述词不变,只换环境,出来的图角色特征会稳定很多。比每次重新描述角色靠谱。
6.3 换模型时的迁移策略
最后一个容易被忽略的问题:换模型之后,旧提示词基本要重调一遍。
原因在于不同模型的训练数据、文本编码器、甚至提示词风格偏好都不一样。SD1.5 时代大家习惯堆砌质量词,SDXL 对长提示词更宽容但质量词的效果弱化,而更新的架构对自然语言句子的理解更好,反而对堆砌的关键词不敏感。
我的迁移流程是三步:先拿旧提示词直接跑一遍看基线;然后删掉所有质量词(masterpiece、8k这类)再跑一遍,多数情况下质量不降反升;最后调整权重,因为不同模型对权重的敏感度差异很大。
有一点值得强调:迁移时不要一次性改完所有变量。先固定种子跑基线,然后每次只动一个维度,记录变化。这样你才能摸清新模型的脾气。我在换模型初期一般会花两三个小时专门做这件事,看起来慢,但后面省下的时间远超这点投入。
提示词这个东西,说到底是一套可积累的手艺。你今天调的每一个参数、记的每一条笔记,都会变成下次出图的直觉。我从最早照着别人的词硬抄,到后来能凭感觉写出一段不用改太多就能出图的提示词,中间没有什么捷径,就是记录、对照、复盘这三件事重复做。真正值钱的不是某个万能提示词,而是你自己那套能稳定复现结果的方法。