使用 LangChain 实现对话缓冲内存

源内容(英文)

对话缓冲内存是 LangChain 内存机制 的一种类型,它将完整的、未经过摘要处理的对话历史存储为简单的消息缓冲区。它有助于语言模型在多轮对话中保持上下文连贯,使聊天机器人更具连贯性和上下文感知能力。这种方法对于短到中等长度的对话效果很好,但随着对话记录变长可能会变得低效。

!<a href="https://media.geeksforgeeks.org/wp-content/uploads/20250923151859811086/featuresofconversationbuffermemory.webp">featuresofconversationbuffermemory特性

对话缓冲内存的组成部分

让我们来看看 LangChain 中对话缓冲内存的核心组成部分:

  • 内存缓冲区: 按顺序存储所有消息且不进行摘要的内部结构。
  • 消息:单个对话轮次,通常存储为 HumanMessage 和 AIMessage 对象。
  • 内存键:一个默认为"history"的参数,用于检索存储的对话并将其输入到链中。
  • 加载和保存方法: 处理检索对话历史或用新消息更新它的函数。
  • 集成钩子: 将内存连接到 LangChain 链或代理的接口,以便它可以自动提供上下文。

对话缓冲内存如何工作

!<a href="https://media.geeksforgeeks.org/wp-content/uploads/20250923180844333054/conversationbuffermemorypipeline.webp">conversationbuffermemorypipeline内存管道

我们可以将 LangChain 中对话缓冲内存的工作原理描述为:

  • 消息捕获: 每个用户输入和 AI 响应都作为消息对象存储在内存中。
  • 顺序记录: 消息按照它们发生的精确顺序记录,创建对话的完整记录。
  • 缓冲存储:整个对话历史都被保留,没有摘要或修剪。
  • 重放给模型: 在每一步,完整的存储历史都会被附加到提示词并发送给 LLM。
  • 响应生成: LLM 使用当前查询和过去的上下文来生成连贯的回复。
  • 更新历史: 最新的用户消息和 AI 响应被附加到内存缓冲区以供下一轮使用。

步骤 1:安装依赖项

pip install langchain langchain-openai python-dotenv: 安装 LangChain 核心库、OpenAI 集成以及用于加载 API 密钥的 dotenv。

Python


CODEBLOCK_a26f06f5

步骤 2:导入库

导入所需的 LangChain 模块和操作系统库。

Python


CODEBLOCK_8e4a7b45

步骤 3:环境设置

我们可以使用 OpenAI 的 API 来设置环境,也可以使用 Gemini 的 API。

Python


CODEBLOCK_d2c72e9d

> 关于使用 OpenAI API 密钥的参考文章:获取 OpenAI API 密钥

步骤 3:初始化 LLM

让我们使用 ChatOpenAI 初始化 LLM。

Python


CODEBLOCK_3a9c5d9c

步骤 4:对话缓冲内存

现在让我们设置对话缓冲内存。

Python


CODEBLOCK_511dfe0f

步骤 5:带内存的对话链

我们可以创建一个带有内存的对话链。

Python


CODEBLOCK_358f98f2

步骤 6:对话交互

让我们与对话进行交互。

Python


CODEBLOCK_4b0930f0

输出示例

!<a href="https://media.geeksforgeeks.org/wp-content/uploads/20251009162448794226/Memoryinlangchain.jpg">Memoryinlangchain对话示例

使用与不使用对话缓冲内存的 LLM 对比

!<a href="https://media.geeksforgeeks.org/wp-content/uploads/20250923152906670693/conversationalmemory.webp">conversationalmemory

让我们通过一个清晰的对比表格来看看使用与不使用对话缓冲内存的区别:

方面

不带内存

带对话缓冲内存 —

— 上下文处理

只能看到最新的用户输入

可以看到完整的过去对话以及新的输入 连贯性

可能会给出不连贯的回答

产生更连贯且具有上下文意识的回复 设置

更简单,无需集成内存

需要将内存附加到链中 使用场景

一次性问题或单轮任务

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。如需转载,请注明文章出处豆丁博客和来源网址。https://shluqu.cn/49072.html
点赞
0.00 平均评分 (0% 分数) - 0