一、前言
上下文记忆 (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)