91porn邀请码 【AI大模子应用设备】以LangChain为例:从短期挂牵实战,到奈何让AI应用保执永久挂牵的探索

发布日期:2025-03-18 05:01    点击次数:158


91porn邀请码 【AI大模子应用设备】以LangChain为例:从短期挂牵实战,到奈何让AI应用保执永久挂牵的探索

公众号内著述一览

图片91porn邀请码

在AI应用中,无论是多轮对话场景、RAG场景如故AI Agent场景中,挂牵才气王人是不成或缺的一部分。关联词,挂牵才气是咫尺大模子的短板,是以,咫尺好多框架,诸如 LangChain、MetaGPT 等,王人封装了我方的挂牵模块,以便捷设备者完了我方大模子应用的挂牵功能。

之前我们节略概览了一下 LangChain 的 Memory 模块(【AI大模子应用设备】【LangChain系列】3. 一文了解LangChain的挂牵模块(表面实战+细节)),那仅仅在多轮对话场景中,节略的取最近几次的对话历史当作挂牵。这是最节略的使用挂牵的举止,亦然短期挂牵的一种。

本文我们来系统看下完了大模子应用挂牵的举止,包括短期挂牵和永久挂牵。如故以LangChain为例来进行实战。

0. LangChain中 Memory 实战

我这里将挂牵节略表示为对话历史,查询历史等历史记载。

0.1 挂牵封装排列

在 LangChain 中提供了多种得回挂牵的封装,举例ConversationBufferMemory、ConversationBufferWindowMemory、ConversationTokenBufferMemory等。

节略排列如下:

· ConversationBufferMemory不错表示为通用的将全部的历史记考中出来。

· ConversationBufferWindowMemory不错表示为滑动窗口,每次只取最近的K札记载。

· ConversationTokenBufferMemory不错表示为限制每次取的历史记载的Token数。

· ConversationSummaryMemory: 对崎岖文作念摘录

· ConversationSummaryBufferMemory: 保存 Token 数闭幕内的崎岖文,对更早的作念摘录

· VectorStoreRetrieverMemory: 将 Memory 存储在向量数据库中,凭证用户输入检索回最联系的部分

情欲印象剧情

· ConversationEntityMemory:保存一些实体信息,举例从输入中找出一个东谈主名,保存这个东谈主的信息。

· ConversationKGMemory:将历史记载按常识图谱的样子保存和查询

这内部的大部分挂牵封装,之前我们依然学习过了,这里不再重叠。详备的使用教程不错参考我之前的著述:【AI大模子应用设备】【LangChain系列】3. 一文了解LangChain的挂牵模块(表面实战+细节)。

底下看下 VectorStoreRetrieverMemory 的使用和完了服从。

0.2 实施:VectorStoreRetrieverMemory的使用0.2.1 好意思满代码
from langchain.memory import VectorStoreRetrieverMemoryfrom langchain_openai import ChatOpenAIfrom langchain.embeddings.openai import OpenAIEmbeddingsfrom langchain.vectorstores import Chromafrom langchain.chains import ConversationChainfrom langchain.prompts import PromptTemplatevectorstore = Chroma(embedding_function=OpenAIEmbeddings())retriever = vectorstore.as_retriever(search_kwargs=dict(k=1))memory = VectorStoreRetrieverMemory(retriever=retriever)memory.save_context({"input": "我心爱学习"}, {"output": "你真棒"})memory.save_context({"input": "我不心爱玩儿"}, {"output": "你可太棒了"})PROMPT_TEMPLATE = """以下是东谈主类和 AI 之间的友好对话。AI 话语多且提供了许多来自其崎岖文的具体细节。要是 AI 不知谈问题的谜底,它会敦厚地说不知谈。以前对话的联系片断:{history}(要是不联系,你不需要使用这些信息)刻下对话:东谈主类:{input}AI:"""prompt = PromptTemplate(input_variables=["history", "input"], template=PROMPT_TEMPLATE)chat_model = ChatOpenAI()conversation_with_summary = ConversationChain(    llm=chat_model,    prompt=prompt,    memory=memory,    verbose=True)print(conversation_with_summary.predict(input="你好,我叫同学小张,你叫什么"))print(conversation_with_summary.predict(input="我心爱干什么?"))
0.2.2 代码阐明

(1)代码中我们使用了 VectorStoreRetrieverMemory 当作挂牵存储和得回的模块。它既然是向量存储和查询,是以接受参数:retriever=retriever,必须要穿给它一个向量数据库才能责任。

萝莉 胜利女神:nikke 63, 63);">(2)然后使用了 ConversationChain 当作对话的Chain。它接受一个 memory = memory 参数建造,指定使用的挂牵类型。默许是最平素的 ConversationBufferMemory 类型。

图片

(3)什么时候会去检索挂牵呢?在Chain运行 invoke 的一运转,就加载了。源码如下:

图片

图片

图片

不错看到,终末即是用用户的输入,行止量数据库中检索联系的片断当作需要的挂牵。

0.2.3 运行服从展示

第一个问题,检索到的内容不联系,可是也得检索出一条。

图片

第二个问题,检索到的内容联系,用检索到的内容回答问题。

图片

1. 奈何让AI应器用备永久挂牵?

我这里将“永久挂牵”表示为执久化挂牵大概长崎岖文挂牵。也即是两种样子的挂牵我王人认为是“永久挂牵”:

· 第一种:执久化挂牵,对话历史等历史记载执久化保存,不会跟着进度的退出而隐没。举例保存告捷文献或存储进数据库等。

