教程中心进阶
进阶

用 LangChain 给 Agent 加上长期记忆(Memory)

2026.07.23· 6 个步骤 · 约 16 分钟阅读· 🧠 LangChain

默认情况下,大模型是「金鱼记忆」——一轮对话结束,下一轮就忘光。LangChain 提供一整套 Memory 抽象,让你给 Agent 加上短期上下文长期记忆:既能记住刚才聊到哪,也能跨会话调取历史偏好。本教程用 Python 演示几种记忆方案。

🧠 本教程适合:会一点 Python、想给自己的 Agent 做「记得用户」的开发者。需要可调用的大模型 API key。

Step 1:环境准备

1 环境准备

安装 LangChain 及一个聊天模型。下面以 OpenAI 兼容接口为例(换成任意厂商 key 均可)。

pip install langchain langchain-openai langchain-community
export OPENAI_API_KEY="sk-..."

Step 2:选对记忆类型

2 选对记忆类型

LangChain 的记忆不是「越大越好」,而是「按场景选」:

记忆类适合
ConversationBufferMemory短对话,全部历史原样带入
ConversationWindowMemory只保留最近 K 轮,省 token
ConversationSummaryMemory长对话,自动压缩成摘要
VectorStoreRetrieverMemory长期记忆,按语义检索历史

Step 3:短期记忆:窗口记忆跑通

3 短期记忆:窗口记忆跑通

先上最简单的窗口记忆,限制只带最近 3 轮,避免上下文爆炸。

from langchain.memory import ConversationWindowMemory
from langchain.chains import ConversationChain
from langchain_openai import ChatOpenAI

memory = ConversationWindowMemory(k=3)
chain = ConversationChain(llm=ChatOpenAI(), memory=memory)
print(chain.invoke({"input": "我叫小明,做电商"})["response"])

Step 4:长期记忆:接向量库

4 长期记忆:接向量库

要「跨会话记得你」,把历史存进向量库(Chroma / FAISS / pgvector),每次按语义检索相关片段。

from langchain.memory import VectorStoreRetrieverMemory
from langchain_community.vectorstores import Chroma
from langchain_openai import OpenAIEmbeddings

vectorstore = Chroma(embedding_function=OpenAIEmbeddings())
retriever = vectorstore.as_retriever(search_kwargs={{"k": 3}})
memory = VectorStoreRetrieverMemory(retriever=retriever)

Step 5:用摘要记忆压缩长上下文

5 用摘要记忆压缩长上下文

对话一长,token 费钱。用 SummaryMemory 让模型边聊边总结,只保留「精华」。

摘要会丢失细节。对「下单记录」这类必须精确的信息,别只靠摘要——落地到数据库字段更稳妥。

Step 6:持久化:把记忆存到数据库

6 持久化:把记忆存到数据库

内存里的记忆一重启就没。生产环境把向量库 / 摘要落到 Redis、Postgres 或文件,按 user_id 隔离。

# Chroma 持久化到磁盘
vectorstore = Chroma(
  persist_directory="./memory_store",
  embedding_function=OpenAIEmbeddings())
# 之后每次启动从同一目录加载即可

常见问题速查

你遇到的现象大概率原因 & 解决
越聊越贵换 Window/Summary 记忆,限制带入长度
记错用户用 user_id 隔离记忆,别共享一条
重启后失忆记忆未持久化,接数据库/磁盘
检索到无关历史调小 k、换更好的 embedding 模型