05|LangChain | 从入门到实战 -六大组件之Memory

by:wenwenc9

如果本文有错误地方,欢迎指正。

01|LangChain | 从入门到实战-介绍
02|LangChain | 从入门到实战 -六大组件之Models IO
03|LangChain | 从入门到实战 -六大组件之Retrival
04|LangChain | 从入门到实战 -六大组件之Chain

一、简介

大多数法学硕士申请都有对话界面。对话的一个重要组成部分是能够引用对话中先前介绍的信息。至少,对话系统应该能够直接访问过去消息的某些窗口。更复杂的系统需要有一个不断更新的世界模型,这使得它能够执行诸如维护有关实体及其关系的信息之类的事情。

我们将这种存储过去交互信息的能力称为“记忆”。LangChain 提供了许多用于向系统添加内存的实用程序。这些实用程序可以单独使用,也可以无缝地合并到链中。

内存系统需要支持两个基本操作:读和写。

回想一下,每个链都定义了一些需要某些输入的核心执行逻辑。其中一些输入直接来自用户,但其中一些输入可以来自内存。在给定的运行中,一条链将与其内存系统交互两次。

  1. 在收到初始用户输入之后但在执行核心逻辑之前,链将从其内存系统中读取并增加用户输入。
  2. 在执行核心逻辑之后但在返回答案之前,链会将当前运行的输入和输出写入内存,以便在将来的运行中引用它们。

两个核心设计

  1. 如何读取 READ
  2. 如何写入 WRTIE

在这里插入图片描述

1、剖析 ConversationBufferMemory

利用 ConversationBufferMemory 实现会话缓存存储过程

源代码
https://github.com/langchain-ai/langchain/blob/6ccecf23639ef5cbebcbc4eaeda99eb1f7b84deb/libs/langchain/langchain/memory/buffer.py#L10

看看这个类是怎么个组成的,继承调用方式,可能有点啰嗦,但是我想说的是,通过dir() 查看类函数的构成、继承、方法、参数 是一个不错的选择

在这里插入图片描述

看看这个类方法有哪些参数,黄色部分为常用的

在这里插入图片描述

看看这个类本身有哪些方法,如果是继承的方法这里不看了,自己help()查看内容
在这里插入图片描述
当然也可以自己打开源码链接,github上面查看也很方便

在这里插入图片描述

好了,现在用一些代码,看看怎么事

from langchain.memory import ConversationBufferMemory
# 构建会话内存
memory = ConversationBufferMemory()
# 添加用户对话内容
memory.chat_memory.add_user_message("你好!")
# 添加机器对话内容
memory.chat_memory.add_ai_message("你好,有什么需要帮助的吗?")

消息存储在memory中,进行查看

memory.load_memory_variables({
   
   })

在这里插入图片描述
默认的对话内容为history,也可以设置key

from langchain.memory import ConversationBufferMemory
memory = ConversationBufferMemory(memory_key='chat_history')
# 添加用户对话内容
memory.chat_memory.add_user_message("你好!")
# 添加机器对话内容
memory.chat_memory.add_ai_message("你好,有什么需要帮助的吗?")
memory.load_memory_variables({
   
   })

在这里插入图片描述

默认返回的是字符串对象,也可以返回消息实体

memory = ConversationBufferMemory(return_messages=True)
# 添加用户对话内容
memory.chat_memory.add_user_message("你好!")
# 添加机器对话内容
memory.chat_memory.add_ai_message("你好,有什么需要帮助的吗?")
memory.load_memory_variables({
   
   })

在这里插入图片描述

2、使用ConverstaionBufferMemory

from langchain.llms import OpenAI
from langchain.prompts import PromptTemplate
from langchain.chains import LLMChain
from langchain.memory import ConversationBufferMemory

llm = OpenAI(temperature=0)
template = """
你是一个会话机器人,能够记住上一次会话的内容
上一次会话内容:{chat_history}
新一次对话:{question}
你的回复:
"""
prompt = PromptTemplate.from_template(template)
memory = ConversationBufferMemory(memory_key='chat_history')
chain = LLMChain(
    llm=llm,
    prompt=prompt,
    verbose=True,
    memory=memory,
 
)
# chain = prompt | llm | memory

print()
chain({
   
   'question': '你好'})

在这里插入图片描述

from langchain.chat_models import ChatOpenAI
from langchain.prompts import (
    ChatPromptTemplate,
    MessagesPlaceholder,
    SystemMessagePromptTemplate,
    HumanMessagePromptTemplate,
)
from langchain.chains import LLMChain
from langchain.memory import ConversationBufferMemory

