首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >15天学会AI应用开发(十八)使用LangGraph实现精确记忆功能

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

作者头像
aqi00
发布2026-07-16 21:27:58
发布2026-07-16 21:27:58
510
举报
文章被收录于专栏:老欧说安卓老欧说安卓

上一篇文章介绍了如何使用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:按照指定条件搜索对应的键名及其键值。

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

代码语言:javascript
复制
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:

代码语言:javascript
复制
pip install langchain langchain-core langchain-ollama langgraph

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

代码语言:javascript
复制
ollama pull qwen2.5:3b

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

代码语言:javascript
复制
ollama serve

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

代码语言:javascript
复制
from langchain.agents import create_agent
from langchain.messages import HumanMessage
from langchain_ollama import ChatOllama
from langgraph.store.memory import InMemoryStore

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

代码语言:javascript
复制
llm = ChatOllama(model="qwen2.5:3b")  # 改成你本地的模型

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

代码语言:javascript
复制
# 用户提到喜欢什么东西时,会调用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代码,根据提示先后输入问题内容“我喜欢绿色”、“我喜欢什么颜色?”,输出日志结果如下:

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

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

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

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2026-07-11,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 老欧说安卓 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档