langChain记忆

1、记忆类型

短期记忆---当前任务或会话的上下文

长期记忆---跨任务会话的经验与知识

2、添加记忆

2、1添加短期记---添加在内存

添加会话记忆(短期记忆)分为三步:

  • 导入并初始化Checkpointer

  • 创建Agent,指定Checkpointer

  • 调用Agent,指定thread_id

    from langchain.agents import create_agent
    from langgraph.checkpoint.memory import InMemorySaver

    agent = create_agent(
    "deepseek-chat",
    checkpointer=InMemorySaver()
    )
    from langchain.messages import HumanMessage

    设定thread_id,作为会话标识

    config = {"configurable": {"thread_id": "thread_1"}}

    第一次调用,告知AI我的信息

    response = agent.invoke(
    {"messages": [HumanMessage(content="你好,我叫虎哥,我最喜欢猫猫。")]},
    config # 调用时添加thread_id-------------------所有thread-id的都会快照成一组
    )

    print(response)

    ====================================

    ====================================

    第二次调用,询问我的信息,这次带上thread_id,唤起记忆

    response = agent.invoke(
    {"messages": [HumanMessage(content="我最喜欢的动物是什么?")]},
    config # 调用时添加thread_id
    )

    print(response)

2、2添加长期记---添加在数据库

复制代码
# 3.Memory持久化存储

这里我们选择使用Sqlite作为存储方案,首先需要按照langgraph-checkpoint-sqlite依赖:
```
uv add langgraph-checkpoint-sqlite
```
接着,按照以下步骤使用:
- 导入依赖
- 初始化checkpointer
- 自动建表
- 创建Agent,指定checkpointer-

=========基于sqlite=================================================

connection = sqlite3.connect("resources/checkpoint.db", check_same_thread=False)

将数据库文件存入resources目录下名为checkpoint.db

复制代码
import sqlite3
from langgraph.checkpoint.sqlite import SqliteSaver

# 连接sqlite
connection = sqlite3.connect("resources/checkpoint.db", check_same_thread=False)
# 初始化checkpointer
checkpointer = SqliteSaver(connection)
# 自动建表
checkpointer.setup()

# 创建agent
agent = create_agent(
    "deepseek-chat",
    checkpointer=checkpointer,
)

from langchain.messages import HumanMessage

# 设定thread_id,作为会话标识
config = {"configurable": {"thread_id": "thread_2"}}

# 第一次调用,告知AI我的信息
response = agent.invoke(
    {"messages": [HumanMessage(content="你好,我叫虎哥,我最喜欢猫猫。")]},
    config # 调用时添加thread_id
)

print(response)

# 第二次调用,询问我的信息,这次带上thread_id,唤起记忆
response = agent.invoke(
    {"messages": [HumanMessage(content="我最喜欢的动物是什么?")]},
    config # 调用时添加thread_id
)

print(response)

3、记忆管理策略

模型上下文溢出解决

当会话历史过长时,可能会超出模型的上下文窗口限制,常见的解决方案有:
**- 修剪消息----删除部分会话比如早期会话----不推荐

  • 删除消息----直接删除超出的快照----不推荐**
    - 总结消息摘要---用另一个模型进行总结---当上下文超出时总结

这里我们演示总结消息摘要的方案


常见写法

在这类 SummarizationMiddleware 里,trigger 通常是一个 tuple(二元组):

从语法上说

就你这里看,trigger 不是固定"几种语法",而是按照中间件实现支持哪些字段来决定。

最常见的可能有这几类:

  1. 按消息数触发

    复制代码
    trigger=("messages", 6)
  2. 按 token 数触发

    复制代码
    trigger=("tokens", 3000)
  3. 按字符/文本长度触发

    复制代码
    trigger=("chars", 5000)

    from langchain.agents import create_agent
    from langchain.agents.middleware import SummarizationMiddleware
    from langgraph.checkpoint.memory import InMemorySaver
    from langchain_core.runnables import RunnableConfig

    初始化checkpointer

    checkpointer = InMemorySaver()

    初始化中间件

    middleware = SummarizationMiddleware(
    model="deepseek-chat",
    trigger=("messages", 6), # 触发时机,当消息数超过3时,进行总结
    keep=("messages", 1) # 保留的会话数,超过2条
    )

    创建agent

    agent = create_agent(
    model="deepseek-chat",
    middleware=[middleware],
    checkpointer=checkpointer,
    )

    config: RunnableConfig = {"configurable": {"thread_id": "thread_3"}}

    制造长会话历史

    agent.invoke({"messages": [HumanMessage(content="你好,我是虎哥.")]}, config)
    agent.invoke({"messages": [HumanMessage(content="我最喜欢的运动是乒乓")]}, config)
    agent.invoke({"messages": [HumanMessage(content="我最喜欢的动物是猫猫")]}, config)

    测试效果

    final_response = agent.invoke({"messages": HumanMessage(content="你还记得我吗?")}, config)

    print(final_response)

    for message in final_response["messages"]:
    message.pretty_print()

相关推荐
破烂三角裤9 小时前
AI 没有记忆?我给儿童故事 Agent 搭了一套“长期记忆”系统
langchain
云和数据.ChenGuang11 小时前
光哥说Python 异常深度解析:从异常模型到工程化实践
java·前端·人工智能·python·langchain
Maiko Star15 小时前
【HM-LC】LangChain RAG查询优化详解:查询重写、混合检索与重排序实战
langchain·rag
2501_9130613416 小时前
MCP核心能力
langchain
小林ixn16 小时前
从线性 RAG 到 Agentic RAG:用 LangGraph 搭一个会判断、会纠错、会兜底的检索闭环
langchain·llm·agent
kyrie_sakura16 小时前
大模型学习19 大模型学习 - LangChain2_Retrieval(RAG-文档处理-向量处理检索-Milvus)
学习·langchain·milvus
承渊政道18 小时前
【大模型应用开发:基于GPT-4和ChatGPT】(使用LangChain框架和插件增强LLM的功能)
chatgpt·langchain·llm·框架·大模型应用开发
日日大王学编程19 小时前
LangGraph 基本用法详解:从入门到实战
python·语言模型·langchain
奔跑的熊猫19 小时前
VSCode + FastAPI +AI Agent+langchain第一个程序
langchain·fastapi
Maiko Star21 小时前
*【HM-LC】Milvus向量库详解:Collection、索引、混合检索与LangChain实战
langchain·milvus