记忆的力量:使用Langchain为AI助手添加持久记忆

2024-08-25 04:04

本文主要是介绍记忆的力量:使用Langchain为AI助手添加持久记忆,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

在使用Langchain构建智能对话系统时,记忆库的作用不可小觑。记忆库能够存储和管理对话历史,让AI在交流中更加连贯和个性化。通过Langchain的记忆库集成,我们可以轻松地将Redis等数据库作为后端存储,实现聊天消息的持久化。这样,无论用户何时返回,AI都能够回忆起之前的对话内容,提供更加贴心的服务。例如,用户询问天气后,AI不仅能够提供即时信息,还能记住用户之前询问的城市,下次直接提供相关信息。这种记忆能力极大地提升了用户体验,使得对话更加流畅自然。Langchain的记忆库功能,为构建智能、有记忆的AI助手提供了强大的支持。

在使用Langchain处理Redis Chat Message History时,很多朋 友可能会遇到手册说明不详细和代码示例无法正常运行的问题。我这通过2天的摸索自定义开发langchain利用redis库存放会员的记忆系统,提高了记忆的利用效率

1,关于redis数据库的链接代码实现:

import json
import os
import configparser
import redisclass RedisHashClient:def __init__(self):# config = common.readConfig()config = configparser.ConfigParser()config_file = './config.ini'config.read(config_file, 'utf8')self.client = redis.Redis(host=config.get('redis_conf', 'host'), port=config.get('redis_conf', 'port'), db=config.get('redis_conf', 'db'), password=config.get('redis_conf', 'password'))

2,关于记忆体的存放与提取代码:

