核心模块(Modules)
记忆(Memory)
类型(Types)
知识图谱(Kg)

对话知识图谱

这种类型的记忆使用知识图谱来重现记忆。

使用LLM记忆

from langchain.memory import ConversationKGMemory
from langchain_openai import OpenAI
llm = OpenAI(temperature=0)
memory = ConversationKGMemory(llm=llm)
memory.save_context({"input": "对Sam打招呼"}, {"output": "Sam是谁"})
memory.save_context({"input": "Sam是朋友"}, {"output": "好的"})
memory.load_memory_variables({"input": "Sam是谁"})
{'history': '关于Sam: Sam是朋友。'}

我们也可以将历史记录作为消息列表获取(如果您与聊天模型一起使用,则此功能很有用)。

memory = ConversationKGMemory(llm=llm, return_messages=True)
memory.save_context({"input": "对Sam打招呼"}, {"output": "Sam是谁"})
memory.save_context({"input": "Sam是朋友"}, {"output": "好的"})
memory.load_memory_variables({"input": "Sam是谁"})
{'history': [SystemMessage(content='关于Sam: Sam是朋友。', additional_kwargs={})]}

我们还可以更模块化地从新消息中获取当前实体(将使用先前的消息作为上下文)。

memory.get_current_entities("Sam最喜欢的颜色是什么?")
['Sam']

我们还可以更模块化地从新消息中获取知识三元组(将使用先前的消息作为上下文)。

memory.get_knowledge_triplets("她最喜欢的颜色是红色")
[KnowledgeTriple(subject='Sam', predicate='最喜欢的颜色', object_='红色')]

在链条中使用

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

llm = OpenAI(temperature=0)
from langchain.chains import ConversationChain
from langchain.prompts.prompt import PromptTemplate
 
template = """下面是一个友好的人工智能和人类之间的对话。人工智能健谈并提供了大量来自其上下文的详细信息。
如果人工智能对一个问题不知道答案,它会真实地说它不知道。人工智能仅使用包含在“相关信息”部分中的信息,不会产生幻觉。
 
相关信息:
 
{history}
 
对话:
人类:{input}
人工智能:"""
prompt = PromptTemplate(input_variables=["history", "input"], template=template)
conversation_with_kg = ConversationChain(
    llm=llm, verbose=True, prompt=prompt, memory=ConversationKGMemory(llm=llm)
)
conversation_with_kg.predict(input="嗨,最近怎么样?")
> 进入新的ConversationChain链条...
格式化后的提示:
下面是一个友好的人工智能和人类之间的对话。人工智能健谈并提供了大量来自其上下文的详细信息。
如果人工智能对一个问题不知道答案,它会真实地说它不知道。人工智能仅使用包含在“相关信息”部分中的信息,不会产生幻觉。

相关信息:



对话:
人类:嗨,最近怎么样?
人工智能:

> 完成链条。





" 嗨!我过得很好。我正在学习我们周围的世界。我正在了解不同的文化,语言和风俗习惯。真是很有意思!你呢?"
conversation_with_kg.predict(
    input="我叫James,我在帮助Will。他是一名工程师。"
)
> 进入新的ConversationChain链条...
格式化后的提示:
下面是一个友好的人工智能和人类之间的对话。人工智能健谈并提供了大量来自其上下文的详细信息。
如果人工智能对一个问题不知道答案,它会真实地说它不知道。人工智能仅使用包含在“相关信息”部分中的信息,不会产生幻觉。

相关信息:



对话:
人类:我叫James,我在帮助Will。他是一名工程师。
人工智能:

> 完成链条。





" 嗨James,很高兴见到你。我是一个AI,我知道你正在帮助工程师Will。他从事什么类型的工程工作?"
conversation_with_kg.predict(input="你知道关于Will的什么信息?")
> 进入新的ConversationChain链条...
格式化后的提示:
下面是一个友好的人工智能和人类之间的对话。人工智能健谈并提供了大量来自其上下文的详细信息。
如果人工智能对一个问题不知道答案,它会真实地说它不知道。人工智能仅使用包含在“相关信息”部分中的信息,不会产生幻觉。

相关信息:

关于Will: Will是一名工程师。

对话:
人类:你知道关于Will的什么信息?
人工智能:

> 完成链条。





' Will是一名工程师。'