手记

AI大模型企业应用实战(17)-利用memory为LLM解决长短时记忆问题

1 利用内存实现短时记忆

from langchain.memory import  ConversationBufferMemory

memory = ConversationBufferMemory()
memory.chat_memory.add_user_message("你好,我是人类!")
memory.chat_memory.add_ai_message("你好,我是AI,有什么可以帮助你的吗?")

memory.load_memory_variables({})

输出:

#实现一个最近的对话窗口,超过窗口条数的对话将被删除
from langchain.memory import  ConversationBufferWindowMemory

memory = ConversationBufferWindowMemory(k=2)

memory.save_context({"input":"你好,我是人类!"},{"output":"你好,我是AI,有什么可以帮助你的吗?"})
memory.save_context({"input":"我想吃鸡肉"},{"output":"好的,我帮你找找鸡肉的做法"})

memory.load_memory_variables({})

2 利用Entity memory构建实体记忆

3 利用知识图谱来构建记忆

4 利用对话摘要来兼容内存中的长对话

当对话持续进行且对话内容很多时,可用ConversationSummaryBufferMemory来存储对话摘要。

这是一种非常有用的方式,它会根据token的数量来自动判断是否需要进行摘要。
当token数量超过阈值,会自动进行摘要。在缓冲区中,会保留最近的k条对话,比较久的对话会被删除,在删除前会进行摘要。

from langchain.memory import ConversationSummaryBufferMemory
from langchain.llms import OpenAI

llm = OpenAI(temperature=0)

memory = ConversationSummaryBufferMemory(
    llm=llm,
    max_token_limit=10,
    return_messages=True
)
memory.save_context(
    {"input":"帮我找一下JavaEdge"},
    {"output":"对不起请问什么是JavaEdge?"}
)
memory.save_context(
    {"input":"JavaEdge是一个培训讲师"},
    {"output":"好的,我知道了。"}
)
memory.save_context(
    {"input":"今天他要讲一门关于RAG的课程"},
    {"output":"好的,我知道了。需要RAG的资料吗?"}
)
memory.load_memory_variables({})

5 使用token来刷新内存缓冲区

关注我,紧跟本系列专栏文章,咱们下篇再续!

作者简介:魔都架构师,多家大厂后端一线研发经验,在分布式系统设计、数据平台架构和AI应用开发等领域都有丰富实践经验。

各大技术社区头部专家博主。具有丰富的引领团队经验,深厚业务架构和解决方案的积累。

负责:

  • 中央/分销预订系统性能优化
  • 活动&券等营销中台建设
  • 交易平台及数据中台等架构和开发设计
  • 车联网核心平台-物联网连接平台、大数据平台架构设计及优化
  • LLM应用开发

目前主攻降低软件复杂性设计、构建高可用系统方向。

参考:

0人推荐
随时随地看视频
慕课网APP