核心模块(Modules)
记忆(Memory)
类型(Types)
实体摘要记忆(EntitySummaryMemory)

实体

会话中的实体记忆功能可以记住关于特定实体的给定信息。它提取实体的信息(使用LLM)并随着时间建立其对该实体的了解(还使用LLM)。

先让我们了解如何使用此功能。

from langchain_openai import OpenAI
from langchain.memory import ConversationEntityMemory
llm = OpenAI(temperature=0)
memory = ConversationEntityMemory(llm=llm)
_input = {"input": "Deven & Sam are working on a hackathon project"}
memory.load_memory_variables(_input)
memory.save_context(
    _input,
    {"output": " That sounds like a great project! What kind of project are they working on?"}
)
memory.load_memory_variables({"input": 'who is Sam'})

    {'history': 'Human: Deven & Sam are working on a hackathon project\nAI:  That sounds like a great project! What kind of project are they working on?',
     'entities': {'Sam': 'Sam is working on a hackathon project with Deven.'}}

memory = ConversationEntityMemory(llm=llm, return_messages=True)
_input = {"input": "Deven & Sam are working on a hackathon project"}
memory.load_memory_variables(_input)
memory.save_context(
    _input,
    {"output": " That sounds like a great project! What kind of project are they working on?"}
)
memory.load_memory_variables({"input": 'who is Sam'})

    {'history': [HumanMessage(content='Deven & Sam are working on a hackathon project', additional_kwargs={}),
      AIMessage(content=' That sounds like a great project! What kind of project are they working on?', additional_kwargs={})],
     'entities': {'Sam': 'Sam is working on a hackathon project with Deven.'}}

在链中使用

现在让我们在链中使用它!

from langchain.chains import ConversationChain
from langchain.memory import ConversationEntityMemory
from langchain.memory.prompt import ENTITY_MEMORY_CONVERSATION_TEMPLATE
from pydantic import BaseModel
from typing import List, Dict, Any
conversation = ConversationChain(
    llm=llm,
    verbose=True,
    prompt=ENTITY_MEMORY_CONVERSATION_TEMPLATE,
    memory=ConversationEntityMemory(llm=llm)
)
conversation.predict(input="Deven & Sam are working on a hackathon project")

    > 进入新的ConversationChain链...
    格式化后的提示:
    作为一位助手,由OpenAI培训的大型语言模型所支持。

    您的设计能够协助各种任务,从回答简单问题到提供关于各种主题的深入解释和讨论。作为语言模型,您可以根据接收到的输入生成类似人类的文本,通过这些文本与人类进行自然对话并提供连贯且与话题相关的回应。

    您不断学习和改进,您的能力也在不断发展。您可以处理并理解大量文本,并可利用这些知识对各种问题提供准确和信息丰富的回应。在下面的上下文部分,您可以访问由用户提供的一些个性化信息。此外,您可以根据接收的输入生成自己的文本,让您能够进行讨论并提供关于各种主题的解释和描述。

    总的来说,您是一个强大的工具,可以帮助各种任务,并在各种主题上提供有价值的见解和信息。无论人类需要帮助回答具体问题还是只想谈论特定主题,您都在这里提供帮助。

    上下文:
    {'Deven': 'Deven正在与Sam合作进行一项黑客马拉松项目',
     'Sam': 'Sam正在与Deven一起进行黑客马拉松项目'}
    
    当前对话:
    用户:Deven & Sam are working on a hackathon project
    您:

    > 完成对话链。
    
    
    ' That sounds like a great project! What kind of project are they working on?'

conversation.memory.entity_store.store

    {'Deven': 'Deven正在与Sam合作进行一项黑客马拉松项目,他们正在参加一项黑客马拉松赛事。',
     'Sam': 'Sam正在与Deven一起进行黑客马拉松项目'}

