核心模块(Modules)
记忆(Memory)
类型(Types)
令牌缓冲区(TokenBuffer)

会话令牌缓冲区

ConversationTokenBufferMemory 将最近的交互保留在内存中,并使用令牌长度而不是交互次数来确定何时刷新交互。

首先让我们了解如何使用这些实用工具。

使用LLM和内存

from langchain.memory import ConversationTokenBufferMemory
from langchain_openai import OpenAI
 
llm = OpenAI()
memory = ConversationTokenBufferMemory(llm=llm, max_token_limit=10)
memory.save_context({"input": "你好"}, {"output": "最近怎么样"})
memory.save_context({"input": "没什么,你呢"}, {"output": "一般般"})
memory.load_memory_variables({})
{'history': '人类: 没什么,你呢\nAI: 一般般'}

我们还可以获取消息列表的历史记录(如果您正在与聊天模型一起使用,这非常有用)。

memory = ConversationTokenBufferMemory(
    llm=llm, max_token_limit=10, return_messages=True
)
memory.save_context({"input": "你好"}, {"output": "最近怎么样"})
memory.save_context({"input": "没什么,你呢"}, {"output": "一般般"})

在链中使用

让我们通过一个示例来说明,再次将 verbose=True 进行设置,以便我们可以看到提示。

from langchain.chains import ConversationChain
 
conversation_with_summary = ConversationChain(
    llm=llm,
    # 为了测试目的,我们设置了一个非常低的 max_token_limit。
    memory=ConversationTokenBufferMemory(llm=OpenAI(), max_token_limit=60),
    verbose=True,
)
conversation_with_summary.predict(input="你好,近来怎么样?")
> 进入新的 ConversationChain 链...
格式化后的提示:
下面是一个友好对话的片段,其中涉及人工智能和人类的对话。人工智能非常健谈,从其上下文中提供了大量具体的细节。如果人工智能无法回答问题,它会如实回答自己不知道。

当前对话:

人类: 你好,近来怎么样?
AI:

> 完成链。





" 你好!我过得很好,正在享受这一天。你呢?"
conversation_with_summary.predict(input="我正在写一些文档!")
> 进入新的 ConversationChain 链...
格式化后的提示:
下面是一个友好对话的片段,其中涉及人工智能和人类的对话。人工智能非常健谈,从其上下文中提供了大量具体的细节。如果人工智能无法回答问题,它会如实回答自己不知道。

当前对话:
人类: 你好,近来怎么样?
AI:  你好!我过得很好,正在享受这一天。你呢?
人类: 我正在写一些文档!
AI:

> 完成链。





" 听起来是一个充实的一天!你在写哪方面的文档呢?"
conversation_with_summary.predict(input="是关于LangChain的!你听说过吗?")
> 进入新的 ConversationChain 链...
格式化后的提示:
下面是一个友好对话的片段,其中涉及人工智能和人类的对话。人工智能非常健谈,从其上下文中提供了大量具体的细节。如果人工智能无法回答问题,它会如实回答自己不知道。

当前对话:
人类: 你好,近来怎么样?
AI:  你好!我过得很好,正在享受这一天。你呢?
人类: 我正在写一些文档!
AI:  听起来是一个充实的一天!你在写哪方面的文档呢?
人类: 是关于LangChain的!你听说过吗?
AI:

> 完成链。





" 是的,我听说过LangChain!它是一个分布式的语言学习平台,可以实时连接母语人士和学习者。你写的就是这个文档吗?"
# 我们可以看到缓冲区已经更新了
conversation_with_summary.predict(
    input="哈哈,不是,虽然很多人把它弄混了"
)
> 进入新的 ConversationChain 链...
格式化后的提示:
下面是一个友好对话的片段,其中涉及人工智能和人类的对话。人工智能非常健谈,从其上下文中提供了大量具体的细节。如果人工智能无法回答问题,它会如实回答自己不知道。

当前对话:
人类: 是关于LangChain的!你听说过吗?
AI:  是的,我听说过LangChain!它是一个分布式的语言学习平台,可以实时连接母语人士和学习者。你写的就是这个文档吗?
人类: 哈哈,不是,虽然很多人把它弄混了
AI:

> 完成链。





" 哦,我明白了。你是在指其他的语言学习平台吗?"