LLMs 如何處理相互矛盾的指令?指令遵循優先級實驗 原創
編者按:想象一下,你正在開發一個 AI 助手,突然發現 system message 和用戶提示詞存在沖突,這時 AI 會聽誰的?這種情況不僅困擾著開發者,還可能導致 AI 系統的不穩定和不可預測,影響用戶體驗和系統可靠性。
本文作者通過一系列精心設計的實驗,深入探討了 GPT-4o 和 Claude-3.5 等頂尖大語言模型在面對 system message、prompt 和 few-shot examples 相互矛盾時的行為模式。研究結果揭示了一個令人驚訝的事實:即使是最先進的 AI 系統,在處理矛盾指令時也表現出了不一致性,其行為難以準確預測。
實驗結果如下:
- 當 prompt 的指令與 few-shot examples 矛盾時,模型沒有表現出明顯的偏好。
- 當 system message 與 few-shot examples 矛盾時,GPT-4o 傾向于遵循 system message,而 Claude-3.5 表現出隨機性。
- 當 system message 與 prompt 的指令矛盾時,兩個模型都傾向于遵循 prompt 指令。
- 在三者都矛盾的情況下,GPT-4o 傾向于遵循 system message,而 Claude-3.5 傾向于遵循 prompt 的指令。
作者 | Yennie Jun
編譯 | 岳揚
如果 system message、prompt 和 examples 中的指令相互矛盾,那么 LLMs 在回復時會遵循哪些指令?原圖由原文作者制作
大語言模型面對提示詞中的矛盾指令會如何應對?
“認知失調\[1]”是一個心理學術語,描述的是當一個人同時持有多種相互矛盾的觀點時內心的不適感。比如,在超市購物時,你看到結賬通道上寫著“限10件商品以下”,但這個通道排隊的人每人手里都不止10件商品,這時你該怎么辦?
在探討人工智能時,我特別好奇大語言模型(LLMs)在面對類似認知失調的情況——比如指示模型將英語內容翻譯成韓語,卻提供了將英語內容翻譯為法語的示例——會如何處理。
在本文中,我通過向 LLMs 提供相互矛盾的信息進行了一系列實驗,以確定模型更傾向于遵循哪一方的信息。
用戶可以通過以下三種方式指導 LLMs 執行任務:
- 在 system message 中明確指出任務內容
- 在常規提示詞(prompt)中直接描述任務要求
- 提供幾個展示“正確行為”的示例
向語言模型傳達指令的不同方法,可以選擇其中任一或多種方法。原圖由原文作者制作
在這些方法中,system message 似乎最為神秘(至少我個人這么認為)。根據微軟\[2]的說法,“system message 用于在對話初始階段向模型傳遞指令或提供必要的背景信息。 ”
目前,system message 對提示詞(prompt)的影響力度(與直接在提示詞中嵌入 system message 相比)尚不明確。至少,至今我未曾見到過針對這一點的深入分析。
提示詞指令(prompt instruction)通常用來明確告訴模型該做什么,比如“將英語翻譯成法語”、“校對文章,修正所有語法錯誤”或“編寫代碼解決以下問題”。
而 few-shot examples 則是一種可選的方式,向模型展示對于類似輸入的正確輸出應該是怎樣的。
基于上述定義,我想要探討以下問題:
- few-shot examples 真的那么重要嗎?如果在提示詞中給出了相互矛盾的指令,LLMs 會更傾向于遵循示例(examples)還是指令(instructions)呢?
- system message 的影響力有多大?如果在 system message 中給出一條指令(instruction),而在常規提示詞中給出另一條指令,LLMs會更傾向于遵從哪一條?
為了解答這些問題,我制作了一個小型數據集(可在此鏈接\[3]查看),里面包含了一些帶有矛盾指令(instructions)和 few-shot examples 的簡單任務。在文章的后續部分,我將展示一個將英語翻譯成各種語言的實例。
以下實驗是在 OpenAI 的 GPT-4o 模型\[4]和 Anthropic 最新推出的 Claude-3.5 模型\[5]上進行的。
01 實驗1:提示詞指令與 few-shot examples 之間的沖突
實驗 1 的一個示例,其中的提示詞指令與所提供的 few-shot examples 發生了沖突。此部分內容由原文作者設計
當大語言模型接收到與 few-shot examples 相沖突的提示詞指令時,它的行為并不容易預測。 研究發現,面對這種矛盾,模型并沒有表現出明顯的傾向性,既不偏好遵循提示詞指令,也不偏好 few-shot examples。
在 GPT-4o 模型中,更常見的情況是它會忽略提示詞指令,轉而遵循 few-shot examples(或者在個別情況下,模型會因為無法正確回應任何一條相互矛盾的指令而出錯)。而 Claude-3.5 模型則是幾乎隨機地選擇遵循提示詞指令或是 few-shot examples。
在首個實驗中,我們向模型提供了提示詞指令以及與之相矛盾的一組 few-shot examples。實驗結果表明,模型在遵循提示詞指令與 few-shot examples 之間沒有明確的偏好。此部分內容由原文作者設計
02 實驗2:system message 與 few-shot examples 之間的沖突
實驗 2 的一個示例,其中 system message 中的指令與 few-shot examples 發生了沖突。此部分內容由原文作者設計
本實驗與前一個實驗非常接近,區別僅在于指令(例如“將英語內容翻譯成德語”)被放置在了 system message 中,而非提示詞里。
在大多數任務中,GPT-4o 更傾向于遵從 system message 中的指令。 這與它在第一個實驗中的表現不同,在那個實驗中,相同的指令位于常規提示詞中,模型更傾向于遵從 few-shot examples。
而 Claude-3.5 的表現則與第一個實驗如出一轍(它幾乎是以隨機的方式決定是遵從 system message 還是 few-shot examples)。
在第二個實驗中,我們向模型提供了 system message 中的指令以及與之相矛盾的一組 few-shot examples。結果顯示,GPT-4o 更傾向于遵從 system message 中的指令,而 Claude-3.5 則沒有表現出明顯的偏好。此部分內容由原文作者設計
這告訴我們什么?一種解釋是,對于 GPT-4o 而言,system message 中的指令比提示詞中的指令影響力更大(至少在這些示例中是這樣)。而對于 Claude 來說,system message 的重要性似乎較低,其效果與直接將消息放入提示詞中相似。
03 實驗3:system message 與提示詞指令的沖突
實驗 3 的一個示例,其中 system message 中的指令與提示詞(prompt)中的指令發生了沖突。此部分內容由原文作者設計
在這個實驗中,我們去掉了 few-shot experiments 的環節。system message 和提示詞(prompt)中的指令相互對立。在這種情況下,兩個模型幾乎都選擇了忽略 system message 中的指令,而遵循提示詞(prompt)中的指令。
在實驗 3 中,system message 中的指令和 prompt 中的指令相互矛盾。兩種模型都更傾向于忽略 system message 中的指令,而遵循 prompt 中的指令。此部分內容由原文作者設計
04 實驗4:system message、提示詞和 few-shot examples 全面沖突
實驗 4 中的一個示例,其中 system message 中的指令、prompt 中的指令以及 few-shot examples 之間全面沖突。此部分內容由原文作者設計
在這個實驗中,我們故意制造了一些混亂,以進一步測試模型的應對能力。實驗中,system message 中的指令、提示詞的指令和 few-shot examples 完全相互矛盾。
可想而知,模型的行為模式并不穩定。
面對這些矛盾,讓我感到驚訝的是,GPT-4o 更傾向于遵從 system message 中的指令,而 Claude-3.5 則更傾向于按照 prompt 中的指令行事。
在實驗 4 中,我們向模型提供的 system message、prompt 和 few-shot examples 中存在相互矛盾的內容。結果顯示,GPT-4o 更傾向于遵照 system message 的指令,而 Claude-3.5 則更傾向于遵照 prompt 中的指令。此部分內容由原文作者設計
05 Discussion and Conclusions
在本文中,我探索了在 system message 、prompt 以及 few-shot examples 中向語言模型提供相互矛盾指令的實驗。
實驗得出了一些相互矛盾的結果 —— 有時候模型更傾向于遵循 system message 中的指令,而在稍有不同的實驗設置下,模型的行為模式則會發生變化。system message 似乎對 GPT-4o 的輸出影響更為顯著,而對 Claude-3.5 的影響則相對較小。
few-shot examples 在引導模型進行決策時同樣扮演了關鍵角色(盡管并非在所有情況下都有效)。 語言模型通過 few-shot examples 進行“即時學習”的能力(即所謂的“上下文學習”),在面對相互矛盾的指令時尤為凸顯。這讓我們想起了 Anthropic 最近提出的“Many-shot jailbreaking”技術,該技術表明,即使語言模型在訓練時被教導避免產生有害內容,通過提供足夠多的有害行為示例,仍然有可能改變其行為,使其產生不期望的輸出。
Anthropic’s Many-shot jailbreaking\[6].
文章中的實驗研究是基于有限數量的、經過精心挑選和準備的示例進行的。對于語言模型在面對提示詞中的不同形式矛盾時的處理方式,目前的研究還遠遠不夠,還有很多不同的角度和方法需要去探索。
如果采用本文作者使用的一些示例的變化形式,并且結合其他不同的語言模型進行測試,那么很可能會觀察到與本文中不同的結果。GPT 和 Claude 模型的未來版本,也可能不會完全遵循本文發現的特定行為模式。
當語言模型接收到提示詞中的矛盾指令時,它們的行為表現并不是始終如一的。本文的重點不在于這些模型針對特定示例或任務與哪些具體指令保持一致,而在于這種一致性實際上并不存在。
system message 中的指令是否應該始終具有最高的優先級?語言模型是否應該將靈活性視為最重要的原則,并始終遵循最新的指令(即便該指令與之前的指令相矛盾),或者是否應該重視“從實踐中學習”的原則,并與其所接收的少量“correct answers”示例保持一致(即使這些示例可能與 system message 或其他指令相沖突)。
上述討論不僅限于本文構造的測試示例,還適用于現實世界中的其他場景 —— 比如,system message 要求模型提供幫助,而 few-shot examples 卻指導模型如何采取有害的行為。又或者,提示詞中的 few-shot examples 未能更新,無法反映最新的指令。
對于語言模型如何處理相互矛盾或沖突的指令,以及它們如何在不同情境下作出反應,我們還有很多未知之處,但深入研究和了解更多這方面的信息是非常重要的。
Thanks for reading!
Hope you have enjoyed and learned new things from this blog!
About the authors
Yennie Jun
AI researcher, data scientist, writer <??http://artfish.ai/??>
END
本期互動內容 ??
?如果讓你設計一個實驗來測試AI如何處理矛盾指令,你會如何設計?有什么獨特的想法嗎?
??文中鏈接??
\[1]<??https://en.wikipedia.org/wiki/Cognitive_dissonance??>
\[2]<??https://microsoft.github.io/Workshop-Interact-with-OpenAI-models/Part-2-labs/System-Message/??>
\[4]<??https://openai.com/index/hello-gpt-4o/??>
\[5]<??https://www.anthropic.com/news/claude-3-5-sonnet??>
\[6]<??https://www.anthropic.com/research/many-shot-jailbreaking??>
原文鏈接:
<??https://towardsdatascience.com/dealing-with-cognitive-dissonance-the-ai-way-1f182a248d6d??>