conversation.predict(input="They are trying to add more complex memory structures to Langchain")

    > 进入新的ConversationChain链...
    格式化后的提示:
    作为一位助手,由OpenAI培训的大型语言模型所支持。

    您的设计能够协助各种任务,从回答简单问题到提供关于各种主题的深入解释和讨论。作为语言模型,您可以根据接收到的输入生成类似人类的文本,通过这些文本与人类进行自然对话并提供连贯且与话题相关的回应。

    您不断学习和改进,您的能力也在不断发展。您可以处理并理解大量文本,并可利用这些知识对各种问题提供准确和信息丰富的回应。在下面的上下文部分,您可以访问由用户提供的一些个性化信息。此外,您可以根据接收的输入生成自己的文本,让您能够进行讨论并提供关于各种主题的解释和描述。

    总的来说,您是一个强大的工具,可以帮助各种任务,并在各种主题上提供有价值的见解和信息。无论人类需要帮助回答具体问题还是只想谈论特定主题,您都在这里提供帮助。

    上下文:
    {'Deven': 'Deven正在与Sam合作进行一项黑客马拉松项目,他们正在参加一项黑客马拉松赛事。',
     'Langchain': ''}
    
    当前对话:
    用户:Deven & Sam are working on a hackathon project
    AI:  That sounds like a great project! What kind of project are they working on?
    用户:They are trying to add more complex memory structures to Langchain
    您:

    > 完成对话链。
    
    
    
    ' That sounds like an interesting project! What kind of memory structures are they trying to add?'

conversation.predict(input="They are adding in a key-value store for entities mentioned so far in the conversation.")

    > 进入新的ConversationChain链...
    格式化后的提示:
    作为一位助手,由OpenAI培训的大型语言模型所支持。

    您的设计能够协助各种任务,从回答简单问题到提供关于各种主题的深入解释和讨论。作为语言模型,您可以根据接收到的输入生成类似人类的文本,通过这些文本与人类进行自然对话并提供连贯且与话题相关的回应。

    您不断学习和改进,您的能力也在不断发展。您可以处理并理解大量文本,并可利用这些知识对各种问题提供准确和信息丰富的回应。在下面的上下文部分,您可以访问由用户提供的一些个性化信息。此外,您可以根据接收的输入生成自己的文本,让您能够进行讨论并提供关于各种主题的解释和描述。

    总的来说,您是一个强大的工具,可以帮助各种任务,并在各种主题上提供有价值的见解和信息。无论人类需要帮助回答具体问题还是只想谈论特定主题,您都在这里提供帮助。

    上下文:
    {'Deven': 'Deven正在与Sam合作进行一项黑客马拉松项目,他们正在参加一项黑客马拉松赛事。',
     'Langchain': 'Langchain是一个尝试添加更复杂的内存结构,包括一个key-value存储,用于保存迄今为止在对话中提到的实体。'}
    
    当前对话:
    用户:Deven & Sam are working on a hackathon project
    AI: That sounds like a great project! What kind of project are they working on?
    用户:They are trying to add more complex memory structures to Langchain
    AI:  That sounds like an interesting project! What kind of memory structures are they trying to add?
    用户:They are adding in a key-value store for entities mentioned so far in the conversation.
    您:

    > 完成对话链。
    
    ' That sounds like a great idea! How will the key-value store help with the project?'

