第4课:为什么记忆能力如此重要 - 学习笔记_4

第4课:为什么记忆能力如此重要 - 学习笔记

📚 课程核心主题

本节课深入讲解记忆能力的重要性,以及如何实现短期记忆和长期记忆,通过实际代码演示理解原理。


🎯 第一部分:为什么记忆如此重要?

核心原因

  1. 大模型本身不具备记忆能力

    • 大语言模型(LM)是无状态的(stateless)
    • 每次对话都是独立的,不记得之前的内容
  2. 使用Memory带来的好处:

    • ✅ 使AI能够从过去的用户对话交互中学习
    • ✅ 从用户的反馈中进行学习
    • 越用越聪明(这是关键!)
    • ✅ 保留信息并维护上下文
    • ✅ 做出更加连贯、个性化的响应

实际例子:商务旅行规划AI

如果没有记忆会发生什么:

问题1: 不会记住你的个人偏好

  • 每次都要重新输入偏好信息
  • 无法提供个性化服务

问题2: 会因为缺乏理解而犯错

  • 不知道用户之前的习惯
  • 可能重复犯错

问题3: 无法回忆起之前提供的信息

  • 之前告诉过AI的信息,下次就忘了
  • 需要重复说明

类比理解:

  • 就像传统Web开发中的HTTP协议
  • HTTP本身是无状态的
  • 我们需要用Session(会话)来识别用户身份
  • AI模型也是一样的,为了让它更聪明,需要接入记忆能力

💾 第二部分:短期记忆 vs 长期记忆(详细对比)

短期记忆(Short-term Memory)

工作原理
  • 类似于计算机的RAM(内存)
  • 保存正在进行任务和对话的相关细节
  • 这种工作记忆在对话的现实中存在
简单说明
  • 短期记忆是为了在当前这一轮对话
  • 本次会话的对话
  • 记住上下文中的历史对话信息
  • 让AI知道之前说了什么
  • 根据历史对话信息,进行更好的交流
特点
  • 线程级别(Thread-level)
  • ✅ 当前这一次会话线程
  • ✅ 关闭会话后,信息就丢失了
实际例子(课程演示)

场景:用户告诉AI自己的名字

  1. 第一轮对话:

    • 用户问:"我叫什么?"
    • AI回答:"我无法知道你的真实姓名"
    • 结果:AI不知道用户的名字
  2. 第二轮对话:

    • 用户说:"我是KEVIN"
    • AI回答:"你好,KEVIN,很高兴认识你"
    • 结果:AI知道了用户的名字
  3. 第三轮对话(同一线程):

    • 用户问:"我叫什么?"
    • AI回答:"你刚才告诉我你的名字是KEVIN"
    • 结果:✅ AI记住了!(因为还在同一线程)
  4. 切换到新线程:

    • 开启新的线程(thread id变为2)
    • 用户问:"我叫什么?"
    • AI回答:"我无法知道你的真实姓名"
    • 结果:❌ AI又不知道了(因为是新线程)

关键理解:

  • 短期记忆只在**当前线程(session)**中有效
  • 切换线程后,记忆就丢失了

长期记忆(Long-term Memory)

工作原理
  • 类似于计算机的硬盘(Disk)
  • 存储大量的信息以供日后访问
  • 能够从长期的AI交互反馈中学习
  • 能够适应用户的偏好
特点
  • 跨线程保留
  • ✅ 即使今天关闭了会话
  • ✅ 过段时间再来和AI对话
  • ✅ 它也能够知道之前的一些信息
对比总结
特性 短期记忆 长期记忆
类比 RAM(内存) 硬盘(Disk)
作用范围 当前线程(会话) 跨线程
生命周期 会话关闭后丢失 持久保存
用途 当前对话的上下文 用户偏好、历史信息

🔧 第三部分:短期记忆的实现(技术实现)

实现原理

第一步:开启短期记忆能力

在LangGraph中:

  • 通过**Checkpoint(检查点)**来实现
  • Checkpoint是线程级别的,用来存储短期记忆
第二步:选择存储方式

可选方案:

存储方式 说明
PostgreSQL 关系型数据库(推荐用于生产环境)
Redis 内存数据库(快速,但数据可能丢失)
MongoDB 文档数据库

重要提醒:

  • 不能只用内存存储(开发环境可以,生产环境不行)
  • 原因:断电、重启后数据就没了
  • 必须做持久化(Persistent)
第三步:代码实现(LangGraph)

关键代码结构:

python 复制代码
# 1. 获取数据库连接
from langgraph.checkpoint.postgres import PostgresSaver
connection = "postgresql://..."

# 2. 创建Checkpoint
checkpointer = PostgresSaver.from_conn_string(connection)

# 3. 绑定到Agent
agent = create_agent(checkpointer=checkpointer)

自动创建表:

  • 不需要手动创建表
  • LangGraph会自动创建4张表(用于存储checkpoint数据)
  • 当构建checkpoint连接实例时,会自动创建
安装依赖
bash 复制代码
# 使用PostgreSQL
pip install langgraph-checkpoint-postgres

# 使用Redis
pip install langgraph-checkpoint-redis

# 使用MongoDB  
pip install langgraph-checkpoint-mongodb

切换存储方式很简单:

  • 只需要改变checkpoint的类型
  • 从PostgresSaver改为RedisSaver即可

