国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【LangChain】Memory

這篇具有很好參考價值的文章主要介紹了【LangChain】Memory。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

概要

大多數(shù)LLM應(yīng)用都有對話界面。對話的一個重要組成部分是能夠引用對話中先前介紹的信息。至少,對話系統(tǒng)應(yīng)該能夠直接訪問過去消息的某些窗口。更復(fù)雜的系統(tǒng)需要有一個不斷更新的世界模型,這使得它能夠執(zhí)行諸如維護有關(guān)實體及其關(guān)系的信息之類的事情。

我們將這種存儲過去交互信息的能力稱為“記憶”。 LangChain 提供了許多用于向系統(tǒng)添加記憶的實用程序。這些實用程序可以單獨使用,也可以無縫地合并到鏈中。

記憶系統(tǒng)需要支持兩個基本操作:讀和寫?;叵胍幌?,每個鏈都定義了一些需要某些輸入的核心執(zhí)行邏輯。其中一些輸入直接來自用戶,但其中一些輸入可以來自用戶。在給定的運行中,一條鏈將與其記憶系統(tǒng)交互兩次。

  1. 在收到初始用戶輸入之后但在執(zhí)行核心邏輯之前,鏈將從其記憶系統(tǒng)中讀取并增加用戶輸入。

  2. 在執(zhí)行核心邏輯之后但在返回答案之前,鏈會將當前運行的輸入和輸出寫入記憶,以便在將來的運行中引用它們。

【LangChain】Memory,LangChain,AI,langchain,memory

將記憶構(gòu)建到系統(tǒng)中

任何記憶系統(tǒng)中的兩個核心設(shè)計決策是:

  • 狀態(tài)如何存儲
  • 如何查詢狀態(tài)

存儲:聊天消息列表(Storing: List of chat messages)

任何記憶的基礎(chǔ)都是所有聊天交互的歷史記錄。即使這些不全部直接使用,也需要以某種形式存儲。

LangChain記憶模塊的關(guān)鍵部分之一就是用于存儲這些聊天消息的一系列集成,從記憶列表到持久數(shù)據(jù)庫。

聊天消息存儲:如何使用聊天消息以及提供的各種集成

查詢:聊天消息之上的數(shù)據(jù)結(jié)構(gòu)和算法(Querying: Data structures and algorithms on top of chat messages)

保留聊天消息列表相當簡單。不太直接的是建立在聊天消息之上的數(shù)據(jù)結(jié)構(gòu)和算法,它們提供了最有用的消息的視圖。

一個非常簡單的記憶系統(tǒng)可能只返回每次運行的最新消息。稍微復(fù)雜一點的記憶系統(tǒng)可能會返回過去 K 條消息的簡潔摘要。更復(fù)雜的系統(tǒng)可能會從存儲的消息中提取實體,并且僅返回有關(guān)當前運行中引用的實體的信息。

每個應(yīng)用程序?qū)τ谌绾尾樵冇洃浛赡苡胁煌囊?。記憶模塊應(yīng)該可以輕松地開始使用簡單的記憶系統(tǒng),并在需要時編寫您自己的自定義系統(tǒng)。

記憶類型:構(gòu)成LangChain支持的記憶類型的各種數(shù)據(jù)結(jié)構(gòu)和算法

開始使用

我們來看看LangChain中的記憶到底是什么樣子的。在這里,我們將介紹與任意記憶類交互的基礎(chǔ)知識。

我們來看看如何在鏈中使用ConversationBufferMemoryConversationBufferMemory 是一種極其簡單的內(nèi)存形式,它僅將聊天消息列表保存在緩沖區(qū)中并將其傳遞到提示模板中。

from langchain.memory import ConversationBufferMemory

memory = ConversationBufferMemory()
memory.chat_memory.add_user_message("hi!")
memory.chat_memory.add_ai_message("whats up?")

從memory中返回哪些變量(What variables get returned from memory)

