一、前言
上下文記憶 (Contextual Memory)解決方案的作用: 提升 AI(尤其是大語言模型,LLM)的對話連貫性 和個性化 。 本文將介紹幾個主流的實現方式。
二、🧠 什么是上下文記憶?
在對話系統中,上下文記憶的目標是讓模型記住: 你過去說過什么(對話歷史 ) 你的一些偏好/背景(長期記憶 ) 你最近的意圖(短期記憶 )
三、? 實現方案一:對話歷史拼接(最基礎)
描述:將所有之前的對話作為 prompt 的一部分,一起傳給模型。
示例:
history = [ { "role" : "user" , "content" : "我叫小明" } , { "role" : "assistant" , "content" : "你好,小明" } , { "role" : "user" , "content" : "我喜歡籃球" }
]
new_input = { "role" : "user" , "content" : "我最喜歡的球星是誰?" } messages = history + [ new_input]
response = llm. chat( messages= messages)
缺點:token長度易爆;對長時間記憶力弱。
四、? 實現方案二:嵌入向量 + 檢索記憶(RAG + Memory)
描述:
將用戶歷史對話或知識用向量化 方式存入向量數據庫 ; 后續查詢時根據當前問題檢索“相關記憶 ”,再加到 prompt 里。
結構:
當前用戶輸入 → 嵌入查詢 → 找相關記憶 → 構造 prompt → LLM回答
示例步驟:
1.用戶說:“我住在北京” 2.你將這句話嵌入并存入向量庫(如 Weaviate) 3.用戶說:“最近北京天氣咋樣?” 4.向量檢索出“我住在北京”這一記憶,構造 prompt:
記憶:你住在北京
問題:最近北京天氣咋樣?
五、? 實現方案三:顯式記憶管理框架(如 mem0 / LangChain)
描述:使用專門的“記憶管理器”
自動保存每輪對話為 memory 檢索、插入相關 memory 支持短期、長期、多用戶等場景
示例:偽代碼
memory = Memory( )
memory. add( messages, user_id= "user1" )
relevant_memory = memory. search( "北京天氣" )
prompt = format_prompt( relevant_memory, user_input)
response = llm. call( prompt)
六、? Demo:簡單聊天機器人,帶上下文記憶
1,技術棧:Python、OpenAI、Mem0(上下文記憶實現框架)
2.📦 安裝依賴(確保你安裝了 mem0 和 openai):
pip install mem0 openai
(?? 注意:mem0 目前默認支持 OpenAI ,你可以手動適配 DashScope 等其他 LLM)
3.📁 文件:mem0_chat_demo.py
from mem0 import Memory
import openai
import os
openai. api_key = os. getenv( "OPENAI_API_KEY" ) or "sk-xxx"
memory = Memory( )
def chat_with_memory ( user_input, user_id= "user1" ) : relevant = memory. search( user_input, user_id= user_id) memories_str = "\n" . join( [ f"- { r[ 'memory' ] } " for r in relevant[ "results" ] ] ) system_prompt = f"""
你是一個有記憶的智能助手,請根據以下用戶記憶回答問題:
用戶記憶:
{ memories_str}
""" messages = [ { "role" : "system" , "content" : system_prompt. strip( ) } , { "role" : "user" , "content" : user_input} ] response = openai. ChatCompletion. create( model= "gpt-3.5-turbo" , messages= messages) answer = response. choices[ 0 ] . message. contentmessages. append( { "role" : "assistant" , "content" : answer} ) memory. add( messages, user_id= user_id) return answer
if __name__ == "__main__" : print ( "開始對話(輸入 'exit' 退出)" ) while True : user_input = input ( "你:" ) if user_input. lower( ) == "exit" : break reply = chat_with_memory( user_input) print ( f"AI: { reply} " )
4.🔍 Demo 解讀
(1)?? 上下文記憶體現在哪? 使用 memory.search(user_input) 從過往對話中檢索與當前輸入 最相關的內容 使用 memory.add(messages) 保存本輪的對話內容 模型不僅根據當前提問回答,還會利用“過去的你說過的話”,這就是“記憶” (2)🔁 示例對話:
你:我喜歡籃球
AI:好的,我記住了你喜歡籃球。
你:我最喜歡的球星是誰?
AI:你可能最喜歡的球星是籃球相關的,例如科比或詹姆斯。tag: 即使你沒說球星是誰,模型可以結合“你喜歡籃球”的歷史信息做推理。
你是一個有記憶的智能助手,請根據以下用戶記憶回答問題:
用戶記憶:
- 我喜歡籃球
- 我的城市是北京
這種方式稱為:增強提示詞(prompt augmentation) ; 通過把 memory 拼接進 prompt,引導模型在更具上下文的條件下回答問題。
小總結
要素 實現方式 記憶存儲 memory.add(messages)
記憶檢索 memory.search(user_input)
提示詞構建 把相關記憶拼接進 system prompt LLM 響應生成 用拼接后的 prompt 交給 OpenAI 的 Chat 模型處理
七、方案選擇建議 / 總結
適用場景 方案 簡單對話 拼接歷史 messages 長對話、知識 Q&A 向量數據庫 + RAG 多用戶、多記憶管理 mem0 / LangChain Memory
上下文記憶實現本質是解決 模型無法長期記憶 的問題,常見方法包括: Prompt 拼接 向量數據庫檢索(RAG) 顯式框架(如 mem0, LangChain Memory)