逆向工程:ChatGPT 的記憶是如何工作的

這篇文章是名為eric 工程師對ChatGPT記憶系統(tǒng)的深度逆向工程和技術(shù)實現(xiàn)推測。它詳細拆解了“可保存記憶”和包含“當(dāng)前會話歷史”、“對話歷史”、“用戶洞察”三個子系統(tǒng)的“聊天歷史”,分析了它們的工作原理、可能的實現(xiàn)方案(如向量數(shù)據(jù)庫、聚類算法),并探討了這些記憶系統(tǒng)如何顯著提升ChatGPT的用戶體驗,認為“用戶洞察”是體驗提升的關(guān)鍵。
文章深度剖析了“用戶洞察”(User Insights)高級記憶系統(tǒng),分析了ChatGPT如何從你的多輪對話中自動學(xué)習(xí)、總結(jié)你的專業(yè)背景(如對Rust編程的深入理解)、知識領(lǐng)域乃至溝通偏好,并附上置信度和時間范圍,悄然注入后續(xù)對話的上下文中。這正是ChatGPT能提供“千人千面”且高度相關(guān)回復(fù)的核心秘密。
地址:https://macro.com/app/md/54115a42-3409-4f5b-9120-f144d3ecd23a
原文很長,這里做一個重點梳理。
ChatGPT的記憶系統(tǒng):不止一種,而是一套組合拳
Eric發(fā)現(xiàn),ChatGPT的記憶并非單一系統(tǒng),而是主要由兩大部分構(gòu)成:“可保存記憶(Saved Memory)”和“聊天歷史(Chat History)”。
可保存記憶 (Saved Memory)
這個比較好理解,就是用戶可以主動控制、讓ChatGPT記住一些關(guān)于你的事實。比如你可以明確告訴它:“記住,我喜歡簡潔的技術(shù)解釋”,或者“記住,我是個素食主義者”。這些信息會被ChatGPT存起來,并在后續(xù)對話中作為背景知識(注入系統(tǒng)提示)使用。用戶還可以通過一個簡單的界面查看和刪除這些記憶條目。
有趣的是,這個系統(tǒng)在去重和矛盾檢測方面做得比較“粗放”,即使是高度相關(guān)的信息,也可能作為獨立的記憶條目共存。
聊天歷史 (Chat History):復(fù)雜且強大的“幕后功臣”
這部分就厲害了。雖然名字叫“聊天歷史”,但Eric通過實驗發(fā)現(xiàn),它實際上可能包含了三個子系統(tǒng),并且是提升助手響應(yīng)質(zhì)量的主要功臣。
? 當(dāng)前會話歷史 (Current Session History): 這部分記錄了用戶在其他對話中最近發(fā)送的少量消息(比如過去一天內(nèi),少于10條)。這使得ChatGPT能捕捉到你最近的一些零散想法或上下文,盡管Eric表示在實際使用中不太容易察覺到這個系統(tǒng)的作用。
? 對話歷史 (Conversation History): 這是真正的“聊天記錄”精華。ChatGPT能夠從過去的對話中提取相關(guān)上下文,甚至能直接引用你在其他對話中發(fā)送過的消息!實驗表明,它能準確引用長達兩周前的消息。超過兩周后,雖然不能精確引用,但也能提供消息的摘要。這暗示著消息檢索系統(tǒng)同時基于對話摘要和消息內(nèi)容進行索引。不過,ChatGPT自身的回復(fù),引用準確性似乎要差一些,要么是沒存,要么是存得更粗略。
? 用戶洞察 (User Insights): 這才是重量級選手,堪稱“可保存記憶”的自動化、高級版。根據(jù)Eric“套”出來的ChatGPT上下文信息,這些洞察是這樣的格式:
> “用戶在Rust編程方面擁有豐富的經(jīng)驗和知識,尤其是在異步操作、線程和流處理方面”
> “用戶在2024年底至2025年初的幾次對話中,多次詢問關(guān)于Rust編程的詳細問題,包括異步行為、trait對象、serde實現(xiàn)和自定義錯誤處理”
> “置信度=高”看到?jīng)]?這些洞察是跨多個對話生成的,還帶有時間范圍和置信度!置信度可能代表了用于生成該洞察的消息向量的相似度或數(shù)量。這些洞察的生成,顯然依賴于一個比兩周直接引用窗口更大的數(shù)據(jù)集。
技術(shù)實現(xiàn)猜想:向量數(shù)據(jù)庫、聚類與LLM的巧妙配合
Eric作為工程師,自然會思考這些功能背后可能的技術(shù)實現(xiàn)。
可保存記憶: 可能通過一個類似“bio”工具的函數(shù)實現(xiàn)。用戶說“記住XX”,就調(diào)用這個工具,LLM將用戶消息轉(zhuǎn)化為事實列表,進行簡單的檢查后存入數(shù)據(jù)庫。這些事實隨后會被注入到系統(tǒng)提示中。
當(dāng)前會話歷史: 實現(xiàn)起來相對簡單,可能就是對聊天消息表按時間篩選用戶最近的消息。
對話歷史: 這部分就復(fù)雜了。Eric推測使用了向量數(shù)據(jù)庫。消息被嵌入(embedding)后存入,一個庫按消息內(nèi)容索引,另一個按對話摘要索引。當(dāng)用戶發(fā)送新消息時,系統(tǒng)會查詢這兩個向量空間,找出兩周內(nèi)的相似內(nèi)容。對于更早的對話,則可能查詢一個存儲了對話摘要和消息摘要的第三個向量空間。
用戶洞察: 這是最復(fù)雜也最核心的部分。Eric認為這可能是一個批處理任務(wù),比如每周運行一次的定時任務(wù)(cron job):
找出過去一周活躍的用戶。
對每個用戶運行一個“洞察更新”程序。
這個程序的核心可能是對用戶的消息歷史(嵌入表示)進行**聚類分析**(比如k-NN算法),目標(biāo)是找到一些有意義的消息簇。
然后,將每個簇內(nèi)的消息文本喂給一個LLM,用特定提示詞(prompt)讓LLM生成洞察摘要,并附上時間戳和置信度。
最后,這些洞察被存起來,并在用戶與ChatGPT對話時加載到上下文中。為什么ChatGPT用起來那么爽?
通過ChatGPT平臺使用模型,體驗遠超直接調(diào)用API,這幾乎是共識。除了提示工程的優(yōu)化,記憶系統(tǒng)絕對是幕后功臣。
可保存記憶最直接,用戶主動定制,讓ChatGPT更“合身”。缺點是,不那么懂技術(shù)的用戶可能不知道怎么用。
用戶洞察彌補了這個不足。它自動學(xué)習(xí)用戶的偏好和知識背景(比如Eric的洞察顯示他懂Rust,喜歡技術(shù)性解釋),從而讓ChatGPT的回答更符合用戶的“胃口”,避免雞同鴨講,減少溝通成本。Eric甚至認為,用戶洞察系統(tǒng)貢獻了80%以上的體驗提升!
當(dāng)前會話歷史理論上能讓新對話更快進入狀態(tài),但實際感知不強。
對話歷史則賦予了ChatGPT一種“人類對話者”應(yīng)有的上下文感知能力,避免重復(fù)和矛盾。
