在進入鏈之前,從內(nèi)存中讀取各種變量。它有特定的名稱,需要與鏈期望的變量保持一致。你可以通過調(diào)用memory.load_memory_variables({})來查看這些變量是什么。

請注意,我們傳入的空字典只是實際變量的占位符。如果您使用的memory類型取決于輸入變量,您可能需要傳入一些變量。

memory.load_memory_variables({})

結(jié)果:

    {'chat_history': "Human: hi!\nAI: whats up?"}

在本例中,您可以看到 load_memory_variables 返回單個key: history。這意味著您的鏈(可能還有您的提示)期望輸入名為:history的key。

通??梢酝ㄟ^memory類上的參數(shù)來控制此變量。例如,如果我們希望memory變量key為 chat_history,您可以執(zhí)行以下操作:

memory = ConversationBufferMemory(memory_key="chat_history")
memory.chat_memory.add_user_message("hi!")
memory.chat_memory.add_ai_message("whats up?")

結(jié)果:

    {'chat_history': "Human: hi!\nAI: whats up?"}

控制這些鍵的參數(shù)名稱可能因memory類型而異,但重要的是要了解:
(1) 這是可控的,
(2) 如何控制它。

記憶是字符串還是消息列表

最常見的記憶類型之一涉及返回聊天消息列表。這些可以作為單個字符串返回,全部連接在一起(當它們在 LLM 中傳遞時有用)或 ChatMessages 列表(當傳遞到 ChatModels 中時有用)。

默認情況下,它們作為單個字符串返回。為了作為消息列表返回,您可以設(shè)置 return_messages=True

memory = ConversationBufferMemory(return_messages=True)
memory.chat_memory.add_user_message("hi!")
memory.chat_memory.add_ai_message("whats up?")

結(jié)果:

    {'history': [HumanMessage(content='hi!', additional_kwargs={}, example=False),
  AIMessage(content='whats up?', additional_kwargs={}, example=False)]}

哪些key被保存到記憶中(What keys are saved to memory)

通常,鏈會接收或返回多個輸入/輸出鍵。在這些情況下,我們?nèi)绾沃酪獙⒛男╂I保存到聊天消息歷史記錄中?這通??梢酝ㄟ^記憶類型上的 input_keyoutput_key 參數(shù)來控制。

如果只有一個輸入/輸出鍵,則可以不用寫 input_keyoutput_key 參數(shù)。但是,如果有多個輸入/輸出鍵,那么您必須指定要使用哪個輸入/輸出鍵的名稱

端到端示例(End to end example)

最后,讓我們看一下在鏈中使用它。我們將使用 LLMChain,并展示如何使用 LLMChatModel
使用LLM的例子:

from langchain.llms import OpenAI
from langchain.prompts import PromptTemplate
from langchain.chains import LLMChain
from langchain.memory import ConversationBufferMemory


llm = OpenAI(temperature=0)
# 請注意,提示模板中存在“chat_history”
template = """你是一個很好的聊天機器人,正在與人類交談。

之前的對話:
{chat_history}

新的人類問題: {question}
回復(fù):"""
prompt = PromptTemplate.from_template(template)
# 請注意,我們需要對齊“memory_key”
memory = ConversationBufferMemory(memory_key="chat_history")
conversation = LLMChain(
    llm=llm,
    prompt=prompt,
    verbose=True,
    memory=memory
)

結(jié)果:

# 請注意,我們只是傳入“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 ConversationBufferMemory


llm = ChatOpenAI()
prompt = ChatPromptTemplate(
    messages=[
        SystemMessagePromptTemplate.from_template(
            "你是一個很好的聊天機器人,正在與人類交談。"
        ),
        # 這里的“variable_name”必須與memory對齊
        MessagesPlaceholder(variable_name="chat_history"),
        HumanMessagePromptTemplate.from_template("{question}")
    ]
)
# 請注意,我們將 `return_messages=True` 放入 MessagesPlaceholder
# 請注意,“chat_history”與 MessagesPlaceholder 名稱一致。
memory = ConversationBufferMemory(memory_key="chat_history", return_messages=True)
conversation = LLMChain(
    llm=llm,
    prompt=prompt,
    verbose=True,
    memory=memory
)