· 第二种:长崎岖文挂牵,当历史记载绝顶多时,奈何从历史记载中找出有效的挂牵,而不是只轻柔最近的几条历史记载。

1.1 LangChain 中的挂牵模块是否具有永久挂牵的才气?

上头排列的和实战的 LangChain 中的挂牵模块,ConversationBufferMemory、 ConversationBufferWindowMemory、ConversationTokenBufferMemory 看起来王人无法完了永久挂牵的才气:无法执久化(看源码,底层王人是一个List类型,保存到内存,跟着进度退让而退让),也没法查询长的崎岖文。

图片

 ConversationSummaryMemory、ConversationSummaryBufferMemory 在一定程度上能提供更多的挂牵信息(因为其对之前的历史记载作念了记忆压缩),是以在某些崎岖文不是绝顶长的场景中,如故不错用一用来完了节略的永久挂牵才气的。

ConversationEntityMemory、ConversationKGMemory一个只保存实体信息,一个将历史记载组织成常识图谱,会对长崎岖文场景中的万古挂牵功能十分有效。它不错从全局的角度将用户发问中的实体或联系常识作补充,而不是轻柔最近的几次对话。

VectorStoreRetrieverMemory应该是最佳和最能完了永久挂牵才气的类型了。一方面,它是向量数据库存储,不错便捷的执久化数据,另一方面,它的向量检索才气,原来即是针对用户发问检索出最联系的文档片断,不受长崎岖文的窗口闭幕。可是其检索的联系片断之间是否存在信息缺失等,会影响万古挂牵的准确性,从而影响最终的闭幕。

是以,ConversationEntityMemory、ConversationKGMemory + VectorStoreRetrieverMemory 是否不错一试?三者接洽,保执联系片断的联系性,同期欺诈实体关系和常识图谱进行补充,是否不错更好地完了万古挂牵的才气?感敬爱的不错沿途讨论~

1.2 对于让AI应器用备永久挂牵的一些研究1.2.1 挂牵想考:回忆和后想考使LLM具有永久挂牵

论文原文:Think-in-Memory: Recalling and Post-thinking Enable LLMs with Long-Term Memory

这篇著述建议了一种名为TiM(Think-in-Memory)的挂牵机制,旨在使LLM在对话过程中保执挂牵,存储历史想考。TiM包括两个关节阶段:在生成回应之前,LLM从挂牵中讲究联系想考;在生成回应之后,LLM进行后想考并将历史和新想考接洽起来更新挂牵。

下图刻画了TiM举止的使用方法:

(1)在回答第二个问题时,需要议论问题1的内容,从问题1中推理出谜底,尔后在回答问题2。 (2)在回答第三个问题时,需要同期议论问题1和问题2,从问题1和问题2中推理出谜底,尔后再回答问题3。

这就导致了问题的存在:问题1被推理了两遍,两遍的闭幕还可能不同样,导致最终的失实。

而TiM的想路,是将每一个问题的想考也存起来,这么,在回答问题3时,不错使用问题2之前的想考,幸免再行想考问题1,从而幸免屡次想考闭幕不一致导致的失实。

图片

具体要领如下:

图片

总的旨趣是,将联系的挂牵放到沿途,举例上图中,对于book的言语放到index 0中,对于moive的言语放到index 1中。

奈何将联系内容放到沿途的?论文中完了了一种基于局部敏锐哈希(LSH)的存储系统,用于高效地存储和检索大界限的向量数据。LSH的作用是将每个向量映射到一个哈希索引,相似的向量有更高的概率被映射到换取的哈希索引。

而换取的哈希索引不错将用户问题固定到某一块挂牵中,然后只在这一块挂牵中进行向量检索,大大栽植了检索服从。

这篇著述如故值得精读一下的,数据的组织方法和索引方法王人相比高等,很有启发。

1.2.2 递归记忆在大型语言模子中完了永久对话挂牵

论文原文:Recursively Summarizing Enables Long-Term Dialogue Memory in Large Language Models

这篇著述建议了一种递归记忆的举止,用于增强大模子的永久挂牵才气,以管理在长对话中无法回忆以前信息和生成不一致反应的问题。该举止领先刺激LLM挂牵小的对话崎岖文,然后递归地使用先前的挂牵和后续的崎岖文生成新的挂牵。

其经由如下:

图片

节略详细,即是:上一轮的内容记忆 + 本轮的问题回答 = 本轮的内容记忆。本轮的内容记忆 + 下轮的问题回答 = 下轮的内容记忆。...... 束缚迭代。与 LangChain中ConversationSummaryMemory 的完了很雷同。

这种举止每一轮王人要记忆一次,也即是调用一次大模子,使用本钱很高啊...... 施行坐褥中应该落地相比难。

1.2.3 更多研究

更多对于AI应用 Memory 的研究不错参考底下这个著述:

张泽宇,公众号:RUC AI EngineLLM-based Agent Memory联系论文集锦

加个TODO,还没看完,全球不错沿途看。

要是以为本文对你有匡助,贫穷点个赞和轻柔呗 ~~~

· 全球好,我是 同学小张,日常共享AI常识和实战案例

· 迎接 点赞 + 轻柔 👏91porn邀请码,执续学习,执续干货输出。

本站仅提供存储奇迹,所有内容均由用户发布,如发现存害或侵权内容,请点击举报。


Powered by 推特反差 @2013-2022 RSS地图 HTML地图

Copyright Powered by365建站 © 2013-2024