llm = ChatOpenAI()
prompt = ChatPromptTemplate(
    messages=[
        SystemMessagePromptTemplate.from_template(
            "你是一个会话机器人可以记录上一次对话内容."
        )
<think>我们遇到了一个Maven依赖问题:在中央仓库中找不到`dev.langchain4j:langchain4j-memory:jar:0.31.0`。这通常是由于版本号错误、仓库配置问题或网络问题导致的。下面我们将逐步解决这个问题。 ### 1. 确认版本号是否存在 首先,我们需要确认`0.31.0`这个版本是否真的存在于Maven中央仓库。我们可以通过以下方式检查: - 访问Maven中央仓库的搜索页面:https://mvnrepository.com/ - 搜索`langchain4j-memory`,然后查看可用的版本。 或者直接访问该依赖的页面: https://mvnrepository.com/artifact/dev.langchain4j/langchain4j-memory 如果你在页面上找不到`0.31.0`版本,说明这个版本可能不存在或者尚未同步到中央仓库。 ### 2. 检查依赖配置 在你的`pom.xml`中,确保依赖配置正确: ```xml <dependency> <groupId>dev.langchain4j</groupId> <artifactId>langchain4j-memory</artifactId> <version>0.31.0</version> </dependency> ``` ### 3. 使用正确的仓库 LangChain4j的版本可能会发布到不同的仓库。如果你使用的是较新的版本,可能需要添加LangChain4j的仓库。在`pom.xml`中添加以下仓库配置: ```xml <repositories> <repository> <id>langchain4j-repo</id> <url>https://oss.sonatype.org/content/repositories/snapshots</url> <!-- 如果是快照版本,需要启用快照 --> <snapshots> <enabled>true</enabled> </snapshots> </repository> </repositories> ``` 注意:`0.31.0`版本可能是一个快照(SNAPSHOT)版本,如果是快照版本,则必须添加快照仓库,并且版本号应该包含`-SNAPSHOT`后缀。请确认你的版本号是否正确。 ### 4. 使用最新版本 如果`0.31.0`版本确实不存在,我们可以尝试使用其他可用版本。目前,LangChain4j的最新稳定版本是`0.31.0`,但有时可能因为发布延迟而暂时不可用。我们可以尝试使用稍早的版本,例如`0.30.0`,或者检查是否有更新的版本(如`0.31.1`)。 在MvnRepository上查看最新版本,然后替换为可用版本。 ### 5. 清理Maven本地仓库 有时候,Maven本地仓库中可能存在损坏的依赖。我们可以尝试删除本地仓库中对应的依赖,然后重新下载。 - 找到本地Maven仓库中`dev/langchain4j/langchain4j-memory`目录,删除`0.31.0`文件夹。 - 或者在命令行中执行: ```bash mvn dependency:purge-local-repository -DmanualInclude="dev.langchain4j:langchain4j-memory" ``` - 然后重新运行`mvn clean install`。 ### 6. 检查网络和代理 如果你在公司网络,可能需要配置代理。检查你的Maven配置文件(`settings.xml`)中是否配置了正确的代理。例如: ```xml <proxies> <proxy> <id>example-proxy</id> <active>true</active> <protocol>http</protocol> <host>proxy.example.com</host> <port>8080</port> <!-- 如果需要认证 --> <username>proxyuser</username> <password>proxypass</password> <nonProxyHosts>local.net|some.host.com</nonProxyHosts> </proxy> </proxies> ``` ### 7. 使用LangChain4j BOM 为了避免版本冲突,推荐使用LangChain4j的BOM(Bill of Materials)来管理版本。在`pom.xml`中添加: ```xml <dependencyManagement> <dependencies> <dependency> <groupId>dev.langchain4j</groupId> <artifactId>langchain4j-bom</artifactId> <version>0.31.0</version> <!-- 使用你需要的版本 --> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement> ``` 然后,在添加具体依赖时可以省略版本号: ```xml <dependency> <groupId>dev.langchain4j</groupId> <artifactId>langchain4j-memory</artifactId> <!-- 版本由BOM管理 --> </dependency> ``` ### 8. 检查依赖范围 确保没有其他依赖覆盖了该依赖的版本。可以通过以下命令查看依赖树: ```bash mvn dependency:tree ``` 检查是否有其他依赖传递过来的版本覆盖了你的版本。 ### 9. 使用Spring AI提供的替代方案 如果你不想使用LangChain4j的`InMemoryChatMemory`,可以考虑使用Spring AI提供的`SimpleChatMemory`,它基于`InMemoryChatMemoryStore`。这样就不需要添加`langchain4j-memory`依赖。 ```java @Bean public ChatMemory chatMemory() { return new SimpleChatMemory(new InMemoryChatMemoryStore()); } ``` 在`pom.xml`中添加Spring AI内存存储依赖: ```xml <dependency> <groupId>org.springframework.ai</groupId> <artifactId>spring-ai-memory-store</artifactId> <version>0.8.1</version> <!-- 请使用与Spring AI其他模块一致的版本 --> </dependency> ``` ### 总结 解决步骤: 1. 确认版本是否存在(检查MvnRepository)。 2. 检查依赖配置是否正确。 3. 添加必要的仓库(特别是快照仓库)。 4. 尝试清理本地仓库并重新下载。 5. 检查网络和代理设置。 6. 使用BOM管理版本。 7. 检查依赖树是否有冲突。 8. 考虑使用Spring AI的替代实现。 如果以上步骤仍不能解决问题,请考虑更换依赖版本或等待该版本在中央仓库可用。 ### 相关问题 1. 如何配置Maven使用阿里云镜像加速依赖下载? 2. 如何解决Maven依赖冲突? 3. Spring AI中还有哪些ChatMemory实现? 4. 如何自定义ChatMemory实现? 5. LangChain4j的不同模块功能有哪些?</think>### 解决 Maven 依赖问题:`Could not find artifact dev.langchain4j:langchain4j-memory:jar:0.31.0` #### 问题原因分析 1. **版本不存在** `0.31.0` 版本可能尚未发布或在中央仓库同步延迟。LangChain4j 的最新稳定版本可通过 [官方仓库](https://github.com/langchain4j/langchain4j/releases) 确认。 2. **仓库配置缺失** LangChain4j 的部分版本可能不在 Maven Central,需添加其专属仓库。 3. **依赖范围错误** 若使用 Spring AI BOM,版本号可能被覆盖。 --- ### 解决方案步骤 #### 1. 验证版本可用性 访问 Maven Central 检查版本是否存在: 🔗 [LangChain4j Memory 版本列表](https://mvnrepository.com/artifact/dev.langchain4j/langchain4j-memory) 若 `0.31.0` 不可用,建议使用最新稳定版(当前为 `0.31.0`,但需确认实际存在)。 #### 2. 添加 LangChain4j 仓库配置 在 `pom.xml` 中添加以下仓库: ```xml <repositories> <repository> <id>langchain4j-repo</id> <url>https://oss.sonatype.org/content/repositories/snapshots</url> <!-- 若使用快照版本需启用 --> <snapshots> <enabled>true</enabled> </snapshots> </repository> </repositories> ``` #### 3. 修正依赖声明 **方案 1:使用明确版本(推荐)** ```xml <dependency> <groupId>dev.langchain4j</groupId> <artifactId>langchain4j-memory</artifactId> <version>0.30.0</version> <!-- 替换为可用版本 --> </dependency> ``` **方案 2:通过 BOM 管理版本** ```xml <dependencyManagement> <dependencies> <dependency> <groupId>dev.langchain4j</groupId> <artifactId>langchain4j-bom</artifactId> <version>0.30.0</version> <!-- BOM 版本 --> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement> <dependencies> <dependency> <groupId>dev.langchain4j</groupId> <artifactId>langchain4j-memory</artifactId> <!-- 无需指定版本 --> </dependency> </dependencies> ``` #### 4. 清理 Maven 本地缓存 执行命令强制更新依赖: ```bash mvn dependency:purge-local-repository -DmanualInclude="dev.langchain4j:langchain4j-memory" mvn clean install -U ``` #### 5. 替代方案:使用 Spring AI 实现 若不依赖 LangChain4j: ```java // 改用 Spring AI 内置实现 @Bean public ChatMemory chatMemory() { return new SimpleChatMemory(new InMemoryChatMemoryStore()); } ``` 添加依赖: ```xml <dependency> <groupId>org.springframework.ai</groupId> <artifactId>spring-ai-memory-store</artifactId> <version>0.8.1</version> <!-- 与 Spring AI 版本一致 --> </dependency> ``` --- ### 验证步骤 1. 检查依赖树: ```bash mvn dependency:tree | grep langchain4j-memory ``` 预期输出: ``` [INFO] +- dev.langchain4j:langchain4j-memory:jar:0.30.0:compile ``` 2. 确认仓库生效: ```bash mvn help:effective-pom | grep -A 10 "langchain4j-repo" ``` --- ### 常见问题排查 | 现象 | 解决方案 | |------|----------| | 版本号冲突 | 使用 `mvn dependency:tree` 分析冲突 | | 公司防火墙拦截 | 配置 Maven 代理或镜像仓库 | | 快照版本不稳定 | 改用稳定版(如 `0.30.0`) | > **提示**:LangChain4j 版本迭代较快,建议锁定稳定版本[^1]。若需最新功能,可添加快照仓库并启用 `-SNAPSHOT` 版本[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值