先给结论:CLIP 文本编码器的硬上限是 77 个 token(其中约 75 个可用,另有 BOS/EOS),超出部分在多数实现里被静默截断;T5-XXL 常用上限是 512 token,新一批图像模型则改用语言模型或视觉语言模型做文本编码。你写在提示词后半段的细节没有生效,很多时候不是模型不听话,而是根本没被读进去。
「提示词写得越长越准」是最顽固的误解之一。这篇从编码器这一层解释原因,并给出能立刻验证的做法。
事实口径:本文核对时间为 2026 年 11 月 10 日。77 token 上限来自 CLIP 文本编码器的固定绝对位置编码,512 / 256 等上限来自 SD3、FLUX.1 公开参考实现与模型卡;不同实现、不同版本的实际配置可能不同,请以你所用推理代码的 max length 配置为准。
77 不是「建议长度」,是模型结构定死的窗口
CLIP 文本编码器使用固定长度的位置嵌入,上下文窗口就是 77 个 token:一个 BOS、一个 EOS,中间约 75 个位置可用。它不能像大语言模型那样靠外推接更长的输入。所以超过的部分不是「权重变低」,而是直接丢失,而且多数前端不会给你任何提示。
还有一个容易忽略的事实:token 不等于字数。中文、英文单词、标点、权重语法括号都会被切分成若干 token,一段看起来不长的中文描述可能已经占用几十个位置。用「我数了不到 77 个字」来判断安全,本身就是错的。
三种文本编码配置,对应三种写法
| 配置 | 典型上限 | 对提示词的实际影响 |
|---|---|---|
| SD 1.x / 2.x:单个 CLIP | 77 token | 必须把最重要的描述放最前面;后半段可能被丢 |
| SDXL:CLIP-L + CLIP-G | 各 77 token | 仍是 77 量级,两个编码器不等于 154 的窗口 |
| SD3:CLIP-L + CLIP-G + T5-XXL | CLIP 各 77,T5 常用 512 | 长描述主要由 T5 承接;移除 T5 会明显削弱复杂构图与文字 |
| FLUX.1:CLIP-L + T5-XXL | CLIP 77,T5 参考实现 512(schnell 示例 256) | CLIP 提供池化全局向量,T5 提供词元级序列 |
注意 SDXL 那一行:两个文本编码器是并联提取不同层次的语义,不是把提示词接成两段。以为「双编码器能写两倍长」是很常见的推算错误。
分块编码能绕过截断,但会切碎语义
社区常用的长提示词方案是把文本切成多个 77 token 的块,各自编码后再把条件拼起来。它确实能让后面的内容「被读到」,但每块独立编码、块与块之间没有交叉注意力,于是「红衣女孩站在左侧、蓝衣男孩站在右侧」这种跨块的空间关系容易失效。
更关键的是权重语法的作用域:括号加权只改变本块内某个词元在条件向量里的分量,救不回已经被丢弃的块,也无法跨块建立关系。所以不要指望靠 (word:1.4) 把后半段描述「拉回来」。
为什么新一代模型改用语言模型做文本编码
把 T5、Qwen、Mistral 这类语言模型或视觉语言模型接进图像生成管线,长描述不再被压进 77 个位置;视觉语言模型还能同时理解参考图与文字,这正是「多参考图编辑」「指令式改图」能成立的前提。
可核对的例子:BFL 官方说明 FLUX.2 [klein] 9B 用 8B Qwen3 文本嵌入器;Qwen 官方说明 Qwen-Image-2.1 采用混合粒度注意力,让文本用 token 级因果掩码、图像生成用块级掩码,并把输入图与编辑指令缓存为静态上下文。它们都已经不是「CLIP 一个数」的时代了。
但别推导出「新模型提示词可以随便写」。长度上限放宽,不等于注意力资源无限;官方博客依然把「文字排版、肖像光照、细节」当作需要单独优化的能力。把关键约束写在前面,仍然是稳的做法,这也是提示词四层结构强调按重要性排序的原因。
三步自查:你的提示词到底有没有被读完
- 看配置:在推理代码或节点里找 text encoder 的 max length / 截断设置,别只看界面上的字数。
- 做反证:固定种子、固定所有参数,只在提示词末尾追加一句明确可见的元素(例如「右上角有一只红色气球」)。若画面毫无变化,多半是被截断或权重太低。
- 换位置重测:把那句挪到最前面再出一张。出现差异就说明存在长度或位置敏感性,之后按重要性顺序重写提示词。
第三步是整套方法里最有价值的一步:它用一次对照实验替代了「网上说这个模型支持长提示词」的猜测。做参数对比必须锁种子,理由写在六个核心参数里。
常见问答式的三个误区
「模型说支持 512 token,那我 77 之后的词也有用吧?」取决于你用的到底是哪个编码器:SD3 / FLUX.1 里长文本主要由 T5 承接,纯 CLIP 管线的 77 仍然是硬边界。「我把提示词翻译成英文就短了?」切分方式不同,不能靠换语言解决结构上限。「负面提示词也有 77 限制吗?」同样受所用编码器限制,堆一长串无效负面词的道理也在这里。
小结
提示词工程的第一约束不是措辞技巧,而是编码器窗口。先确认你这条管线读得进多少,再谈分层、权重与风格词。把「写在后面没生效」当成可验证的工程问题,而不是模型玄学,排查会快得多。
延伸阅读:DiT 与 U-Net 的架构差异、显存与量化。
官方资料:OpenAI CLIP 官方实现(clip.tokenize 默认 context_length=77)、Qwen-Image-2.1 官方博客(混合粒度注意力)、BFL [klein] 官方博客(Qwen3 文本嵌入器)。
评论 0