15天学会AI应用开发(十八)使用LangGraph实现精确记忆功能

📅 2026/7/17 5:45:52
15天学会AI应用开发(十八)使用LangGraph实现精确记忆功能
上一篇文章介绍了如何使用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插件以及记忆功能需要的LangGraphpip install langchain langchain-core langchain-ollama langgraph由于之前使用的离线大模型Qwen2:1.5B不支持tool工具调用因此得下载支持tool工具调用的离线大模型Qwen2.5:3B也就是在命令行窗口执行下面命令即可下载大模型qwen2.5:3bollama pull qwen2.5:3b等待大模型下载完毕在命令行窗口执行下面命令即可启动Ollama并加载大模型ollama serve在Python代码开头添加下面的导包语句表示引入LangChain的智能体组件create_agent、人类消息组件HumanMessage、LangChain的大模型工具OllamaLLM以及LangGraph的内存存储组件InMemoryStorefrom 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(modelqwen2.5:3b) # 改成你本地的模型然后编写下面的LangChain调用代码先调用create_agent创建支持内存存取的智能体实例再通过智能体实例的invoke实例调用离线大模型示例代码如下# 用户提到喜欢什么东西时会调用remember_user_preference工具用户询问喜欢什么东西时会调用get_user_preference工具。 agent create_agent( modelllm, context_schemaContext, tools[remember_user_preference, get_user_preference], system_prompt当用户提到喜欢什么东西时请调用remember_user_preference工具当用户询问喜欢什么东西时请调用get_user_preference工具。, storeInMemoryStore() ) while True: user_input input(用户) if user_input in [退出, exit, quit]: print(对话结束) break # 调用离线大模型 result agent.invoke( {messages: [HumanMessage(contentuser_input)]}, contextContext(user_iduser_123) ) print(fAI{result[messages][-1].content}\n)运行上面的Python代码根据提示先后输入问题内容“我喜欢绿色”、“我喜欢什么颜色”输出日志结果如下用户我喜欢绿色 AI你的最喜欢的颜色是绿色。如果你有其他偏好想要记住随时告诉我哦 用户我喜欢什么颜色 AI你的喜欢的颜色是绿色。如果你有任何其他问题或者需要帮助请告诉我由日志信息发现AI应用在第一个问答中得知用户喜欢绿色在第二个问答中正确回忆起用户的偏好颜色。可见通过LangGraph的内存存储组件InMemoryStore初步实现了用户偏好的精确记忆功能。本系列的AI应用开发文章目录为《15天学会AI应用开发全目录零基础小白零Token消耗》。