恒美微站
首页
关于我们
建站服务
主题模板
案例展示
资讯中心
联系我们
记忆系统实战,构建一个越聊越懂你的个性化助手
首页
资讯中心
/
记忆系统实战,构建一个越聊越懂你的个性化助手
记忆系统实战,构建一个越聊越懂你的个性化助手
发布时间:2026/8/7 12:53:31
记忆系统实战构建一个越聊越懂你的个性化助手记忆篇讲了很多理论和组件。这一篇我们把它们整合起来做一个完整的个性化助手。这个助手有短期记忆、长期记忆、用户画像能记住你是谁、你喜欢什么、之前聊过什么。越用越懂你。项目目标做一个个性化AI助手具备以下能力。记住当前对话的上下文支持多轮对话。记住用户的基本信息和偏好跨对话保持记忆。能智能回忆相关信息不需要每次都翻全部记忆。对话结束时自动提取重要信息存入长期记忆。支持多用户每个用户有独立的记忆和画像。系统架构整个系统分四层。对话层。管理当前对话的上下文处理用户输入和Agent输出。记忆层。短期记忆管理当前对话长期记忆管理跨对话信息用户画像管理用户偏好。智能层。智能回忆判断、信息提取、记忆维护。存储层。向量数据库存长期记忆JSON文件存用户画像。完整代码实现fromdatetimeimportdatetimefrompathlibimportPathimportjsonfromlangchain_openaiimportChatOpenAI,OpenAIEmbeddingsfromlangchain_community.vectorstoresimportChromafromlangchain_core.promptsimportChatPromptTemplatefromlangchain_core.messagesimportSystemMessage,HumanMessage,AIMessageclassShortTermMemory:短期记忆管理当前对话def__init__(self,max_messages20):self.messages[]self.max_messagesmax_messagesdefadd_user_message(self,content):self.messages.append(HumanMessage(contentcontent))self._trim()defadd_ai_message(self,content):self.messages.append(AIMessage(contentcontent))self._trim()def_trim(self):iflen(self.messages)self.max_messages:self.messagesself.messages[-self.max_messages:]defget_messages(self):returnself.messagesdefget_conversation_text(self):lines[]formsginself.messages:role用户ifisinstance(msg,HumanMessage)else助手lines.append(f{role}:{msg.content})return\n.join(lines)defclear(self):self.messages[]classLongTermMemory:长期记忆跨对话的持久记忆def__init__(self,db_path,user_id):self.embeddingsOpenAIEmbeddings()self.storeChroma(persist_directoryf{db_path}/user_{user_id},embedding_functionself.embeddings,)self.access_count{}defsave(self,content,importance0.5):保存一条记忆metadata{timestamp:datetime.now().isoformat(),importance:importance,}self.store.add_texts(texts[content],metadatas[metadata])self.store.persist()defrecall(self,query,k3):回忆相关记忆resultsself.store.similarity_search(query,kk)# 更新访问计数fordocinresults:keyhash(doc.page_content)self.access_count[key]self.access_count.get(key,0)1return[doc.page_contentfordocinresults]defcount(self):returnself.store._collection.count()classUserProfile:用户画像def__init__(self,storage_dir,user_id,llm):self.storage_dirPath(storage_dir)self.storage_dir.mkdir(exist_okTrue)self.user_iduser_id self.llmllm self.filepathself.storage_dir/f{user_id}_profile.jsonself.profileself._load()def_load(self):ifself.filepath.exists():withopen(self.filepath,r,encodingutf-8)asf:returnjson.load(f)return{basic_info:{},preferences:{},knowledge_level:{},topics:[],last_updated:,}defsave(self):self.profile[last_updated]datetime.now().isoformat()withopen(self.filepath,w,encodingutf-8)asf:json.dump(self.profile,f,ensure_asciiFalse,indent2)defupdate_from_conversation(self,conversation_text):从对话更新画像promptf请分析对话提取用户信息并更新画像。 当前画像{json.dumps(self.profile,ensure_asciiFalse,indent2)}对话{conversation_text}请输出更新后的完整画像JSON格式。只输出JSON。responseself.llm.invoke(prompt)try:new_profilejson.loads(response.content)self.profilenew_profile self.save()returnTrueexceptjson.JSONDecodeError:returnFalsedefget_summary(self):获取画像摘要parts[]ifself.profile.get(basic_info):infoself.profile[basic_info]parts.append(f用户信息{json.dumps(info,ensure_asciiFalse)})ifself.profile.get(preferences):prefsself.profile[preferences]parts.append(f偏好{json.dumps(prefs,ensure_asciiFalse)})ifself.profile.get(knowledge_level):levelsself.profile[knowledge_level]parts.append(f知识水平{json.dumps(levels,ensure_asciiFalse)})return\n.join(parts)ifpartselse暂无用户画像classPersonalAssistant:个性化助手整合短期记忆、长期记忆和用户画像def__init__(self,user_iddefault,storage_dir./assistant_data):self.llmChatOpenAI(modelgpt-3.5-turbo,temperature0)self.user_iduser_id# 初始化三个记忆组件self.short_memoryShortTermMemory(max_messages20)self.long_memoryLongTermMemory(db_pathf{storage_dir}/memory,user_iduser_id,)self.profileUserProfile(storage_dirf{storage_dir}/profiles,user_iduser_id,llmself.llm,)self.system_prompt你是一个个性化AI助手。请根据用户画像和历史记忆来提供个性化服务。 用户画像 {user_profile} 相关记忆 {memories} 注意事项 1. 根据用户画像调整回答风格和技术选型 2. 参考历史记忆中的信息保持对话连续性 3. 如果画像或记忆中没有相关信息正常回答即可 4. 不要提及画像或记忆这些内部机制defchat(self,user_input):用户对话# 1. 智能回忆memoriesself._smart_recall(user_input)memory_text\n.join(f-{m}forminmemories)ifmemorieselse无# 2. 获取用户画像profile_textself.profile.get_summary()# 3. 构建系统提示system_contentself.system_prompt.format(user_profileprofile_text,memoriesmemory_text,)# 4. 构建消息列表messages[SystemMessage(contentsystem_content)]messages.extend(self.short_memory.get_messages())messages.append(HumanMessage(contentuser_input))# 5. 调用大模型responseself.llm.invoke(messages)# 6. 更新短期记忆self.short_memory.add_user_message(user_input)self.short_memory.add_ai_message(response.content)returnresponse.contentdef_smart_recall(self,query):智能回忆判断是否需要检索记忆# 简单的规则判断recall_signals[上次,之前,我记得,我们聊过,你说过,我的]needs_recallany(siginqueryforsiginrecall_signals)ifneeds_recall:returnself.long_memory.recall(query,k3)return[]defend_session(self):会话结束时提取重要信息并更新画像conv_textself.short_memory.get_conversation_text()ifnotconv_text:return# 1. 提取重要信息存入长期记忆extract_promptf请从以下对话中提取值得长期记住的重要信息。 只提取重要的事实、偏好、决策。每条一行。如果没有返回无。 对话{conv_text}resultself.llm.invoke(extract_prompt)ifresult.content.strip()!无:lines[l.strip()forlinresult.content.split(\n)ifl.strip()]forlineinlines:cleanline.split(. ,1)[-1]ifline[0].isdigit()elseline self.long_memory.save(clean,importance0.7)# 2. 更新用户画像self.profile.update_from_conversation(conv_text)# 3. 清空短期记忆self.short_memory.clear()print(f会话已保存。长期记忆共{self.long_memory.count()}条。)# 使用示例 if__name____main__:# 创建助手assistantPersonalAssistant(user_idzhangsan,storage_dir./assistant_data,)# 第一次会话print( 第一次会话 )print(assistant.chat(你好我叫张三是个Python开发者有5年经验))print(assistant.chat(我最近在学AI Agent开发用的LangChain))print(assistant.chat(我偏好简洁的代码风格不喜欢太多注释))assistant.end_session()# 第二次会话新的对话print(\n 第二次会话 )print(assistant.chat(你好))# 助手应该知道你是张三print(assistant.chat(我想做一个Agent项目你有什么建议))# 助手会根据你的Python和LangChain背景给建议assistant.end_session()# 第三次会话print(\n 第三次会话 )print(assistant.chat(上次你建议我做什么来着))# 助手能回忆起上次对话的内容assistant.end_session()效果说明运行这个代码你会看到这样的效果。第一次会话用户告诉助手自己的信息。助手正常回答。会话结束时助手把重要信息提取出来存入长期记忆同时更新用户画像。第二次会话用户说你好。助手已经知道用户是张三了会个性化地打招呼。用户问Agent项目建议助手会结合用户的Python和LangChain背景来回答。第三次会话用户问上次你建议什么。助手从长期记忆中检索到上次对话的内容回忆起之前的建议。这就是越聊越懂你的效果。可以继续优化的方向这个系统是基础版本可以继续优化。加Rerank提升记忆检索质量。加记忆去重和合并机制。加定期维护任务自动清理过期记忆。加记忆重要程度评估。加多用户并发支持。把用户画像也存到向量数据库里做语义检索。这些都是前面几篇讲过的内容可以逐步加进来。记忆篇到这里就结束了。从记忆类型概述到对话记忆管理从知识库记忆到用户画像从记忆检索更新到完整实战。一套完整的Agent记忆体系。下一篇进入新模块LangChain深度篇。深入掌握LangChain这个最主流的Agent开发框架。