第09章:上下文与记忆 (1)
1、概述
1.1 为什么需要记忆(Memory)
记忆是一种记住之前互动信息的系统。随着Agent处理涉及大量用户交互的复杂任务,记忆变得至关重 要!
大多数的大模型应用程序都会有一个 会话接口 ,允许我们进行 多轮的对话 ,并有一定的上下文记忆能 力。比如

但实际上,大模型本身是“无状态”的, 不会记忆 任何上下文的。即每次调用 agent.invoke() 都是全新 的开始,不记得之前的对话。
举例:
from langchain.agents import create_agent
from langchain.messages import HumanMessage
from dotenv import load_dotenv
load_dotenv(verbose=True)
agent = create_agent(
model="deepseek:deepseek-v4-pro",
tools=[]
)
print("\n第一轮对话:")
response1 = agent.invoke({
"messages": [
HumanMessage("我叫张三")
]
})
print(f"Agent: {response1['messages'][-1].content}")
print("\n第二轮对话:")
response2 = agent.invoke({
"messages": [
HumanMessage("我叫什么?")
]
})
print(f"Agent: {response2['messages'][-1].content}")

我们希望的智能体应该是右图的情况:

1.2 如何解决记忆问题
1 上下文工程
实现这个记忆功能,就需要 额外的模块 去保存我们和模型对话的上下文信息,然后在下一次请求时, 把历史信息都输入给模型,让模型输出结果。
在 LangChain 中, 记忆(Memory) 就是专门负责“ 存储历史交互信息 ”的组件,核心作用是「 保存上下 文 」和「 提供上下文 」,让LLM在每次响应时,都能“看到”之前的对话内容。
上下文工程(Context Engineering) 负责 “合理组织”这些记忆和任务信息 ,让LLM的响应更连贯、更贴 合需求。这也是Agent能实现 复杂多轮交互 的核心基础


2 上下文类型及相关的API
LangChain的上下文工程是基于Agent讨论的,而上下文工程是构建在LangGraph之上的。
LangGraph 提供了三种管理上下文的方法,这些方法结合了可变性和生命周期维度:

1.3 LangChain的记忆
1 记忆的分类
官方说明:https://docs.langchain.com/oss/python/concepts/memory
记忆分为短期记忆和长期记忆,对应不同的使用场景:
- 短期记忆(Short-term memory、会话级记忆、thread-scoped memory):作用范围是单个 对话线程(Thread)内,一旦开启新对话(更换 thread_id ),记忆即消失。
- 长期记忆(Long-term memory,跨会话级记忆 ):在会话间存储用户特定或应用级数据, 并 在 会话线程间共享 。它可以随时在任何线程中被调用。记忆的范围是任意自定义命名空间,而不 仅仅是单一线程 ID。

2 记忆的管理
在LangChain v0.x版本中,通过专用的xxxMemory类管理记忆。
在LangChain v1.x版本中,Agent是构建在LangGraph图结构之上的,通过上文提到的state和store构 建记忆系统。使用更简单、功能更统一。
state:短期记忆对象,以 会话 为单位组织,包含当前会话的所有消息记录以及自定义信息。
store:长期记忆对象, 跨会话持久化 的数据,通常需要结合向量数据库或外部存储实现
更多推荐

所有评论(0)