TL;DR:它不是「忘記」,是它根本沒有記憶。每次回你話,它做的是把整段對話從頭重讀一遍,再接下去寫。所謂「記得」,不過是每次都重看了一次。問題是它一次能讀進去的量有上限,這個範圍叫 context window(上下文視窗)。對話太長,最舊的部分就被擠出去、它這次根本沒讀到。所以與其說它「忘了」,不如說那段話從頭到尾就沒進到它眼前。

這事你八成碰過。跟 AI 聊一個東西,開頭你交代清楚「全部用繁體中文、不要 emoji」,它前幾輪乖乖的;聊著聊著,十幾二十輪過去,又開始冒簡體、撒 emoji。或者更乾脆——昨天跟它討論到一半的事,今天開個新對話再問,它一臉茫然,好像那段話從沒發生過。

你會很自然地說「它怎麼又忘了」。但「忘記」這個詞有點誤導:要先「記得」過,才談得上忘。而它呢……其實從來沒有記得。

它每次都是從頭讀一遍

先講一件反直覺的事:它沒有記憶。你跟它聊了半天,它腦袋裡沒存著「我們剛剛聊到哪」。

那它怎麼接得上話?因為每次輪到它回你,背後是把你們從開頭到現在的整段對話,原封不動再餵它讀一遍,從頭讀到尾,然後往下接一句。它讀完那一瞬間「知道」前面發生了什麼,但那不是記住,是剛剛又重看了一次。

打個比方。它比較像一個失憶、但讀很快的人。你每次去找他,都把你們從頭到現在的對話紀錄整本塞給他,他飛快翻完,抬頭回你一句。那一刻他是真懂了你們聊到哪;可他腦子裡什麼都沒留,全靠手上那本。你下次再來,又是重新塞一次。它骨子裡一直在做的,就是讀完眼前這串、然後接下去寫最順的那個字而已。

那本紀錄,有塞不下的時候

問題來了:那本「對話紀錄」不能無限長。

它一次能讀進去的量是有上限的,這個上限就叫 context window,上下文視窗。算的單位是 token——也就是它眼裡的文字小塊,不完全等於一個字(這個我在 Token 是什麼 裡聊得比較細,草莓數 r 那篇也有個積木的比喻,這篇不看也不影響)。

現在這個視窗開得很大,一般閒聊很難塞爆。但只要你貼了一篇長文、或一路聊了很久很久,總量超過上限,系統就得動手砍——通常是把最舊的對話先丟掉(各家做法不太一樣,有的直接砍掉、有的先壓成一小段摘要再留著)。被丟掉的那一段,它這一輪是真的沒讀到。

所以你開頭交代的那些規矩,聊太長之後會慢慢「失效」,多半是那句話早就滑出視窗,這一輪根本沒進到它眼前。它不是叛逆,就只是沒看到。

那個「記憶」功能,是另一回事

你可能會說:「ChatGPT 不是有記憶功能嗎?」有,但那個跟我們在講的 context window 不是同一層的東西。

那個記憶(Memory)功能,比較像它幫你另外整理的一份小抄(OpenAI 官方有說明這功能)。你說過「我是寫程式的」「我習慣用繁中」,它記下來,之後每開新對話,偷偷把這些塞回去提醒自己。那是跨對話、長期留著的東西,而且是濃縮過的重點,不是你們每一句話的逐字稿。

context window 則是「這一次,它眼前能看多少」。這兩個常被當成同一回事,其實根本不在同一層。你新開一個對話它忘得一乾二淨,就因為這一次的對話紀錄是空白的——那份小抄也許還在,但它頂多是幾條濃縮的重點,不是你們昨天那整段對話。

知道這件事之後,可以怎麼用

想通它沒記憶、全靠重讀,有些原本很煩的狀況就順了。

要它記住某個關鍵設定,最土也最有效的辦法就是「再貼一次」。重要的規矩,過一陣子重申一遍;開新對話時,把前情提要濃縮成幾句帶上去(像開頭先丟一句「承上次:我在寫一封婉拒信,語氣要客氣但堅定,全程用繁中」,把關鍵設定一次交代清楚)。這不是它笨到要你複述,是你得確保那段話這一輪真的出現在它面前——出現了,它就讀得到。

還有一招:一個對話聊到又臭又長、前後打架的時候,與其在裡面跟它盧,不如乾脆開個乾淨的新對話,把目前的結論濃縮成幾句貼進去重來。新的一頁、乾淨的視窗,往往比硬聊下去清爽得多。

至於它另外那些怪,比方同一個問題每次答案都不一樣,那是別的機制,跟記不記得無關,這篇就先不岔過去了。

說到底,它的毛病不是記性差,是壓根沒在用記性那套東西。每接一句話,它都是把眼前那本對話重讀一遍,再往下接。讀得到的就接得上,沒讀到的,對它來說就等於沒發生過。下次它又「忘了」你前面講的,先別急著嫌。多半是那句話這輪沒擺到它眼前;你補回去,它就接得回來。

English version: Why Does AI Forget What You Said Earlier?