結(jié)果:

# 請注意,我們只是傳入“question”變量 - “chat_history”由memory填充
conversation({"question": "hi"})

總結(jié)

本篇講解 聊天的歷史記錄: 如何存儲、如何查詢。

這里是使用ConversationBufferMemory類來完成存儲和查詢的。
也就是關(guān)鍵下面這段代碼:

# 構(gòu)建一個memory
memory = ConversationBufferMemory(memory_key="chat_history", return_messages=True)
# 關(guān)聯(lián)大模型
conversation = LLMChain(
    llm=llm,
    prompt=prompt,
    verbose=True,
    memory=memory
)
# 查詢
# 請注意,我們只是傳入“question”變量 - “chat_history”由memory填充
conversation({"question": "hi"})

ChatMessageHistory 公開兩種方法和一個屬性。
它公開的兩個方法是 add_user_messageadd_ai_message,用于存儲來自用戶的消息相應(yīng)的 AI 響應(yīng)
它公開的屬性是message屬性,用于訪問所有以前的消息。


參考地址:

https://python.langchain.com/docs/modules/memory.html文章來源地址http://www.zghlxwxcb.cn/news/detail-653786.html

到了這里,關(guān)于【LangChain】Memory的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔相關(guān)法律責任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • Langchain 的 Conversation buffer window memory

    ConversationBufferWindowMemory 保存一段時間內(nèi)對話交互的列表。它僅使用最后 K 個交互。這對于保持最近交互的滑動窗口非常有用,因此緩沖區(qū)不會變得太大。 我們首先來探討一下這種存儲器的基本功能。 示例代碼, 輸出結(jié)果, 我們還可以獲取歷史記錄作為消息列表(如果您將

    2024年02月15日
    瀏覽(15)
  • 自然語言處理從入門到應(yīng)用——LangChain:記憶(Memory)-[將記憶添加到LangChain組件中]

    分類目錄:《大模型從入門到應(yīng)用》總目錄 LangChain系列文章: 基礎(chǔ)知識 快速入門 安裝與環(huán)境配置 鏈(Chains)、代理(Agent:)和記憶(Memory) 快速開發(fā)聊天模型 模型(Models) 基礎(chǔ)知識 大型語言模型(LLMs) 基礎(chǔ)知識 LLM的異步API、自定義LLM包裝器、虛假LLM和人類輸入LLM(

    2024年02月12日
    瀏覽(61)
  • LangChain入門(九)-使用Memory實現(xiàn)一個帶記憶的對話機器人

    LangChain入門(九)-使用Memory實現(xiàn)一個帶記憶的對話機器人

    目錄 一、說明 二、案例 一、說明 在第五章中我們使用的是通過自定義一個列表來存儲對話的方式來保存歷史的。 當然,你也可以使用自帶的 memory 對象來實現(xiàn)這一點。 二、案例 結(jié)尾、掃一掃下方微信名片即可+博主徽信哦? ↓↓ ↓↓ ↓↓ ↓↓ ↓↓ ↓↓ ↓↓ ↓↓? ↓↓

    2024年02月16日
    瀏覽(23)
  • 自然語言處理從入門到應(yīng)用——LangChain:記憶(Memory)-[聊天消息記錄]

    分類目錄:《大模型從入門到應(yīng)用》總目錄 LangChain系列文章: 基礎(chǔ)知識 快速入門 安裝與環(huán)境配置 鏈(Chains)、代理(Agent:)和記憶(Memory) 快速開發(fā)聊天模型 模型(Models) 基礎(chǔ)知識 大型語言模型(LLMs) 基礎(chǔ)知識 LLM的異步API、自定義LLM包裝器、虛假LLM和人類輸入LLM(

    2024年02月12日
    瀏覽(56)
  • 自然語言處理從入門到應(yīng)用——LangChain:記憶(Memory)-[基礎(chǔ)知識]

    分類目錄:《大模型從入門到應(yīng)用》總目錄 LangChain系列文章: 基礎(chǔ)知識 快速入門 安裝與環(huán)境配置 鏈(Chains)、代理(Agent:)和記憶(Memory) 快速開發(fā)聊天模型 模型(Models) 基礎(chǔ)知識 大型語言模型(LLMs) 基礎(chǔ)知識 LLM的異步API、自定義LLM包裝器、虛假LLM和人類輸入LLM(

    2024年02月14日
    瀏覽(62)
  • 自然語言處理從入門到應(yīng)用——LangChain:記憶(Memory)-[記憶的類型Ⅲ]

    分類目錄:《大模型從入門到應(yīng)用》總目錄 LangChain系列文章: 基礎(chǔ)知識 快速入門 安裝與環(huán)境配置 鏈(Chains)、代理(Agent:)和記憶(Memory) 快速開發(fā)聊天模型 模型(Models) 基礎(chǔ)知識 大型語言模型(LLMs) 基礎(chǔ)知識 LLM的異步API、自定義LLM包裝器、虛假LLM和人類輸入LLM(

    2024年02月13日
    瀏覽(56)
  • 自然語言處理從入門到應(yīng)用——LangChain:記憶(Memory)-[記憶的類型Ⅰ]

    分類目錄:《大模型從入門到應(yīng)用》總目錄 LangChain系列文章: 基礎(chǔ)知識 快速入門 安裝與環(huán)境配置 鏈(Chains)、代理(Agent:)和記憶(Memory) 快速開發(fā)聊天模型 模型(Models) 基礎(chǔ)知識 大型語言模型(LLMs) 基礎(chǔ)知識 LLM的異步API、自定義LLM包裝器、虛假LLM和人類輸入LLM(

    2024年02月13日
    瀏覽(52)
  • 自然語言處理從入門到應(yīng)用——LangChain:記憶(Memory)-[記憶的類型Ⅱ]

    分類目錄:《大模型從入門到應(yīng)用》總目錄 LangChain系列文章: 基礎(chǔ)知識 快速入門 安裝與環(huán)境配置 鏈(Chains)、代理(Agent:)和記憶(Memory) 快速開發(fā)聊天模型 模型(Models) 基礎(chǔ)知識 大型語言模型(LLMs) 基礎(chǔ)知識 LLM的異步API、自定義LLM包裝器、虛假LLM和人類輸入LLM(

    2024年02月13日
    瀏覽(55)
  • 自然語言處理從入門到應(yīng)用——LangChain:記憶(Memory)-[記憶的存儲與應(yīng)用]

    分類目錄:《大模型從入門到應(yīng)用》總目錄 LangChain系列文章: 基礎(chǔ)知識 快速入門 安裝與環(huán)境配置 鏈(Chains)、代理(Agent:)和記憶(Memory) 快速開發(fā)聊天模型 模型(Models) 基礎(chǔ)知識 大型語言模型(LLMs) 基礎(chǔ)知識 LLM的異步API、自定義LLM包裝器、虛假LLM和人類輸入LLM(

    2024年02月12日
    瀏覽(124)
  • 自然語言處理從入門到應(yīng)用——LangChain:記憶(Memory)-[自定義對話記憶與自定義記憶類]

    分類目錄:《大模型從入門到應(yīng)用》總目錄 LangChain系列文章: 基礎(chǔ)知識 快速入門 安裝與環(huán)境配置 鏈(Chains)、代理(Agent:)和記憶(Memory) 快速開發(fā)聊天模型 模型(Models) 基礎(chǔ)知識 大型語言模型(LLMs) 基礎(chǔ)知識 LLM的異步API、自定義LLM包裝器、虛假LLM和人類輸入LLM(

    2024年02月13日
    瀏覽(54)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包