from langchain_core.chat_history import InMemoryChatMessageHistory
from langchain_core.prompts import ChatPromptTemplate
from langchain_core.runnables.history import RunnableWithMessageHistory
from langchain.schema import BaseMessage, HumanMessage, AIMessagedef llMmodel(self):try:api_key = self.config.get('chatgpt', 'zhipu_apikey')llMmodel_instance = ChatOpenAI(temperature=0.9,# model="glm-4-0520",# model="glm-4",model="glm-4-air",openai_api_key=api_key,openai_api_base="https://open.bigmodel.cn/api/paas/v4/")return llMmodel_instanceexcept Exception as e:           print(f"An unexpected error occurred: {e}")# 定义一个函数来保存聊天历史到 Redis# 保存聊天历史到 Redis(使用 JSON)def save_chat_history_to_redis(self, chat_history):chat_history_str = json.dumps([msg.dict() for msg in chat_history.messages],ensure_ascii=False)# 将 JSON 字符串中的汉字转换为 Base64 编码RedisHashClient().client.hset("langchain:chat_history",self.session_id,chat_history_str)# 定义一个函数来从 Redis 获取聊天历史# 从 Redis 获取聊天历史(使用 JSON)def get_chat_history_from_redis(self):chat_history_str = RedisHashClient().client.hget("langchain:chat_history",self.session_id)chat_history = InMemoryChatMessageHistory()if chat_history_str:messages = json.loads(chat_history_str)for msg in messages:if msg['type'] == 'human':chat_history.add_message(HumanMessage(content=msg['content']))elif msg['type'] == 'ai':chat_history.add_message(AIMessage(content=msg['content']))return chat_history# 用户的背景信息	def getUserBginformation(self):return "姓名:黑金;职务:从事IT开发10年; 爱好:喜欢研究新代码"def chatmsg(self):user_background_information = self.getUserBginformation()prompt = ChatPromptTemplate.from_messages([("system", "你是一个AI聊天助手"),("system", "请使用中文语言回复,并且回复token的长度不要超过100字。回复不要出现Note"),("user",user_background_information),("placeholder", "{chat_history}"),("human", "{input}"),])# 使用示例session_id = f"user_id::{self.user_id}"  # 假设这是用户的会话 IDchat_history = self.get_chat_history_from_redis()if chat_history is None:chat_history = InMemoryChatMessageHistory()  #BaseChatMessageHistory类自带的#调试history是字符串吗?chain = prompt | self.llMmodelwrapped_chain = RunnableWithMessageHistory(chain, lambda x: chat_history)try:AIMessageObj = wrapped_chain.invoke({"input": $input_chat,  # 用户输入},config={"configurable": {"session_id":session_id}})self.historyMsg = chat_history.messagesself.aiOutMsg = AIMessageObj.content.strip()if not self.aiOutMsg:self.error = "AI回复为空"raise ValueError("AI回复为空")input_msg = self.input_json['input_chat']self.saveAiChatLog(input_msg, 'user', 0)self.token_usage = AIMessageObj.response_metadata['token_usage']print('用户输入:',input_msg)# 添加消息到聊天历史self.save_chat_history_to_redis(chat_history)            self.saveAiReplyHistory()            returnexcept Exception as e:            print(f"发生错误:{str(e)}")            raise ValueError(e)

上述代码的逻辑流程可以概括如下:

  1. 设置Prompt:首先,定义一个prompt,它是一个用于与AI模型交互的模板。这个模板包括系统消息、用户背景信息、一个占位符用于插入聊天历史,以及一个用于用户输入的占位符。

  2. 获取聊天历史:接着,通过get_chat_history_from_redis方法从Redis中检索用户的聊天历史。如果用户是第一次访问或者没有历史记录,就创建一个新的InMemoryChatMessageHistory实例。

  3. 调用对话模型:使用Langchain的RunnableWithMessageHistory包装器,结合定义好的prompt和用户的输入,调用智谱清言的对话模型(llMmodelInherit)。这个模型会根据提供的信息生成回复。

  4. 存储模型返回的消息:将AI模型返回的消息(AIMessageObj.content)处理后,存储到聊天历史中。这通常涉及到将消息添加到内存中的聊天历史对象,并同步更新到Redis数据库,以便持久化存储。

  5. 异常处理:在整个过程中,如果发生任何异常,代码会捕获这些异常,并记录错误信息。同时,会向飞书(Feishu)发送错误通知,以便开发者能够及时了解并处理问题。

  6. 返回结果:最后,处理完用户的消息并更新聊天历史后,代码会返回AI模型的响应,以便可以将其发送给用户。

这段代码的核心目的是实现一个具有记忆功能的聊天系统,它能够记住用户的历史对话,并在后续的交互中使用这些信息来提供更加个性化和连贯的回复。

以下是针对AI记忆的应用场景的详细解释:

  1. 医疗健康助手

    • 长期记忆跟踪:AI记忆系统能够长期存储患者的病史、用药计划和治疗进展。通过这种方式,AI助手可以提供个性化和连续的医疗建议,帮助医生和患者更好地管理健康。
    • 个性化和连续性:AI助手能够根据患者的病史和当前状况,提供针对性的建议。例如,提醒患者按时服药、预约检查或根据最新的医学研究调整治疗方案。
  2. 虚拟伴侣

    • 记住个人细节:AI伴侣能够记住用户的个人喜好、习惯和过去的对话内容。这种记忆能力使得AI能够提供更加个性化和有意义的交互体验。
    • 深层次关系:通过记住用户的喜好和习惯,AI伴侣能够提供更加贴心的服务,比如推荐音乐、电影或餐厅,甚至参与到用户的日常生活中,提供情感支持。
  3. 生产力工具

    • 记住用户习惯:AI工具能够学习并记住用户的工作习惯和常用文档,从而简化工作流程。
    • 提高效率:通过自动整理文档、提醒任务和预测用户需求,AI工具能够显著提高工作效率。例如,AI可以根据用户的工作模式,提前准备好所需的文件或数据,减少手动搜索和整理的时间。
  4. 客户支持AI代理

    • 保留交互信息:客户支持机器人能够记住与用户的 previous 交互信息,从而提供更准确和上下文感知的帮助。
    • 提高服务质量:通过记住用户的偏好和历史问题,AI代理能够更快地解决用户的问题,减少重复提问,提高客户满意度。
  5. 游戏AI NPC

    • 记住玩家选择:游戏中的AI NPC能够记住玩家的选择、策略和进度,从而动态适应游戏环境。
    • 沉浸式体验:通过记住玩家的行为,AI NPC能够提供更加真实和沉浸的游戏体验。例如,NPC可以根据玩家的行为调整对话内容,提供更加真实的互动。



还有,AI记忆库的后期画像如何定位在以下功能:

  1. 实时记录:软件可能会通过摄像头、麦克风或其他传感器实时捕捉用户的所见所闻。

  2. 活动追踪:软件可以追踪用户的位置、移动轨迹、步数等,通过GPS或其他定位技术。

  3. 事件标记:用户可以手动标记重要事件或由软件自动检测特定事件(如会议开始、电话呼叫等)。

  4. 语音到文本:软件可以将用户的对话或周围的声音转换成文本,方便日后检索。

  5. 情感分析:通过分析用户的语音语调、表情或文本内容,软件可能能够记录用户的情绪变化。

  6. 健康监测:如果集成了健康监测工具,软件还可以追踪用户的心率、睡眠质量等健康数据。

  7. 数据整理:软件会将收集的数据整理成易于理解的格式,如时间线、日记条目或摘要。

  8. 搜索和回顾:用户可以轻松搜索和回顾记录的内容,软件可能会提供基于时间、地点或事件的筛选功能。

  9. 智能提醒:软件可以根据记录的内容提供智能提醒,比如提醒用户重要的日程或回忆特殊的日子。

  10. 数据存储:软件需要有足够的存储空间来保存大量的数据,并且可能需要云同步功能以便在不同设备间访问。

这样的软件可以用于多种目的,比如提高个人生产力、帮助记忆、记录生活故事或用于健康监测。然而,它也引发了关于隐私、数据安全和用户习惯的伦理和实践问题。

说明实现的代码是作者【黑金】业务需求经过采坑已经实现的,不是网上抄袭的。感兴趣的朋友可以加微信来聊。

这篇关于记忆的力量:使用Langchain为AI助手添加持久记忆的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1104491

相关文章

Ilya-AI分享的他在OpenAI学习到的15个提示工程技巧

Ilya(不是本人,claude AI)在社交媒体上分享了他在OpenAI学习到的15个Prompt撰写技巧。 以下是详细的内容: 提示精确化:在编写提示时,力求表达清晰准确。清楚地阐述任务需求和概念定义至关重要。例:不用"分析文本",而用"判断这段话的情感倾向:积极、消极还是中性"。 快速迭代:善于快速连续调整提示。熟练的提示工程师能够灵活地进行多轮优化。例:从"总结文章"到"用

AI绘图怎么变现?想做点副业的小白必看!

在科技飞速发展的今天,AI绘图作为一种新兴技术,不仅改变了艺术创作的方式,也为创作者提供了多种变现途径。本文将详细探讨几种常见的AI绘图变现方式,帮助创作者更好地利用这一技术实现经济收益。 更多实操教程和AI绘画工具,可以扫描下方,免费获取 定制服务:个性化的创意商机 个性化定制 AI绘图技术能够根据用户需求生成个性化的头像、壁纸、插画等作品。例如,姓氏头像在电商平台上非常受欢迎,

中文分词jieba库的使用与实景应用(一)

知识星球:https://articles.zsxq.com/id_fxvgc803qmr2.html 目录 一.定义: 精确模式(默认模式): 全模式: 搜索引擎模式: paddle 模式(基于深度学习的分词模式): 二 自定义词典 三.文本解析   调整词出现的频率 四. 关键词提取 A. 基于TF-IDF算法的关键词提取 B. 基于TextRank算法的关键词提取

使用SecondaryNameNode恢复NameNode的数据

1)需求: NameNode进程挂了并且存储的数据也丢失了,如何恢复NameNode 此种方式恢复的数据可能存在小部分数据的丢失。 2)故障模拟 (1)kill -9 NameNode进程 [lytfly@hadoop102 current]$ kill -9 19886 (2)删除NameNode存储的数据(/opt/module/hadoop-3.1.4/data/tmp/dfs/na

Hadoop数据压缩使用介绍

一、压缩原则 (1)运算密集型的Job,少用压缩 (2)IO密集型的Job,多用压缩 二、压缩算法比较 三、压缩位置选择 四、压缩参数配置 1)为了支持多种压缩/解压缩算法,Hadoop引入了编码/解码器 2)要在Hadoop中启用压缩,可以配置如下参数

