JOVANA
Explore Library Glossary Getting Started Three Levels Fields How it works Mission
Join the mission
All guides

天生脆弱:提示、上下文與硬性限制

為何措辭的微小改動會讓答案翻盤、為何模型會遺忘長文件的中段,以及那些「牆」究竟在哪裡。

同一個問題,兩種不同答案

用某種方式打出一個問題,得到不錯的答案;把它做個無關緊要的改寫——加個「請」、把兩個子句調換順序、換個同義詞——答案的品質就可能改變、甚至翻盤。這就是提示脆弱性(prompt brittleness),以及它的近親提示敏感性(prompt sensitivity):模型的輸出取決於那些本應無關緊要的措辭表面特徵。一個穩健的推理者不會在意客套或詞序;一個模式比對器卻會,因為不同的措辭會把它推向它所學過文本中的不同區域。

即使是微小的改写也会改变模型实际看到的词元,因此它的答案可能随之变化。

一个句子被切分为词元,再映射到词元编号和嵌入向量。

空間就只有那麼多

模型一次所能考量的一切——你的指令、目前為止的對話、你貼上的任何文件、以及它正在寫的答案——都必須塞進它的上下文視窗(context window),以詞元(token)計量(一段段文字,每個大約幾個字元)。當對話成長到超過這個額度時,你就撞上上下文長度限制(context length limits):最舊的對話輪次會被丟棄或截斷,而模型是真的「看不到」那些被捲走的內容。它不會警告你,只是悄悄弄丟早先的材料,然後當作那些東西從不存在似地作答。

n_{\text{prompt}} + n_{\text{history}} + n_{\text{docs}} + n_{\text{output}} \le N_{\text{ctx}}

所有内容共享同一预算:提示、对话历史、粘贴的文档和答案都要计入上下文窗口。

現代模型標榜非常大的視窗,這確實有幫助——但更大的視窗不是免費的。更多的上下文意味著每次呼叫花更多錢、更多時間,而且如我們即將看到的,模型並不會均勻地運用長上下文。「塞得進去」並不等於「被好好用上」。

迷失在中段

一個鮮明且有充分記載的怪癖是「迷失在中段」效應:當關鍵資訊位於長上下文的中段時,模型運用它的能力,明顯遜於同樣的事實放在開頭或結尾附近的時候。注意力偏好兩端。於是你可以貼上一份正好包含答案的長報告,模型卻仍然錯過它——不是因為事實不在,而是因為它被埋在低注意力的地帶。

点击一个词查看注意力的流向——权重并不均匀,这正是埋在中间的信息容易被忽略的原因。

一个交互式自注意力视图,突出显示每个被选词关注的其他词。

  1. 把最重要的指令與事實放在提示的開頭或結尾,而不要埋在中段。
  2. 別因為一份長文件塞得進視窗,就假設模型「讀過」它;提出針對性的問題並查核。
  3. 當精確度重要時,只檢索並貼上相關段落,而非把整批語料一股腦倒進去。

限制如何讓失效雪上加霜

這些限制不會各自安分——它們會放大前面談過的失效。一個被捲出視窗的事實,會迫使模型退回記憶去找,而那正是幻覺棲身之處。又長又雜亂的上下文,會讓推理更容易飄移。而在這一切過程中,模型始終維持它自信的語氣,所以一個被截斷、或關鍵藏在中段的上下文,會產出一個缺漏資訊、卻聽起來很完整的答案。這些限制是無聲的,而那份無聲正是危險所在。

绕开这些限制:只检索关键段落并传入,而不是把整篇文档塞进窗口。

一个检索增强生成流程:查询检索出相关段落,在生成前加入提示。