前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >LangChain手记 Memory

LangChain手记 Memory

作者头像
Steve Wang
发布2023-10-12 09:40:35
3130
发布2023-10-12 09:40:35
举报
文章被收录于专栏:从流域到海域

整理并翻译自DeepLearning.AI×LangChain的官方课程:Memory(源码可见)

Memory

使用open ai的API调用GPT都是单次调用,所以模型并不记得之前的对话,多轮对话的实现其实是将前面轮次的对话过程保留,在下次对话时作为输入的message数组的一部分,再将新一轮对话的提问也放入message数组,再发起一次API调用,即构手动建对话流(以上笔者注)。

构建对话流(LangChain称作对话链)可以使用LangChain提供的memory(记忆)这个组件来实现,本节就是例子:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

设置verbose标志为true能看到完整的对话链:

在这里插入图片描述
在这里插入图片描述

能看出LangChain的ConversationChain其实默认提供了一个提示词,该提示词简单设定了对话场景和GPT扮演的角色AI,并要求GPT在不知晓问题答案时老老实实回答不知道以杜绝幻觉现象。

继续提问第二个问题“What is 1+1”

在这里插入图片描述
在这里插入图片描述

继续提问第三个问题“What is my name?”

在这里插入图片描述
在这里插入图片描述

可以看到,对话历史不断累积,输入也变得越来越长

memory.buffer内存储了所有的对话历史,不含输入提示词的其他部分。

在这里插入图片描述
在这里插入图片描述

使用memoryload_memory_variables()方法可以看到,memory维护一个变量字典,其中有一个名为history的变量存储了对话历史。

在这里插入图片描述
在这里插入图片描述

可以直接使用memorysave_context方法构建对话历史(笔者注:此时对话历史中AI的回答是人为指定的,不是真实的GPT回复,这里是为了演示,实际使用时不推荐这么做,GPT的真实回复可能和指定的不同,并没有完全使用GPT)。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
Memory(记忆)
在这里插入图片描述
在这里插入图片描述

大语言模型是无状态的

  • 每一个对话都是独立的 对话机器人表现出记忆能力其实是因为实现的时候将整个对话作为上下文输入给了大语言模型

LangChain提供了多种类型的memory来存储和累积对话。

ConversationBufferWindowMemory可以指定memory的的缓存大小(以对话轮数为单位):

在这里插入图片描述
在这里插入图片描述

k=1仅存储一轮对话作为历史,上上轮对话将会丢失:

在这里插入图片描述
在这里插入图片描述

ConversationTokenBufferMemory可以指定memory的token数量(笔者注:这个比较实用,因为GPT有最大token数限制,同时也是按token数计费的)。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

ConversationSummaryBufferMemory可以将对话以摘要的形式存储:

在这里插入图片描述
在这里插入图片描述

上图中max_token_limit=400,足够存储整个对话历史,如果我们将max_token_limit=100,将会触发以摘要形式存储对话历史来满足最大token数限制:

在这里插入图片描述
在这里插入图片描述

尝试使用摘要对话历史提问:

在这里插入图片描述
在这里插入图片描述

可以回答的不错,查看对话历史:

在这里插入图片描述
在这里插入图片描述

发现LangChian将提问内容摘要在System角色里面(和GPT API的system不是同一个,但使用了同样的名称)以满足最大token数限制。

Memory类型
在这里插入图片描述
在这里插入图片描述

ConversationBufferMemory

  • 该类型memory在一个变量中存储和提取对话信息

ConversationBufferWindowMemory

  • 该类型memory存储将随时间进行的对话交互以列表的形式存储,但仅存储k轮对话

ConversationTokenBufferMemory

  • 该类型memory存储最近的对话交互,并且使用token长度而不是对话论述来决定是否刷新对话交互历史

ConversationSummaryMemory

  • 该类型memory存储随时间进行的对话的摘要
更多memory类型
在这里插入图片描述
在这里插入图片描述

Vector data memory(向量数据memory)

  • 在一个向量数据库中存储从对话(或者其他途径)获得的文本,查询时检索和文本最相关的块

Entity memory(实体memory)

  • 使用一个LLM,它可以记住某个实体的详细信息

可以同时使用多种memory,例:对话memory + 实体memory来回忆个人信息

也可以将对话保存在传统数据库中,比如key-value存储或者SQL。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2023-08-16,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Memory
    • Memory(记忆)
      • Memory类型
        • 更多memory类型
        相关产品与服务
        对象存储
        对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档