[智能体-257]:智能体的短期记忆,即memory;长期记忆,即RAG
Memory = 运行内存 RAM:只存本次对话上下文,进程在数据在、会话销毁数据丢;短期记忆,只用于本轮多轮聊天拼接 Prompt。
RAG = 机械硬盘:文档落地向量库持久化存储,永久保存全量私有资料;跨会话全局知识库,需要时按需检索。
一、核心定义与原理
1. Memory(短期记忆:会话上下文)
- 存储内容:历史聊天消息(HumanMessage/AIMessage)
- 生命周期:绑定单次会话 ID,程序重启 / 会话结束 → 数据清空
- 使用逻辑:每次提问自动把历史对话拼入 Prompt,实现多轮连贯对话
- ** 存储载体:内存数组、Redis (会话缓存),不会存入向量库
python
运行
from langchain_core.chat_history import InMemoryChatMessageHistory history = InMemoryChatMessageHistory() # 一轮一问一答自动append消息,只在当前会话生效 history.add_user_message("报销标准?") history.add_ai_message("一线350一晚")2. RAG(长期记忆:全局知识库)
- 存储内容:企业合同、规章、产品文档、海量私有非结构化文本
- 生命周期:文档切片→向量化→写入向量库 (Chroma/Milvus),永久落盘
- 使用逻辑:用户提问 → 向量相似度检索文档 → 文档作为参考上下文拼入 Prompt
- 跨会话:A 用户、B 用户、不同聊天会话共用同一套知识库
二、5 点关键差异
| 维度 | Memory 短期记忆 | RAG 长期记忆 |
|---|---|---|
| 存储对象 | 聊天历史对话 | 业务文档、知识库原文 |
| 存活周期 | 单次会话有效,临时缓存 在会话session的不同chat中有效 | 永久持久化,服务重启仍存在 |
| 触发时机 | 每次对话必加载历史 | 固定 RAG:每次必检索;Agent-RAG:LLM 按需检索 |
| 作用 | 标准化、常识、通识:理解上下文指代(它、这个、如上所述) | 定制化、个性化、专有:解决大模型知识截止、私有数据、幻觉问题 |
| 部署位置 | 内存 / 会话缓存 | 向量数据库 / 文件存储 |
三、三种落地组合方案(工程最常用)
方案 1:纯对话机器人(Memory + 无 RAG,L2)
只靠历史上下文聊天,没有私有知识库,只记住本轮对话内容。
python
运行
def get_hist(_): return history.messages chat_chain = {"input":RunnablePassthrough(),"history":get_hist} | prompt | llm方案 2:带会话记忆的固定 RAG(Memory+RAG,L3 企业客服)-- 固定流程
- Memory 保存多轮聊天,解决指代;
- RAG 固定前置检索,拿企业资料;
plaintext
用户问题→读取聊天历史→RAG查知识库→历史+文档+问题一起进Prompt方案 3:Agent+Memory+RAG (封装 Tool,L4 智能体) --大模型动态流程
- Memory:Agent 内部 scratchpad + 会话聊天记忆,保存本轮思考与对话;
- RAG:封装 RetrieverTool,LLM缺资料才调用知识库,常识直接用模型固有知识。
四、容易混淆的两个概念澄清
Agent 内部 scratchpad ≠ Memoryscratchpad:保存 ReAct/FC 每一轮「思考 - 工具 - 结果」步骤,是智能体任务临时草稿;Memory:用户聊天对话历史,面向用户。
RAG 不能替代 Memory,Memory 不能替代 RAG
- 没有 Memory:多轮对话无法理解代词;
- 没有 RAG:模型不知道企业内部规章制度。
五、拓展:长期对话记忆落地(会话数据落库 = 会话 RAG)
如果需要跨会话记住用户历史聊天(数月前聊天记录):把历史聊天消息存入向量库,变成聊天 RAG,提问时检索过往历史,此时聊天记录从「短期 Memory」升级为「长期 RAG 记忆」。
最简总结
- Memory:记人话(短期聊天)
- RAG:记资料(长期文档)
