AI 為什麼記得前面說過的話?
你先在 ChatGPT、Gemini 或 Claude 裡說「我叫小明」,過一會兒問「我叫什麼?」,它回答「小明」。看起來像是 AI 記住了你。
可是,上一章才說一般聊天不會當場更新模型參數 (Parameters)。那它是靠什麼記得前面那句話?
先看最常見的一條路:聊天程式把先前的訊息,連同新問題一起提供給模型 (Model)。模型這次仍看得到「我叫小明」,所以有資料可以用。不必為了這個名字重新訓練 (Training)。
我只打了一句,為什麼模型收到的不只一句?
你在輸入框新打的文字,和程式最後交給模型的內容,是兩件事。以這個簡化對話為例:
| 時間 | 使用者在做什麼 | 這次提供給模型的內容 |
|---|---|---|
| 第一次 | 輸入「我叫小明。」 | 使用者:我叫小明。 |
| 第二次 | 輸入「我叫什麼?」 | 使用者:我叫小明。→ 助理:你好!→ 使用者:我叫什麼? |
第二次你只新增最後一句,但聊天程式可以把舊的兩句也放進來。這次可參考的內容叫做上下文 (Context)。名字在這次的上下文裡,和名字已經寫進模型參數裡,不是同一件事。
圖表與對話都是教材示例,省略系統指示與實際格式標記。它說明一種常見資料流,不是擷取任何聊天產品的內部請求。
聊天畫面還在,不代表這次一定有提供
現在只改一件事:畫面仍顯示先前的對話,但程式這次只交給模型「我叫什麼?」。
這份輸入就沒有「小明」。我們能下的結論是:模型缺少從這份輸入得知名字的依據。 不能因此斷言它一定會回答不知道;真實模型可能猜測,也可能回答錯。更不能把猜中當作資料已經被保存的證明。
接著親手比較。先保留前文,再移除前文;最後看「程式另外存了名字」是否就夠了。
四個情境保持同一段聊天畫面,比較這次提供的內容。你也可以把小明換成小美,檢查名字的依據是否一起改變。練習只組裝資料,不執行模型。
程式有保存,為什麼還要「取回再送」?
假設聊天程式在模型外另外保存一筆資料:「使用者的名字是小明」。這份資料可以放在產品自己的儲存系統,和模型參數分開。
只存著,並沒有讓它自動成為這次輸入。 程式還要在需要時讀出相關資料,再提供給模型。練習中的「只存不送」和「取回再送」差的就是這一步。
有些產品把這類跨對話保存與取回的功能稱為記憶 (Memory)。這裡先看機制:
先前資訊 → 程式保存 → 需要時取回 → 加入本次上下文 → 模型依本次內容生成。
不同產品是否保存、保存哪些資訊、何時取回,以及是否跨對話,都有不同設計與設定。不能僅憑「新對話還知道我的名字」,就判定那個名字已被訓練進模型。
把三個地方分開,就不容易混淆
| 地方 | 本例放什麼 | 怎麼影響這次回答 |
|---|---|---|
| 本次上下文 | 這次提供的訊息、名字或取回的資料 | 模型在這次計算時可利用它。 |
| 產品保存的資料 | 對話紀錄,或另外保存的名字 | 程式需要把相關內容提供給模型,才會成為這次依據。 |
| 模型參數 (Parameters) | 先前訓練學到、用於計算的數值 | 影響模型如何處理輸入與生成內容;本例的四個情境都沒有更新它。 |
一般聊天使用既有參數來計算,稱為推論 (Inference)。訓練 (Training) 會執行參數更新;給更多前文、取回一筆紀錄,都不等於正在訓練。服務日後是否拿對話做訓練是另一個資料使用流程,不能和此刻的生成混為一談。
對話很長時,前面那句會一直在嗎?
不一定。上下文視窗 (Context Window) 有容量限制;產品可能保留部分歷史、把舊內容整理成摘要,或另外取回相關資料。原始紀錄還存在、摘要提到了名字、這次實際有提供名字,是不同的判斷。 摘要也可能漏掉細節。
容量為何有限、超量時怎麼處理,可回看為什麼不能把整段對話無限塞進去?。這章先分清資料在哪裡,不把所有忘記或答錯都歸因於容量。
後續談文件問答時,也會沿用同一個問題:資料放在外部,程式如何找到相關段落,再交給模型?那會接到檢索增強生成 (Retrieval-Augmented Generation, RAG);本章先建立「保存、取回、提供」的分工。
參考:Hugging Face 對話格式、Claude 上下文資料流、LangChain 的對話與跨對話記憶概念(2026-10-08 查核)。這些來源說明代表性實作,不表示所有聊天產品的保存、取回或資料使用設定都相同;練習沒有連接產品帳號,也不會真的建立跨對話記憶。