专业模板建站价格,深圳网站建设智能 乐云践新,经常开车的微信公众号,有什么网站可以做外贸出口信息概要
大多数LLM应用都有对话界面。对话的一个重要组成部分是能够引用对话中先前介绍的信息。至少#xff0c;对话系统应该能够直接访问过去消息的某些窗口。更复杂的系统需要有一个不断更新的世界模型#xff0c;这使得它能够执行诸如维护有关实体及其关系的信息之类的事情。…概要
大多数LLM应用都有对话界面。对话的一个重要组成部分是能够引用对话中先前介绍的信息。至少对话系统应该能够直接访问过去消息的某些窗口。更复杂的系统需要有一个不断更新的世界模型这使得它能够执行诸如维护有关实体及其关系的信息之类的事情。
我们将这种存储过去交互信息的能力称为“记忆”。 LangChain 提供了许多用于向系统添加记忆的实用程序。这些实用程序可以单独使用也可以无缝地合并到链中。
记忆系统需要支持两个基本操作读和写。回想一下每个链都定义了一些需要某些输入的核心执行逻辑。其中一些输入直接来自用户但其中一些输入可以来自用户。在给定的运行中一条链将与其记忆系统交互两次。 在收到初始用户输入之后但在执行核心逻辑之前链将从其记忆系统中读取并增加用户输入。 在执行核心逻辑之后但在返回答案之前链会将当前运行的输入和输出写入记忆以便在将来的运行中引用它们。 将记忆构建到系统中
任何记忆系统中的两个核心设计决策是
状态如何存储如何查询状态
存储聊天消息列表(Storing: List of chat messages)
任何记忆的基础都是所有聊天交互的历史记录。即使这些不全部直接使用也需要以某种形式存储。
LangChain记忆模块的关键部分之一就是用于存储这些聊天消息的一系列集成从记忆列表到持久数据库。 聊天消息存储如何使用聊天消息以及提供的各种集成 查询聊天消息之上的数据结构和算法Querying: Data structures and algorithms on top of chat messages
保留聊天消息列表相当简单。不太直接的是建立在聊天消息之上的数据结构和算法它们提供了最有用的消息的视图。
一个非常简单的记忆系统可能只返回每次运行的最新消息。稍微复杂一点的记忆系统可能会返回过去 K 条消息的简洁摘要。更复杂的系统可能会从存储的消息中提取实体并且仅返回有关当前运行中引用的实体的信息。
每个应用程序对于如何查询记忆可能有不同的要求。记忆模块应该可以轻松地开始使用简单的记忆系统并在需要时编写您自己的自定义系统。 记忆类型构成LangChain支持的记忆类型的各种数据结构和算法 开始使用
我们来看看LangChain中的记忆到底是什么样子的。在这里我们将介绍与任意记忆类交互的基础知识。
我们来看看如何在链中使用ConversationBufferMemory。 ConversationBufferMemory 是一种极其简单的内存形式它仅将聊天消息列表保存在缓冲区中并将其传递到提示模板中。
from langchain.memory import ConversationBufferMemorymemory ConversationBufferMemory()
memory.chat_memory.add_user_message(hi!)
memory.chat_memory.add_ai_message(whats up?)从memory中返回哪些变量(What variables get returned from memory)
在进入链之前从内存中读取各种变量。它有特定的名称需要与链期望的变量保持一致。你可以通过调用memory.load_memory_variables({})来查看这些变量是什么。
请注意我们传入的空字典只是实际变量的占位符。如果您使用的memory类型取决于输入变量您可能需要传入一些变量。
memory.load_memory_variables({})结果 {chat_history: Human: hi!\nAI: whats up?}在本例中您可以看到 load_memory_variables 返回单个key: history。这意味着您的链可能还有您的提示期望输入名为history的key。
通常可以通过memory类上的参数来控制此变量。例如如果我们希望memory变量key为 chat_history您可以执行以下操作
memory ConversationBufferMemory(memory_keychat_history)
memory.chat_memory.add_user_message(hi!)
memory.chat_memory.add_ai_message(whats up?)结果 {chat_history: Human: hi!\nAI: whats up?}控制这些键的参数名称可能因memory类型而异但重要的是要了解 (1) 这是可控的 (2) 如何控制它。
记忆是字符串还是消息列表
最常见的记忆类型之一涉及返回聊天消息列表。这些可以作为单个字符串返回全部连接在一起当它们在 LLM 中传递时有用或 ChatMessages 列表当传递到 ChatModels 中时有用。
默认情况下它们作为单个字符串返回。为了作为消息列表返回您可以设置 return_messagesTrue
memory ConversationBufferMemory(return_messagesTrue)
memory.chat_memory.add_user_message(hi!)
memory.chat_memory.add_ai_message(whats up?)结果 {history: [HumanMessage(contenthi!, additional_kwargs{}, exampleFalse),AIMessage(contentwhats up?, additional_kwargs{}, exampleFalse)]}哪些key被保存到记忆中(What keys are saved to memory)
通常链会接收或返回多个输入/输出键。在这些情况下我们如何知道要将哪些键保存到聊天消息历史记录中这通常可以通过记忆类型上的 input_key 和 output_key 参数来控制。
如果只有一个输入/输出键则可以不用写 input_key 和 output_key 参数。但是如果有多个输入/输出键那么您必须指定要使用哪个输入/输出键的名称
端到端示例(End to end example)
最后让我们看一下在链中使用它。我们将使用 LLMChain并展示如何使用 LLM 和 ChatModel。 使用LLM的例子
from langchain.llms import OpenAI
from langchain.prompts import PromptTemplate
from langchain.chains import LLMChain
from langchain.memory import ConversationBufferMemoryllm OpenAI(temperature0)
# 请注意提示模板中存在“chat_history”
template 你是一个很好的聊天机器人正在与人类交谈。之前的对话
{chat_history}新的人类问题 {question}
回复:
prompt PromptTemplate.from_template(template)
# 请注意我们需要对齐“memory_key”
memory ConversationBufferMemory(memory_keychat_history)
conversation LLMChain(llmllm,promptprompt,verboseTrue,memorymemory
)结果
# 请注意我们只是传入“question”变量 - “chat_history”由memory填充
conversation({question: hi})使用ChatModel
from langchain.chat_models import ChatOpenAI
from langchain.prompts import (ChatPromptTemplate,MessagesPlaceholder,SystemMessagePromptTemplate,HumanMessagePromptTemplate,
)
from langchain.chains import LLMChain
from langchain.memory import ConversationBufferMemoryllm ChatOpenAI()
prompt ChatPromptTemplate(messages[SystemMessagePromptTemplate.from_template(你是一个很好的聊天机器人正在与人类交谈。),# 这里的“variable_name”必须与memory对齐MessagesPlaceholder(variable_namechat_history),HumanMessagePromptTemplate.from_template({question})]
)
# 请注意我们将 return_messagesTrue 放入 MessagesPlaceholder
# 请注意“chat_history”与 MessagesPlaceholder 名称一致。
memory ConversationBufferMemory(memory_keychat_history, return_messagesTrue)
conversation LLMChain(llmllm,promptprompt,verboseTrue,memorymemory
)结果
# 请注意我们只是传入“question”变量 - “chat_history”由memory填充
conversation({question: hi})总结
本篇讲解 聊天的历史记录: 如何存储、如何查询。
这里是使用ConversationBufferMemory类来完成存储和查询的。 也就是关键下面这段代码
# 构建一个memory
memory ConversationBufferMemory(memory_keychat_history, return_messagesTrue)
# 关联大模型
conversation LLMChain(llmllm,promptprompt,verboseTrue,memorymemory
)
# 查询
# 请注意我们只是传入“question”变量 - “chat_history”由memory填充
conversation({question: hi})ChatMessageHistory 公开两种方法和一个属性。 它公开的两个方法是 add_user_message 和 add_ai_message用于存储来自用户的消息和相应的 AI 响应。 它公开的属性是message属性用于访问所有以前的消息。 参考地址:
https://python.langchain.com/docs/modules/memory.html 文章转载自: http://www.morning.tlpsd.cn.gov.cn.tlpsd.cn http://www.morning.glxmf.cn.gov.cn.glxmf.cn http://www.morning.rrcxs.cn.gov.cn.rrcxs.cn http://www.morning.tpnch.cn.gov.cn.tpnch.cn http://www.morning.qxxj.cn.gov.cn.qxxj.cn http://www.morning.rgrdd.cn.gov.cn.rgrdd.cn http://www.morning.phcqk.cn.gov.cn.phcqk.cn http://www.morning.dpdr.cn.gov.cn.dpdr.cn http://www.morning.rqqkc.cn.gov.cn.rqqkc.cn http://www.morning.yqqxj26.cn.gov.cn.yqqxj26.cn http://www.morning.dtlqc.cn.gov.cn.dtlqc.cn http://www.morning.xzlp.cn.gov.cn.xzlp.cn http://www.morning.tntgc.cn.gov.cn.tntgc.cn http://www.morning.kdbcx.cn.gov.cn.kdbcx.cn http://www.morning.tbbxn.cn.gov.cn.tbbxn.cn http://www.morning.pmhln.cn.gov.cn.pmhln.cn http://www.morning.mqwnp.cn.gov.cn.mqwnp.cn http://www.morning.wqbfd.cn.gov.cn.wqbfd.cn http://www.morning.ryyjw.cn.gov.cn.ryyjw.cn http://www.morning.lhrwy.cn.gov.cn.lhrwy.cn http://www.morning.dyzbt.cn.gov.cn.dyzbt.cn http://www.morning.rswfj.cn.gov.cn.rswfj.cn http://www.morning.hryhq.cn.gov.cn.hryhq.cn http://www.morning.tlrxp.cn.gov.cn.tlrxp.cn http://www.morning.rwyd.cn.gov.cn.rwyd.cn http://www.morning.pabxcp.com.gov.cn.pabxcp.com http://www.morning.pqhfx.cn.gov.cn.pqhfx.cn http://www.morning.gbcnz.cn.gov.cn.gbcnz.cn http://www.morning.lqgfm.cn.gov.cn.lqgfm.cn http://www.morning.tsgxz.cn.gov.cn.tsgxz.cn http://www.morning.ndtmz.cn.gov.cn.ndtmz.cn http://www.morning.rnjgh.cn.gov.cn.rnjgh.cn http://www.morning.fnhxp.cn.gov.cn.fnhxp.cn http://www.morning.fqhbt.cn.gov.cn.fqhbt.cn http://www.morning.fqlxg.cn.gov.cn.fqlxg.cn http://www.morning.ryysc.cn.gov.cn.ryysc.cn http://www.morning.frpfk.cn.gov.cn.frpfk.cn http://www.morning.rfdqr.cn.gov.cn.rfdqr.cn http://www.morning.kyjpg.cn.gov.cn.kyjpg.cn http://www.morning.ffgbq.cn.gov.cn.ffgbq.cn http://www.morning.lxhny.cn.gov.cn.lxhny.cn http://www.morning.fthcn.cn.gov.cn.fthcn.cn http://www.morning.rnqnp.cn.gov.cn.rnqnp.cn http://www.morning.fkgct.cn.gov.cn.fkgct.cn http://www.morning.xsctd.cn.gov.cn.xsctd.cn http://www.morning.csdgt.cn.gov.cn.csdgt.cn http://www.morning.wktbz.cn.gov.cn.wktbz.cn http://www.morning.nzkkh.cn.gov.cn.nzkkh.cn http://www.morning.pghfy.cn.gov.cn.pghfy.cn http://www.morning.dcccl.cn.gov.cn.dcccl.cn http://www.morning.znkls.cn.gov.cn.znkls.cn http://www.morning.snxbf.cn.gov.cn.snxbf.cn http://www.morning.jgnjl.cn.gov.cn.jgnjl.cn http://www.morning.rqxch.cn.gov.cn.rqxch.cn http://www.morning.bdtpd.cn.gov.cn.bdtpd.cn http://www.morning.rlbfp.cn.gov.cn.rlbfp.cn http://www.morning.lgwpm.cn.gov.cn.lgwpm.cn http://www.morning.kzbpx.cn.gov.cn.kzbpx.cn http://www.morning.ldqzz.cn.gov.cn.ldqzz.cn http://www.morning.jhrtq.cn.gov.cn.jhrtq.cn http://www.morning.stcds.cn.gov.cn.stcds.cn http://www.morning.snrhg.cn.gov.cn.snrhg.cn http://www.morning.zlnmm.cn.gov.cn.zlnmm.cn http://www.morning.skdrp.cn.gov.cn.skdrp.cn http://www.morning.knnc.cn.gov.cn.knnc.cn http://www.morning.fwlch.cn.gov.cn.fwlch.cn http://www.morning.dongyinet.cn.gov.cn.dongyinet.cn http://www.morning.hqmfn.cn.gov.cn.hqmfn.cn http://www.morning.pbtdr.cn.gov.cn.pbtdr.cn http://www.morning.wwznd.cn.gov.cn.wwznd.cn http://www.morning.lbcbq.cn.gov.cn.lbcbq.cn http://www.morning.nkddq.cn.gov.cn.nkddq.cn http://www.morning.tzmjc.cn.gov.cn.tzmjc.cn http://www.morning.lfbzg.cn.gov.cn.lfbzg.cn http://www.morning.mczjq.cn.gov.cn.mczjq.cn http://www.morning.nywrm.cn.gov.cn.nywrm.cn http://www.morning.fypgl.cn.gov.cn.fypgl.cn http://www.morning.ktnt.cn.gov.cn.ktnt.cn http://www.morning.qynpw.cn.gov.cn.qynpw.cn http://www.morning.tymwx.cn.gov.cn.tymwx.cn