Makefile简明使用教程

文章目录 规则makefile文件的基本语法:加在命令前的特殊符号:.PHONY伪目标: Makefilev1 直观写法v2 加上中间过程v3 伪目标v4 变量 make 选项-f-n-C Make 是一种流行的构建工具,常用于将源代码转换成可执行文件或者其他形式的输出文件(如库文件、文档等)。Make 可以自动化地执行编译、链接等一系列操作。 规则 makefile文件

从去中心化到智能化:Web3如何与AI共同塑造数字生态

在数字时代的演进中,Web3和人工智能(AI)正成为塑造未来互联网的两大核心力量。Web3的去中心化理念与AI的智能化技术,正相互交织,共同推动数字生态的变革。本文将探讨Web3与AI的融合如何改变数字世界,并展望这一新兴组合如何重塑我们的在线体验。 Web3的去中心化愿景 Web3代表了互联网的第三代发展,它基于去中心化的区块链技术,旨在创建一个开放、透明且用户主导的数字生态。不同于传统

AI一键生成 PPT

AI一键生成 PPT 操作步骤 作为一名打工人,是不是经常需要制作各种PPT来分享我的生活和想法。但是,你们知道,有时候灵感来了,时间却不够用了!😩直到我发现了Kimi AI——一个能够自动生成PPT的神奇助手!🌟 什么是Kimi? 一款月之暗面科技有限公司开发的AI办公工具,帮助用户快速生成高质量的演示文稿。 无论你是职场人士、学生还是教师,Kimi都能够为你的办公文

使用opencv优化图片(画面变清晰)

文章目录 需求影响照片清晰度的因素 实现降噪测试代码 锐化空间锐化Unsharp Masking频率域锐化对比测试 对比度增强常用算法对比测试 需求 对图像进行优化,使其看起来更清晰,同时保持尺寸不变,通常涉及到图像处理技术如锐化、降噪、对比度增强等 影响照片清晰度的因素 影响照片清晰度的因素有很多,主要可以从以下几个方面来分析 1. 拍摄设备 相机传感器:相机传

Andrej Karpathy最新采访:认知核心模型10亿参数就够了,AI会打破教育不公的僵局

夕小瑶科技说 原创  作者 | 海野 AI圈子的红人,AI大神Andrej Karpathy,曾是OpenAI联合创始人之一,特斯拉AI总监。上一次的动态是官宣创办一家名为 Eureka Labs 的人工智能+教育公司 ,宣布将长期致力于AI原生教育。 近日,Andrej Karpathy接受了No Priors(投资博客)的采访,与硅谷知名投资人 Sara Guo 和 Elad G