15天学会AI应用开发(十八)使用LangGraph实现精确记忆功能
2026/7/17 5:45:43 网站建设 项目流程

上一篇文章介绍了如何使用LangGraph实现会话记忆功能,可是历史会话又多又杂,难以全部记忆,开发者更希望AI应用记住关键信息,比如用户喜欢什么、爱好什么等等。
对于AI应用的精确记忆需求,LangChain支持在调用create_agent时输入store参数,以指定数据存储方式,接下来介绍如何通过store参数存取用户的偏好信息。

一、创建智能体实例时的输入参数

上一篇文章调用create_agent时,仅用到了少数几个参数,为方便后续的函数引用,下面逐一说明create_agent的常见输入参数:

model:智能体推理所需的大模型实例。
tools:智能体可调用的工具集合,如计算器、搜索、数据库等。
system_prompt:智能体的提示词信息,可规定智能体的特定行为。
middleware:给智能体的执行链路挂载全局拦截处理器,在大模型调用、工具执行、消息流转的前后统一做切面处理,无需修改智能体的主要逻辑。可用于压缩历史记录、统一打印日志、过滤输入输出、限制请求流量、异常统一捕获等等。
context_schema:智能体会话的上下文信息,包括用户ID、租户信息、数据库连接、访问权限等等。
checkpointer:智能体的状态快照持久化管理器,可开启会话记忆、断点续跑、状态存档能力。不传该参数则智能体完全无状态,每轮调用后会清空所有历史对话与工具执行记录。
store:智能体的数据存储器,可长期记忆用户的业务数据。为InMemoryStore实例时,表示数据保存在内存中;为SqliteStore实例时,表示数据保存在Sqlite。
debug:是否打印调试日志。

二、存储工具Store的常见用法

不管InMemoryStore还是SqliteStore,都基于BaseStore,且拥有统一的存取方法,说明如下:

put:往指定键名存入对应的键值。
get:从指定键名获取对应的键值。
delete:删除指定键名及其对应的键值。
search:按照指定条件搜索对应的键名及其键值。

比如下面的代码就定义了存取用户偏好的两个工具方法:

from dataclasses import dataclass from langchain.tools import tool, ToolRuntime @dataclass class Context: user_id: str @tool def remember_user_preference( key: str, value: str, runtime: ToolRuntime[Context] ) -> str: """记住用户的偏好设置""" user_id = runtime.context.user_id # 写入 Store runtime.store.put( ("users",user_id), # namespace,名字空间 user_id, # key,键名 {"preferences": {key: value}} # value,键值 ) return f"已记住:{key} = {value}" @tool def get_user_preference( key: str, runtime: ToolRuntime[Context] ) -> str: """获取用户的偏好设置""" user_id = runtime.context.user_id # 从 Store 读取 item = runtime.store.get(("users",user_id), user_id) if item: prefs = item.value.get("preferences", {}) return prefs.get(key, "未设置") return "未找到用户信息"

三、使用InMemoryStore记住用户偏好

在命令行窗口执行下面命令,即可安装LangChain及其用到的Ollama插件,以及记忆功能需要的LangGraph:

pip install langchain langchain-core langchain-ollama langgraph

由于之前使用的离线大模型Qwen2:1.5B不支持tool工具调用,因此得下载支持tool工具调用的离线大模型Qwen2.5:3B,也就是在命令行窗口执行下面命令,即可下载大模型qwen2.5:3b:

ollama pull qwen2.5:3b

等待大模型下载完毕,在命令行窗口执行下面命令,即可启动Ollama并加载大模型:

ollama serve

在Python代码开头添加下面的导包语句,表示引入LangChain的智能体组件create_agent、人类消息组件HumanMessage、LangChain的大模型工具OllamaLLM,以及LangGraph的内存存储组件InMemoryStore:

from langchain.agents import create_agent from langchain.messages import HumanMessage from langchain_ollama import ChatOllama from langgraph.store.memory import InMemoryStore

在OllamaLLM的构造方法中填写model参数,指定当前引用的离线大模型名称,如下:

llm = ChatOllama(model="qwen2.5:3b") # 改成你本地的模型

然后编写下面的LangChain调用代码,先调用create_agent创建支持内存存取的智能体实例,再通过智能体实例的invoke实例调用离线大模型,示例代码如下:

# 用户提到喜欢什么东西时,会调用remember_user_preference工具;用户询问喜欢什么东西时,会调用get_user_preference工具。 agent = create_agent( model=llm, context_schema=Context, tools=[remember_user_preference, get_user_preference], system_prompt="当用户提到喜欢什么东西时,请调用remember_user_preference工具;当用户询问喜欢什么东西时,请调用get_user_preference工具。", store=InMemoryStore() ) while True: user_input = input("用户:") if user_input in ["退出", "exit", "quit"]: print("对话结束") break # 调用离线大模型 result = agent.invoke( {"messages": [HumanMessage(content=user_input)]}, context=Context(user_id="user_123") ) print(f"AI:{result['messages'][-1].content}\n")

运行上面的Python代码,根据提示先后输入问题内容“我喜欢绿色”、“我喜欢什么颜色?”,输出日志结果如下:

用户:我喜欢绿色 AI:你的最喜欢的颜色是绿色。如果你有其他偏好想要记住,随时告诉我哦! 用户:我喜欢什么颜色? AI:你的喜欢的颜色是绿色。如果你有任何其他问题,或者需要帮助,请告诉我!

由日志信息发现,AI应用在第一个问答中得知用户喜欢绿色,在第二个问答中正确回忆起用户的偏好颜色。可见通过LangGraph的内存存储组件InMemoryStore,初步实现了用户偏好的精确记忆功能。

本系列的AI应用开发文章目录为《15天学会AI应用开发全目录(零基础小白,零Token消耗)》。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询