Prompt 如何影響 LLM (大型語言模型) 的輸出?

  最近需要在團隊裡面準備分享有關 prompt engineering 的內容,想起之前在學習 prompt 技巧例如 Multi-shot, Cot 並且應用時,看到語言模型的回應真的照自己想要的方向走的時候覺得十分神奇,雖然使用起來沒問題,但不免還是有點好奇:「為什麼這樣講 LLM 就會那樣回?」,於是趁這個機會想盡量從第一性原理出發,了解一下 prompt 是如何影響模型的輸出。


LLM 的本質與定義

  大型語言模型(LLM)在本質上是一種專門設計來理解和生成人類語言的人工智慧。簡單來說,它們通過分析大量的文本資料,學習語言的模式、結構與意義。


如何做到? 從訓練流程開始說起

要讓模型能夠精準地預測並回應人類需求,通常需要經歷三個階段。這裡用人類學習的過程來做類比:

第一階段:預訓練 (Pretraining)

  在這個階段,模型會吃進超大規模的文本資料(書籍、程式碼、網頁)。訓練任務通常是把句子中的某些字遮擋起來,讓模型去填空。久而久之,它就學會了詞彙、語法、語義以及世界上的常見知識。

  這個階段就像小孩聆聽了大量的對話,慢慢學會怎麼組出通順的句子,但還不懂得分辨場合說話。

第二階段:微調 (Fine-tuning)

  預訓練完的模型雖然會說話,但往往太過隨意或無法對焦。微調就是給它特定的格式或任務(如:問答、翻譯、寫程式),利用標註好的問題與對應的正確答案資料集再訓練一次。

  這個階段像是小孩會說話後,父母開始糾正:「別人問你名字時,你要回答名字,而不是開始唱兒歌。」讓它懂得照需求回應。

第三階段:人類回饋強化學習 (RLHF)

  光是微調還不夠,因為正確的答案往往不只一種。這個階段會讓模型生成多個答案,由人類標註員挑選出哪個比較好,並訓練一個獎勵模型來優化 LLM,讓它的回答更貼近人類的偏好與價值觀。

  這個階段像是小孩學會答題後,還要經過老師的評分與引導,慢慢學會怎樣的回答是有禮貌、有幫助且受歡迎的。


  訓練完的模型幾乎就是我們平常互動的 LLM 了,為什麼說幾乎? 因為平常跟 LLM 互動的地方大多都是在模型商提供的應用程式,例如聊天應用 (ChatGPT) 或是 Coding Agent (Claude Code) 等等,而這些應用程式會因為本身定位的需求客製化許多功能,像是加入 Tool、或是有一些預設的 System prompt、Top-P、Top-k 參數等等 (下面會提到),拋開這些應用層的包裝,底下才是原本那個跟你玩接龍的模型。

  而在底層運作時,LLM 做的事情其實是預測下一個字(Token)。可以想像成文字接龍,模型在讀取了你給的 Prompt 後,會基於機率計算出最合理的下一個字是什麼,並且再基於這個結果繼續預測下一個字,如此反覆進行直到結束。

User prompt: "請用繁體中文解釋重力"

模型預測 token 1: "重" (基於 prompt)

模型預測 token 2: "力" (基於 prompt + "重")

模型預測 token 3: "是" (基於 prompt + "重力")

... 持續進行

  到這就有個疑問,既然模型是基於機率預測下一個字,照理說同樣的輸入應該得到同樣的輸出 (最大機率的字),但為什麼同樣的 prompt 每次 LLM 產出的結果都不一樣?


機率與採樣機制

  答案在於採樣策略(Sampling)。為了讓回答具備多樣性(例如寫作任務),LLM 並不總是選擇機率最高的那個字,而是會根據參數設定引入隨機性。如果使用過像 Claude Workbench 這樣的開發者工具,就會看到這幾個關鍵參數:

  • Temperature (溫度): 調整模型選擇低機率詞彙的傾向。溫度越高,回答越奔放、隨機;溫度越低,回答越保守、穩定。
  • Top-P / Top-K: 限制模型選字的範圍。例如 Top-P 設定 0.9,代表模型只會從累積機率達到 90% 的前幾個候選字中進行抽樣。

  如果想更近一步了解這些參數,可以參考保哥的優質文章 淺談 LLM 大型語言模型的 Temperature、Top-P 和 Top-K 參數


幻覺 (Hallucination):一本正經地胡說八道

  理解了「預測下一個字」的機制後,就能理解為什麼會有「幻覺」。

  由於在訓練資料裡出現的頻率很少,低頻的事實(例如某位冷門歌手的生日、某一天的具體股價)容易出現幻覺,另外,複雜的邏輯推理也容易出現幻覺。

  模型寧可亂猜也不願意承認自己不確定答案,主要的原因就來自於上面提到的訓練流程,RLHF 會針對模型的回答打分數,瞎猜比不作答得分更高,以下來自 OpenAI 與 Anthropic 的文章也都有指出這點:


語言模型之所以會出現幻覺,是因為標準的訓練和評估流程會獎勵猜測行為,而不是承認不確定答案。

假設有個語言模型被問到某人的生日,但它不知道,如果它猜「9 月 10 日」,有 1/365 的機會猜對,但說「不知道」則保證會得零分。

OpenAI - 語言模型為什麼會出現幻覺


At a basic level, language model training incentivizes hallucination: models are always supposed to give a guess for the next word.

Anthropic - Tracing the thoughts of a large language model


  因此,模型傾向於不管怎樣先生成一個看起來合理的字再說。實務上,為了避免這個問題,我們通常會在 Prompt 中明確要求:「如果你不確定答案,請直接說不知道」,這就是為了對抗模型天生的猜測傾向。

結語

  雖然身為非機器學習專業背景還是無法做到太深入的機制探討,但是滿足一下個人的好奇心還是很夠了。

  我認為 Prompt Engineering 並不只是在玩文字遊戲,它的核心目標是:「透過 Prompt 的設計,最大化 LLM 生成「我想要的 Token」的機率分佈」。我們平常使用的一些 prompt 技巧,其實都是在改變模型當下的上下文,引導它的機率預測路徑,讓它照著你的劇本走。

  雖然我們不需要成為機器學習專家才能使用 LLM,但了解這些底層機制,能幫助我們在撰寫 Prompt 時更有邏輯,也能在模型「發瘋」時更快理解發生了什麼事。