agent的记忆来源,是将你与大模型的聊天记录一块发送给大模型,大模型根据聊天记录做出回答
(有点像医院门诊坐诊的医生,根据病人的病历,判断病人需要怎么样的治疗)

短期记忆: 实现方式很简单; 就是将聊天记录存在内存中,然后将聊天记录一块送入大模型;

然而随着聊天轮数越来越多, 聊天记录越来越长,然后送入模型的数据会越来越长,终究会超过大模型的上下文长度; 而且过长的上下文,还会影响推理速度;
常用解决方案有:
① 截断消息(使用中间件,在送入大模型前,裁剪消息,只保留最新几轮消息)
② 删除/精简消息: 对消息进行去冗余,减少无效数据
③ 总结/摘要消息: 使用内置的SummarizationMiddleware(总结)中间件,ConversationSummaryMemory(摘要)

但上述都有缺点,随着聊天轮数的增多,聊天记录总归会超过大模型上下文窗口上限, 无论是截断/精简/摘要都会丢失一些消息或者细节;

所以解决方案是:
短期记忆(最近几轮的对话)放在内存中,
长期记忆(历史对话)放入外部存储环境中(如向量数据库,数据库,文档,redis),然后根据需要加载 相关的对话历史;

LangGraph 将长期记忆作为 JSON 文档存储在存储中。store
每个记忆都组织在一个自定义的 namespace(类似于文件夹)和一个独特的 key(像文件名)下。命名空间通常包括用户或组织 ID 或其他标签,以便于组织信息。
这种结构支持记忆的分层组织。然后通过内容过滤器支持跨命名空间搜索。

InMemoryStore使用案例(开发与测试使用,生产环境使用PostgresStore 或其他存储方式)
①基本操作:

store = InMemoryStore()

# 存储键值对
namespace = ("users", "123", "profile") # namespace是一个元组
key = "info"
value = {"name": "Alice", "age": 30}
store.put(namespace, key, value)

# 获取值
item = store.get(namespace, key)


store.delete(namespace, key)

②启用语义搜索(需要配置嵌入模型)

# 使用魔搭下载嵌入模型 
#  modelscope download --model BAAI/bge-small-zh-v1.5  --local_dir ./.model/embedding/bge-small-zh-v1.5

from langchain_huggingface import HuggingFaceEmbeddings
# 使用本地嵌入模型
embeddings = HuggingFaceEmbeddings(
    model_name=r"D:\MyWork\GitProject\LLM\my_llm\.model\embedding\bge-small-zh-v1.5",
    model_kwargs={
        "device": "cpu",
        "trust_remote_code": True,
    },
    encode_kwargs={"normalize_embeddings": True},
)

store = InMemoryStore(
    index={
        "embed": embeddings,
        "dims": 1536,
    }
)

# 存储带索引的数据
store.put(
    namespace=("docs",),
    key="doc1",
    value={"title": "LangChain 简介", "content": "LangChain 是一个 LLM 框架"},
    index=["title", "content"]  # 索引字段
)

# 语义搜索
results = store.search(
    ("docs",),
    query="LangChain 框架",
    limit=5
)
#结果输出
for result in results:
    print(result.value) 

在langchain官方文档中,store是在工具中使用,但是我个人认为,store放在中间件(before_model,after_model)中使用更方便

LangChain 中常用VectorStore(向量存储) + Retriever(检索器)实现,这种基本就是RAG的实现方式。

但现在有专门的长期记忆框架如:Mem0, letta,MemoryScope等

Logo

火山引擎开发者社区是火山引擎打造的AI技术生态平台,聚焦Agent与大模型开发,提供豆包系列模型(图像/视频/视觉)、智能分析与会话工具,并配套评测集、动手实验室及行业案例库。社区通过技术沙龙、挑战赛等活动促进开发者成长,新用户可领50万Tokens权益,助力构建智能应用。

更多推荐