深入剖析 LangChain:解构大模型的记忆增强策略
LangChain 为大语言模型(LLM)提供了丰富的记忆组件,使得构建具有上下文感知能力的对话应用变得简单。本文将深入拆解基于 LangChain 的大模型记忆方案,涵盖原理、类型及具体实现。
1. 安装记忆的原理
1.1. 核心步骤
给 LLM 安装记忆的核心逻辑包含三个关键步骤:
- 调取历史:在发起新对话请求前,检索之前的历史消息。
- 填充 Prompt:将检索到的历史消息作为上下文填充到当前的 Prompt 模板中。
- 保存记忆:对话结束后,将新的交互记录保存到 Memory 存储中,以便后续轮次使用。
1.2. 常规使用方法的弊端
若手动实现上述三步,开发者需要编写大量重复的模板代码,不仅冗余且容易遗漏关键逻辑。LangChain 通过封装 Memory 组件和 Chain 机制,简化了这一流程,让开发者能更专注于业务逻辑的实现。
2. 记忆的种类
根据存储时长和机制的不同,LangChain 中的记忆主要分为短时记忆和长时记忆。
- 短时记忆:通常指当前会话窗口内的上下文。常用
ConversationBufferMemory以键值对方式将消息存在内存中。对于较长对话,可使用ConversationSummaryMemory对上下文进行总结摘要,或ConversationTokenBufferMemory基于固定 Token 数量自动刷新旧消息。 - 长时记忆:用于跨会话的长期知识存储。可通过向量数据库(如 FAISS、Chroma)存储嵌入后的文本,或使用 Redis、Elasticsearch 等持久化存储。
以下将以 ConversationBufferMemory 为例,演示如何快速为 LLM 安装记忆。
3. 给 LLM 安装记忆 — 非 MessagesPlaceholder
3.1. ConversationBufferMemory 使用示例
使用 ConversationBufferMemory 记住上下文的基本代码如下:
from langchain.memory import ConversationBufferMemory
memory = ConversationBufferMemory()
memory.save_context(
{"input": "你好,我的名字是半支烟,我是一个程序员"},
{"output": "你好,半支烟"}
)
print(memory.load_memory_variables({}))
3.2. LLMChain + ConversationBufferMemory 使用示例
结合 PromptTemplate 使用时,需指定 memory_key 以匹配 Prompt 中的变量名:
from langchain.prompts import PromptTemplate
from langchain.chains import LLMChain
from langchain.chat_models ChatOpenAI
langchain.memory ConversationBufferMemory
template =
prompt = PromptTemplate(
template=template,
input_variables=[, ],
)
memory = ConversationBufferMemory(
memory_key=,
)
model = ChatOpenAI(model=)
chain = LLMChain(
llm=model,
memory=memory,
prompt=prompt,
verbose=,
)
chain.predict(human_input=)
chain.predict(human_input=)
chain.predict(human_input=)

