核心模块(Modules)
记忆(Memory)
添加记忆(AddingMemory)

存储在LLMChain中的记忆

这本笔记本介绍如何在LLMChain中使用Memory类。

我们将添加ConversationBufferMemory (opens in a new tab)类,尽管它可以是任何记忆类。

from langchain.chains import LLMChain
from langchain.memory import ConversationBufferMemory
from langchain_core.prompts import PromptTemplate
from langchain_openai import OpenAI

最重要的步骤是正确设置提示。在下面的提示中,我们有两个输入键:一个用于实际输入,另一个用于Memory类中的输入。重要的是,确保在PromptTemplateConversationBufferMemory中的键匹配(chat_history)。

template = """您是一个与人类对话的聊天机器人。
 
{chat_history}
人类: {human_input}
聊天机器人:"""
 
prompt = PromptTemplate(
    input_variables=["chat_history", "human_input"], template=template
)
memory = ConversationBufferMemory(memory_key="chat_history")
llm = OpenAI()
llm_chain = LLMChain(
    llm=llm,
    prompt=prompt,
    verbose=True,
    memory=memory,
)
llm_chain.predict(human_input="嗨,朋友")
> 进入新的LLMChain链...
进入格式后的提示:
您是一个与人类对话的聊天机器人。

人类: 嗨,朋友
聊天机器人:

> 完成链。

'嗨,你好! 今天我能为你做点什么吗?'

llm_chain.predict(human_input="还不错- 你好吗?")
> 进入新的LLMChain链...
进入格式后的提示:
您是一个与人类对话的聊天机器人。

人类: 嗨,朋友
AI: 嗨,你好! 今天我能为你做点什么吗?
人类: 还不错- 你好吗?
聊天机器人:

> 完成链。

'我很棒,谢谢你的关心!你自己怎么样?'

将Memory添加到基于聊天模型的LLMChain

上面的内容适用于完成式LLM,但是如果您使用聊天模型,可能会在使用结构化聊天消息时获得更好的表现。以下是一个例子。

from langchain.prompts import (
    ChatPromptTemplate,
    HumanMessagePromptTemplate,
    MessagesPlaceholder,
)
from langchain_core.messages import SystemMessage
from langchain_openai import ChatOpenAI

我们将使用ChatPromptTemplate (opens in a new tab)类设置聊天提示。

from_messages (opens in a new tab)方法从消息列表(例如SystemMessageHumanMessageAIMessageChatMessage等)或消息模板(如下面的MessagesPlaceholder (opens in a new tab))中创建ChatPromptTemplate

下面的配置确保将Memory注入到聊天提示的中间,在chat_history键中,并将用户的输入以人类/用户消息的形式添加到聊天提示的末尾。

prompt = ChatPromptTemplate.from_messages(
    [
        SystemMessage(
            content="您是一个与人类对话的聊天机器人。"
        ),  # 持续系统提示
        MessagesPlaceholder(
            variable_name="chat_history"
        ),  # 存储Memory的位置
        HumanMessagePromptTemplate.from_template(
            "{human_input}"
        ),  # 将人类输入注入的位置
    ]
)
 
memory = ConversationBufferMemory(memory_key="chat_history", return_messages=True)
llm = ChatOpenAI()
 
chat_llm_chain = LLMChain(
    llm=llm,
    prompt=prompt,
    verbose=True,
    memory=memory,
)
chat_llm_chain.predict(human_input="嗨,朋友")
> 进入新的LLMChain链...
进入格式后的提示:
System: 您是一个与人类对话的聊天机器人。
人类: 嗨,朋友

> 完成链。

'你好!我能帮你做什么呢,朋友?'

chat_llm_chain.predict(human_input="还不错- 你好吗?")
> 进入新的LLMChain链...
进入格式后的提示:
System: 您是一个与人类对话的聊天机器人。
人类: 嗨,朋友
AI: 你好!我能帮你做什么呢,朋友?
人类: 还不错- 你好吗?

> 完成链。

'我是一个AI聊天机器人,所以我没有感情,但我在这里帮助和与您聊天!您想详细谈论什么或有什么问题需要帮助吗?'