🐦 第6章 提示词编写和优化
📄 一句话概括

提示词不是命令,是一次性塞进上下文的说明。它和用户那句话排队,一起被模型看。 看得见多少有个预算:句子越多、越长,任何一句分到的份额越小。 所以提示词的第一条纪律不是「写全」,是「写少」。

📝 本章和前面几章的关系

上一章讲往模型面前摆什么资料,这一章讲怎么跟它说话。 第 5.2 节否掉了微调,说过「说话更像我们的客服」得靠提示词。这一节讲提示词凭什么起作用的。 这一节没有平台操作,全是机制。四节里它是唯一一节可以坐着想明白的。

一、它不是命令,是上下文

很多人把提示词当成对模型下的命令。它不是。 模型看到的是一整串文字:你的提示词在前面,用户的问题在后面,中间可能还夹着检索回来的几段资料。 这三样在它眼里是同一种东西——文字。 所以提示词不是「下达指令」,是「提前把规矩铺好」。铺得好,它顺着走;铺得散,它挑着看。

这个区别决定了写法的差别:命令要短要硬,上下文要清楚要有层次。提示词属于后者。

二、看得见多少有个预算

演示里给了一份注意力预算模型:按句均分一份注意力,首尾各加权,长句按长度摊薄。

提示词 句数 总字数 关键句分到的份额
短(5 句) 5 59 12.84%
中(12 句) 12 204 6.67%
长(30 句) 30 468 2.77%

同一句话,在五句的提示词里分到一成多,在三十句里只剩不到三个点。 它一个字都没改,只是周围多了二十五句话。 这个模型是替身——真模型的注意力头、层数、位置编码复杂得多。 但它给出的方向是真的:上下文是一块有限的画布,你多写一句,别人就少一块。

三、位置比字数更要紧

同一句放在不同位置,份额差得很多。

放哪 分到的份额 相对平均
开头 10.67% 1.28 倍
中间 6.67% 0.80 倍
结尾 10.75% 1.29 倍

开头和结尾差不多,中间明显低。 这个现象有个专门的说法,叫「中间遗忘」——塞在长上下文中间的信息最容易被忽略。 所以最要紧那一条,要么写在最前面,要么写在最后面,别放在第三段里。 实操上有个简单做法:开头写身份和规矩,结尾再重复一遍最关键的那条。重复一次比加形容词有用。

四、想强调就写长一点?反了

演示里把那条关键规矩从 25 字加长到 55 字,份额从 2.77% 掉到 1.98%。 写得更长,份额反而降了。 因为这一句自身也要按长度摊薄,加的字越多,摊得越狠。 这条结论有点反直觉,但解释起来很朴素:模型的注意力不是按「你有多想强调」分的, 是按「这段文字占多大比例」分的。你加长它,同时也在稀释它。

所以要强调一件事,靠的不是形容词,是位置和重复。

五、废话真的在占地方

演示里数了一下:中份提示词里三句纯背景——公司成立年份、服务理念、获奖经历——占了 22.17% 的份额, 五十五个字。 这三句对「答对保养周期」没有任何帮助,但它们确实分走了注意力。 这就是为什么「把公司介绍写进提示词」是个坏习惯。 那些内容该进知识库,需要的时候检索出来, 不需要的时候不占地方。

判断一句该不该留,问一句:删掉它,输出会变差吗? 不会就删。

六、那提示词到底该写多少

没有标准答案,但有个经验区间:人设与规矩一百到两百字,四段说清就够。 超过五百字的提示词,先问自己三件事:里面有多少是可验的约束?有多少是背景介绍? 有多少其实是业务事实(那该进知识库)? 三个问题回答完,通常能砍掉一半。

砍完之后再跑一遍。如果效果没变差,说明砍对了。

七、动手 Demo:提示词是在给注意力分格子

三份提示词,五句、十二句、三十句,里面有同一句关键规矩。 算它各分到多少份额,再换三个位置看差别。