📊 实际演示:消息加载机制

演示场景回顾

三轮对话的消息记录:

  1. 第一轮:

    • Human: "我叫什么?"
    • AI: "我无法知道你的真实姓名"
  2. 第二轮:

    • Human: "我是KEVIN"
    • AI: "你好,KEVIN"
  3. 第三轮(同一线程):

    • Human: "我叫什么?"
    • 此时系统加载了前4条消息(前两轮的对话)
    • AI: "你刚才告诉我你的名字是KEVIN"

关键点:

  • 第三轮对话时,系统自动加载了之前的4条消息
  • 所以AI能够记住用户的名字
  • 总共6条消息:前4条(历史)+ 当前2条(新对话)

线程切换演示

切换到新线程(thread id = 2):

  • 用户问:"我叫什么?"
  • 此时只有2条消息(没有加载历史)
  • AI回答:"我无法知道你的真实姓名"
  • 验证了短期记忆是线程级别的

🛠️ 工具调用(Tool Calling)补充

工具调用示例

场景:预定酒店

  1. 用户输入: "预定一个汉庭酒店"

  2. Agent处理:

    • 做意图识别(用户想订酒店)
    • 判断是否需要调用工具(需要)
    • 调用订酒店的工具函数
  3. 工具定义:

    python 复制代码
    @tool
    def book_hotel(hotel_name: str):
        # 预定酒店的逻辑
        return f"成功预定了{hotel_name}"
  4. 绑定到Agent:

    • 在创建Agent时,将工具绑定
    • Agent会自动识别何时需要调用工具

ReAct架构

  • LangGraph实现了ReAct风格的Agent架构
  • ReAct = Reasoning + Acting(推理 + 行动)
  • Agent会自动判断:是否需要调用工具?调用哪个工具?

💡 关键概念总结

概念 简单理解
无状态(Stateless) 每次对话都是独立的,不记得之前的内容
短期记忆 RAM,当前会话有效,关闭后丢失
长期记忆 硬盘,跨会话保留,持久化存储
线程级别(Thread-level) 只在当前会话线程中有效
跨线程(Cross-thread) 可以在不同会话之间保留
Checkpoint 检查点,LangGraph中实现短期记忆的机制
持久化(Persistent) 数据保存到磁盘,不会因为重启而丢失
ReAct架构 推理+行动的Agent架构

⚠️ 重要提示

生产环境注意事项

  1. 存储方式选择:

    • ❌ 不要用内存存储(会丢失数据)
    • ✅ 必须用数据库(PostgreSQL/Redis/MongoDB)
  2. LangGraph vs 其他框架:

    • 课程强调:真正的企业级AI系统开发必须用LangGraph/LangChain
    • 不能用简单的框架(如Definode等)
    • 需要定制化开发,学习曲线较陡,但是必须的
  3. 数据库容器化:

    • 建议用Docker运行数据库(PostgreSQL、Redis、MySQL)
    • 方便管理,出问题直接删除重建

❓ 思考题

  1. 为什么大模型需要记忆能力?

    • 答:大模型本身是无状态的,记忆能力让它能从历史交互中学习,越用越聪明
  2. 短期记忆和长期记忆的核心区别?

    • 答:短期记忆是线程级别的,关闭后丢失;长期记忆是跨线程的,持久保存
  3. 为什么生产环境不能用内存存储?

    • 答:断电、重启后数据会丢失,必须做持久化
  4. Checkpoint的作用是什么?

    • 答:在LangGraph中实现短期记忆的机制,记录当前线程的对话历史

📌 本节课重点回顾

记忆能力的重要性: 让AI从历史交互中学习,越用越聪明

短期记忆: RAM,线程级别,关闭后丢失

长期记忆: 硬盘,跨线程,持久保存

实现方式: 使用LangGraph的Checkpoint机制,必须做持久化

工具调用: ReAct架构,Agent自动判断何时调用工具


笔记整理时间:2024年
建议:理解记忆机制是构建智能AI系统的核心,需要通过实际代码加深理解

相关推荐
week_泽3 小时前
第6课:如何管理短期记忆和长期记忆 - 学习笔记_6
人工智能·笔记·学习·ai agent
崎岖Qiu3 小时前
【OS笔记39】:设备管理 - 数据传送控制方式
笔记·操作系统·dma·os
kkkAloha3 小时前
JS笔记汇总
开发语言·javascript·笔记
map_vis_3d4 小时前
JSAPIThree 加载简单点图层学习笔记:SimplePoint 散点可视化
笔记·学习·信息可视化·mapvthree·jsapithree·simplepoint·点图层
蓝田生玉1239 小时前
BEVFormer论文阅读笔记
论文阅读·笔记
西瓜堆9 小时前
提示词工程学习笔记: 工程技术行业提示词推荐
笔记·学习
之歆9 小时前
Spring AI入门到实战到原理源码-MCP
java·人工智能·spring
知乎的哥廷根数学学派9 小时前
面向可信机械故障诊断的自适应置信度惩罚深度校准算法(Pytorch)
人工智能·pytorch·python·深度学习·算法·机器学习·矩阵
且去填词9 小时前
DeepSeek :基于 Schema 推理与自愈机制的智能 ETL
数据仓库·人工智能·python·语言模型·etl·schema·deepseek