一江山水的随笔

当前位置:首页 - 技术 - 正文

Enjoy life!

先说结论

AI智能体的记忆系统分两层:短期记忆靠对话窗口(Context Window),像人类大脑的"工作记忆";长期记忆靠向量数据库(Vector Database),像"外部硬盘"。短期记忆容量有限(比如GPT-4的128K tokens),长期记忆理论上无限,但需要检索。实际工具如LangChain用内存对象管理短期,用Chroma/Pinecone管长期;AutoGPT则把关键信息存到JSON文件里。

短期记忆:对话窗口

短期记忆就是大模型能"看到"的上下文。每次对话,系统会把历史消息拼成一段文本塞进模型。比如你问"今天天气如何?",模型只能看到当前问题;但如果你连续问"北京呢?"、"上海呢?",模型需要之前提到的城市才能理解。这就是短期记忆的作用。

实现上,主流框架(如LangChain的ConversationBufferMemory)维护一个消息列表:

from langchain.memory import ConversationBufferMemory
memory = ConversationBufferMemory()
memory.chat_memory.add_user_message("Hi")
memory.chat_memory.add_ai_message("Hello")
# 加载历史
context = memory.load_memory_variables({})

但对话窗口有长度限制(GPT-3.5是4K,GPT-4 Turbo是128K)。超过限制时,必须丢弃早期消息——这就是为什么聊久了AI会"失忆"。解决方案有:滑动窗口(只保留最近N轮)、摘要(把历史压缩成摘要再塞进去)。

长期记忆:向量数据库

长期记忆解决的是"跨会话记忆"。比如你告诉AI"我的生日是5月20日",下次新对话它还能记得。实现思路:把信息转成向量(embedding),存到向量数据库,需要时检索相似片段。

以LangChain的VectorStoreRetrieverMemory为例:

from langchain.memory import VectorStoreRetrieverMemory
from langchain.vectorstores import Chroma
from langchain.embeddings import OpenAIEmbeddings

embeddings = OpenAIEmbeddings()
vectorstore = Chroma(collection_name="profile", embedding_function=embeddings)
retriever = vectorstore.as_retriever(search_kwargs={"k": 3})
memory = VectorStoreRetrieverMemory(retriever=retriever)
memory.save_context({"input": "我的生日是5月20日"}, {"output": "已记录"})
# 新对话时
context = memory.load_memory_variables({"input": "我的生日是什么?"})

检索时,系统把用户问题也转成向量,然后在库里找最相似的几个记忆片段。常用工具:Chroma(轻量)、Pinecone(云服务)、Weaviate(自托管)。

关键信息提取:让记忆更聪明

不是所有对话都值得存。更智能的系统会先提取关键信息(比如姓名、偏好、任务状态),再存入长期记忆。例如AutoGPT会解析用户指令,把"目标:写一篇博客"存到goals.json,把"当前步骤:收集素材"存到current_task.txt。提取方式:用LLM本身来总结(Prompt: "从对话中提取结构化信息"),或者用NER(命名实体识别)模型。

一个实用例子:用LangChain的EntityMemory自动提取实体:

from langchain.memory import ConversationEntityMemory
memory = ConversationEntityMemory(llm=llm)
memory.save_context({"input": "我叫小明,我喜欢编程"}, {"output": "好的"})
print(memory.entity_store.get("小明"))
# 输出: {'name': '小明', 'likes': '编程'}

总结

短期记忆 = 直接塞上下文(简单但容量有限),长期记忆 = 向量检索(无限但需手动保存)。实际应用中,两者结合:短期处理当前对话,定期把重要信息转存到长期。如果你想自己搭一个带记忆的AI智能体,推荐从LangChain的Memory模块入手,它已经封装好了大部分逻辑。

最后提醒:长期记忆的检索质量取决于embedding模型和向量数据库的配置,记得调参。另外,隐私问题别忽略——存了用户信息要合规。

本文来源:一江山水的随笔

本文地址:https://blog.298.name/post/200.html

主要内容:AI智能体记忆系统揭秘:短期与长期记忆实现

版权声明:如无特别注明,转载请注明本文地址!

想找什么搜索会更快哦!
站点信息
  • 文章总数:171
  • 页面总数:1
  • 分类总数:4
  • 标签总数:170
  • 评论总数:61
  • 浏览总数:1643341
控制面板
您好,欢迎到访网站!
  查看权限
Top