长沙营销网站建站公司,网盘做扩大网站服务器,唐山seo排名外包,洛阳尚贤网络科技有限公司整理并翻译自DeepLearning.AILangChain的官方课程#xff1a;Memory Memory
使用open ai的API调用GPT都是单次调用#xff0c;所以模型并不记得之前的对话#xff0c;多轮对话的实现其实是将前面轮次的对话过程保留#xff0c;在下次对话时作为输入的message数组的一部分Memory Memory
使用open ai的API调用GPT都是单次调用所以模型并不记得之前的对话多轮对话的实现其实是将前面轮次的对话过程保留在下次对话时作为输入的message数组的一部分再将新一轮对话的提问也放入message数组再发起一次API调用即构手动建对话流以上笔者注。
构建对话流LangChain称作对话链可以使用LangChain提供的memory记忆这个组件来实现本节就是例子 设置verbose标志为true能看到完整的对话链 能看出LangChain的ConversationChain其实默认提供了一个提示词该提示词简单设定了对话场景和GPT扮演的角色AI并要求GPT在不知晓问题答案时老老实实回答不知道以杜绝幻觉现象。
继续提问第二个问题“What is 11” 继续提问第三个问题“What is my name?” 可以看到对话历史不断累积输入也变得越来越长
memory.buffer内存储了所有的对话历史不含输入提示词的其他部分。 使用memory的load_memory_variables()方法可以看到memory维护一个变量字典其中有一个名为history的变量存储了对话历史。 可以直接使用memory的save_context方法构建对话历史笔者注此时对话历史中AI的回答是人为指定的不是真实的GPT回复这里是为了演示实际使用时不推荐这么做GPT的真实回复可能和指定的不同并没有完全使用GPT。
Memory记忆 大语言模型是无状态的
每一个对话都是独立的 对话机器人表现出记忆能力其实是因为实现的时候将整个对话作为上下文输入给了大语言模型
LangChain提供了多种类型的memory来存储和累积对话。
ConversationBufferWindowMemory可以指定memory的的缓存大小以对话轮数为单位 k1仅存储一轮对话作为历史上上轮对话将会丢失 ConversationTokenBufferMemory可以指定memory的token数量笔者注这个比较实用因为GPT有最大token数限制同时也是按token数计费的。 ConversationSummaryBufferMemory可以将对话以摘要的形式存储 上图中max_token_limit400足够存储整个对话历史如果我们将max_token_limit100将会触发以摘要形式存储对话历史来满足最大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。