conversation.predict(input="What do you know about Deven & Sam?")

    > 进入新的ConversationChain链...
    格式化后的提示:
    作为一位助手,由OpenAI培训的大型语言模型所支持。

    您的设计能够协助各种任务,从回答简单问题到提供关于各种主题的深入解释和讨论。作为语言模型,您可以根据接收到的输入生成类似人类的文本,通过这些文本与人类进行自然对话并提供连贯且与话题相关的回应。

    您不断学习和改进,您的能力也在不断发展。您可以处理并理解大量文本,并可利用这些知识对各种问题提供准确和信息丰富的回应。在下面的上下文部分,您可以访问由用户提供的一些个性化信息。此外,您可以根据接收的输入生成自己的文本,让您能够进行讨论并提供关于各种主题的解释和描述。

    总的来说,您是一个强大的工具,可以帮助各种任务,并在各种主题上提供有价值的见解和信息。无论人类需要帮助回答具体问题还是只想谈论特定主题,您都在这里提供帮助。

    上下文:
    {'Deven': 'Deven正在与Sam合作进行一项黑客马拉松项目,他们正在参加一项黑客马拉松赛事。他们试图将更复杂的内存结构添加到Langchain中,包括用于保存迄今为止在对话中提到的实体的key-value存储。',
     'Sam': 'Sam正在与Deven一起进行黑客马拉松项目。他们试图将更复杂的内存结构添加到Langchain中,包括用于保存迄今为止在对话中提到的实体的key-value存储。'}
    
    当前对话:
    用户:Deven & Sam are working on a hackathon project
    AI:  That sounds like a great project! What kind of project are they working on?
    用户:They are trying to add more complex memory structures to Langchain
    AI:  That sounds like an interesting project! What kind of memory structures are they trying to add?
    用户:They are adding in a key-value store for entities mentioned so far in the conversation.
    AI:  That sounds like a great idea! How will the key-value store help with the project?
    用户:What do you know about Deven & Sam?
    您:

    > 完成对话链。
    
    
    
    ' Deven and Sam are working on a hackathon project together, trying to add more complex memory structures to Langchain, including a key-value store for entities mentioned so far in the conversation. They seem to be working hard on this project and have a great idea for how the key-value store can help.'

检查内存存储

我们也可以直接检查内存存储。在以下示例中,我们先查看它,然后通过一些添加信息的示例查看其变化。

from pprint import pprint
pprint(conversation.memory.entity_store.store)

    {'Daimon': 'Daimon is a company founded by Sam, a successful entrepreneur.',
     'Deven': 'Deven is working on a hackathon project with Sam, which they are '
              'entering into a hackathon. They are trying to add more complex '
              'memory structures to Langchain, including a key-value store for '
              'entities mentioned so far in the conversation, and seem to be '
              'working hard on this project with a great idea for how the '
              'key-value store can help.',
     'Key-Value Store': 'A key-value store is being added to the project to store '
                        'entities mentioned in the conversation.',
     'Langchain': 'Langchain is a project that is trying to add more complex '
                  'memory structures, including a key-value store for entities '
                  'mentioned so far in the conversation.',
     'Sam': 'Sam is working on a hackathon project with Deven, trying to add more '
            'complex memory structures to Langchain, including a key-value store '
            'for entities mentioned so far in the conversation. They seem to have '
            'a great idea for how the key-value store can help, and Sam is also '
            'the founder of a company called Daimon.'}

conversation.predict(input="Sam is the founder of a company called Daimon.")



    > 进入新的ConversationChain链...
    格式化后的提示:
    作为一位助手,由OpenAI培训的大型语言模型所支持。

    您的设计能够协助各种任务,从回答简单问题到提供关于各种主题的深入解释和讨论。作为语言模型,您可以根据接收到的输入生成类似人类的文本,通过这些文本与人类进行自然对话并提供连贯且与话题相关的回应。

    您不断学习和改进,您的能力也在不断发展。您可以处理并理解大量文本,并可利用这些知识对各种问题提供准确和信息丰富的回应。您可以根据接收的输入生成自己的文本,允许您进行讨论并提供对各种主题的解释和描述。

    总的来说,您是一个强大的工具,可以帮助各种任务,并提供对各种主题的有价值见解和信息。无论是回答特定问题还是关于特定主题的对话,您都在这里提供帮助。

    Context:
    {'Daimon': 'Daimon is a company founded by Sam, a successful entrepreneur, who '
               'is working on a hackathon project with Deven to add more complex '
               'memory structures to Langchain.',
     'Sam': 'Sam is working on a hackathon project with Deven, trying to add more '
            'complex memory structures to Langchain, including a key-value store '
            'for entities mentioned so far in the conversation. They seem to have '
            'a great idea for how the key-value store can help, and Sam is also '
            'the founder of a company called Daimon.'}

from pprint import pprint
pprint(conversation.memory.entity_store.store)

    {'Daimon': 'Daimon is a company founded by Sam, a successful entrepreneur, who '
               'is working on a hackathon project with Deven to add more complex '
               'memory