def budget(sents, head_w=1.6, tail_w=1.6):
    u'''按句均分注意力,首尾加权,长句按长度摊薄。'''
    n = len(sents)
    ws = []
    for i, s in enumerate(sents):
        w = 1.0
        if i == 0:  w *= head_w
        if i == n - 1: w *= tail_w
        w /= (1.0 + len(s) / 48.0)
        ws.append(w)
    tot = sum(ws) or 1.0
    return [x / tot for x in ws]

实跑输出:

--------------------------------------------------------------------
提示词是在给注意力分格子
--------------------------------------------------------------------


  ① 三份提示词,同一个关键句
  --------------------------------------------------------------------

| 提示词 | 句数 | 总字数 | 关键句分到的份额 | 比短的少多少 |
|---|---:|---:|---:|---:|
| 短(5 句) | 5 | 59 | 12.84% | 1.0 倍 |
| 中(12 句) | 12 | 204 | 6.67% | 1.9 倍 |
| 长(30 句) | 30 | 468 | 2.77% | 4.6 倍 |

  同一句话,在五句的提示词里分到一成多,在三十句里只剩不到三个点。
  它一个字都没改,只是周围多了二十五句话。

  ② 同一句,放在开头、中间、结尾
  --------------------------------------------------------------------
  放开头:分到 10.67%,是平均的 1.28 倍
  放中间:分到 6.67%,是平均的 0.80 倍
  放结尾:分到 10.75%,是平均的 1.29 倍

  ③ 想强调就写长一点?反了
  --------------------------------------------------------------------
  关键句 25 字时,分到 2.77%。
  加长到 55 字后,分到 1.98%。
  写得更长,份额反而降了。 因为这一句自身也要按长度摊薄,加的字越多,摊得越狠。
  所以强调一件事靠的不是加形容词,是把它挪到开头或结尾(看上一段)。

  ④ 这些话其实没在干活
  --------------------------------------------------------------------
  中份提示词里,三句纯背景占了 22.17% 的份额,55 个字。
  这三句对「答对保养周期」没有任何帮助,但它们确实分走了注意力。
  ! 这份 Demo 里的「注意力预算」是个替身:真模型的注意力头、层数、位置编码都复杂得多。
  但它给出的方向是真的——句子越多、越长,任何一句分到的份额越小。
  所以提示词的第一条纪律不是「写全」,是「写少」。

①第一张表四列。看最后一列:12.84% 掉到 6.67%,再掉到 2.77%。 同一句话,周围从四句涨到二十九句,份额掉到五分之一不到。 ②第二段是位置实验。开头 10.67%、中间 6.67%、结尾 10.75%——中间明显低一截。 ③第三段最反直觉:把关键句加长到 55 字,份额从 2.77% 掉到 1.98%。写得更长反而更不被注意。 ④第四段那三句纯背景占了 22.17% 的份额。 公司成立年份、服务理念、获奖经历——对答对保养周期一点用都没有。 ⑤最后那句要抄下来:提示词的第一条纪律不是「写全」,是「写少」。

30 秒实验

  1. 把你现在的提示词打印出来,数句数。超过十五句的,砍掉一半再跑一遍。
  2. 找出你提示词里最要紧那一条,看它在第几句。不在第一或最后一句的,挪过去。
  3. 数一下提示词里有多少句是「公司介绍」。那些该进知识库。

常见误区

  1. 「提示词越长越详细越好。」越长每句分到的份额越小。三十句的提示词里,关键句只剩不到三个点。
  2. 「想强调就多写几句。」加长会摊薄,份额反而降。要强调靠位置和重复。
  3. 「提示词是命令。」它是提前铺好的上下文,和用户的话一起排队被看。
自测三问(点开对答案) 1. 提示词和用户的话,在模型眼里有什么区别? —— 没有区别,都是上下文里的文字。所以提示词不是命令,是提前铺好的说明。 2. 为什么关键规矩要放在开头或结尾? —— 首尾权重高,中间最容易丢。演示里同一句放中间只有 0.80 倍平均份额。 3. 判断一句话该不该留在提示词里,问什么? —— 删掉它输出会变差吗。不会就删——留着只会稀释别的话。

机制懂了,接下来是写法。下一节给一个能照着填的四段式:角色、任务、约束、格式。

相关笔记