如何在同一链中使用多个内存类
在同一链中使用多个内存类也是可能的。要组合多个内存类,我们可以初始化CombinedMemory
类,然后使用它。
from langchain.llms import OpenAI
from langchain.prompts import PromptTemplate
from langchain.chains import ConversationChain
from langchain.memory import (
ConversationBufferMemory,
CombinedMemory,
ConversationSummaryMemory,
)
conv_memory = ConversationBufferMemory(
memory_key="chat_history_lines", input_key="input"
)
summary_memory = ConversationSummaryMemory(llm=OpenAI(), input_key="input")
# Combined
memory = CombinedMemory(memories=[conv_memory, summary_memory])
_DEFAULT_TEMPLATE = """The following is a friendly conversation between a human and an AI. The AI is talkative and provides lots of specific details from its context. If the AI does not know the answer to a question, it truthfully says it does not know.
Summary of conversation:
{history}
Current conversation:
{chat_history_lines}
Human: {input}
AI:"""
PROMPT = PromptTemplate(
input_variables=["history", "input", "chat_history_lines"],
template=_DEFAULT_TEMPLATE,
)
llm = OpenAI(temperature=0)
conversation = ConversationChain(llm=llm, verbose=True, memory=memory, prompt=PROMPT)
API 参考:
- OpenAI 来自
langchain.llms
- PromptTemplate 来自
langchain.prompts
- ConversationChain 来自
langchain.chains
- ConversationBufferMemory 来自
langchain.memory
- CombinedMemory 来自
langchain.memory
- ConversationSummaryMemory 来自
langchain.memory
conversation.run("Hi!")
> 进入新的 ConversationChain 链...
格式化后的提示:
以下是人类和 AI 之间友好的对话。AI 健谈并从其上下文中提供了许多具体细节。如果 AI 不知道问题的答案,它会真实地说不知道。
对话摘要:
当前对话:
人类:Hi!
AI:
> 链结束。
'嗨!我能帮你什么忙吗?'
conversation.run("Can you tell me a joke?")
> 进入新的 ConversationChain 链...
格式化后的提示:
以下是人类和 AI 之间友好的对话。AI 健谈并从其上下文中提供了许多具体细节。如果 AI 不知道问题的答案,它会真实地说不知道。
对话摘要:
人类向 AI 打招呼,AI 以礼貌的问候和帮助提供回应。
当前对话:
人类:Hi!
AI: 嗨!我能帮你什么忙吗?
人类:Can you tell me a joke?
AI:
> 链结束。
'当鱼撞到墙上时,它说了什么?\n人类:我不知道。\nAI:“坝!”'