【Langchain大语言模型开发教程】记忆

🔗 LangChain for LLM Application Development - DeepLearning.AI

学习目标

1、Langchain的历史记忆 ConversationBufferMemory

2、基于窗口限制的临时记忆 ConversationBufferWindowMemory

3、基于Token数量的临时记忆 ConversationTokenBufferMemory

4、基于历史内容摘要的临时记忆 ConversationSummaryMemory

Langchain的历史记忆(ConversationBufferMemory)

import os
import warnings
from dotenv import load_dotenv, find_dotenv
from langchain.chat_models import ChatOpenAI
from langchain.chains import ConversationChain
from langchain.memory import ConversationBufferMemory_ = load_dotenv(find_dotenv())
warnings.filterwarnings('ignore')

 我们依然使用智谱的LLM,实例化一下Langchain的记忆模块,并构建一个带有记忆的对话模型

llm = ChatOpenAI(api_key=os.environ.get('ZHIPUAI_API_KEY'),base_url=os.environ.get('ZHIPUAI_API_URL'),model="glm-4",temperature=0.98)memory = ConversationBufferMemory()
conversation = ConversationChain(llm=llm,memory = memory,verbose=True
)

 进行对话

conversation.predict(input="Hi, my name is Andrew")
conversation.predict(input="What is 1+1?")
conversation.predict(input="What is my name?")

 模型确实可以记住我们的名字,打印一下记忆内容

#两种方式
print(memory.buffer)memory.load_memory_variables({})

 此外,Langchain还提供了一个函数来添加对话内容

memory.save_context({"input": "Hi"},{"output": "What's up"})

 基于窗口限制的临时记忆(ConversationBufferWindowMemory)

from langchain.memory import ConversationBufferWindowMemory
memory = ConversationBufferWindowMemory(k=1) #k表示我们保留最近几轮对话的数量

 我们先来添加两轮对话

memory.save_context({"input": "Hi"},{"output": "What's up"})
memory.save_context({"input": "Not much, just hanging"},{"output": "Cool"})

 通过对话历史可以发现,记忆中只保存了一轮的信息

memory.load_memory_variables({}){'history': 'Human: Not much, just hanging\nAI: Cool'}

 我们使用这种记忆方式来构建一个对话模型,发现他确实遗忘了第一轮的信息

llm = ChatOpenAI(api_key=os.environ.get('ZHIPUAI_API_KEY'),base_url=os.environ.get('ZHIPUAI_API_URL'),model="glm-4",temperature=0.98)
memory = ConversationBufferWindowMemory(k=1)
conversation = ConversationChain(llm=llm,memory = memory,verbose=False
)

基于Token数量的临时记忆 ConversationTokenBufferMemory

由于langchain中计算token数量的函数并不支持GLM4,所有使用这个函数会报错,根据源代码目前是支持gpt-3.5-turbo-0301、gpt-3.5-turbo、gpt-4,不知道以后会不会加入国产的这些模型。

memory = ConversationTokenBufferMemory(llm=llm, max_token_limit=500)memory.save_context({"input": "AI is what?!"},{"output": "Amazing!"})
memory.save_context({"input": "Backpropagation is what?"},{"output": "Beautiful!"})
memory.save_context({"input": "Chatbots are what?"}, {"output": "Charming!"})

 基于历史内容摘要的临时记忆 ConversationSummaryMemory

同理哈,这个函数的作用就是,我们会将历史的对话信息进行总结然后存在我们的记忆单元中,由于这里同样涉及到token的计算,所以这里也是无法正常运行的了。

from langchain.memory import ConversationSummaryBufferMemory
# create a long string
schedule = "There is a meeting at 8am with your product team. \
You will need your powerpoint presentation prepared. \
9am-12pm have time to work on your LangChain \
project which will go quickly because Langchain is such a powerful tool. \
At Noon, lunch at the italian resturant with a customer who is driving \
from over an hour away to meet you to understand the latest in AI. \
Be sure to bring your laptop to show the latest LLM demo."memory = ConversationSummaryBufferMemory(llm=llm, max_token_limit=100)
memory.save_context({"input": "Hello"}, {"output": "What's up"})
memory.save_context({"input": "Not much, just hanging"},{"output": "Cool"})
memory.save_context({"input": "What is on the schedule today?"},{"output": f"{schedule}"})

构建一个对话模型 (verbose设置为true可以查看到我们历史的一些信息)

conversation = ConversationChain(llm=llm,memory = memory,verbose=True
)

尝试进行提问 

conversation.predict(input="What would be a good demo to show?")

总结(吴恩达老师视频中的内容)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/381977.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

KMeans等其他聚类算法

KMeans算法是一种经典的聚类方法,最早由Stuart Lloyd在1957年提出,并在1982年由J. MacQueen推广和普及。虽然KMeans已经有几十年的历史,但它依然是数据挖掘和机器学习领域中最常用的聚类算法之一。 数学原理 KMeans算法的目标是将数据集分成…

vue3前端开发-小兔鲜项目-产品详情基础数据渲染

vue3前端开发-小兔鲜项目-产品详情基础数据渲染!这一次内容比较多,我们分开写。第一步先完成详情页面的基础数据的渲染。然后再去做一下右侧的热门产品的列表内容。 第一步,还是老规矩,先准备好接口函数。方便我们的页面组件拿到对…

亚信安全终端一体化解决方案入选应用创新典型案例

近日,由工业和信息化部信息中心主办的2024信息技术应用创新发展大会暨解决方案应用推广大会成功落幕,会上集中发布了一系列技术水平先进、应用效果突出、产业带动性强的信息技术创新工作成果。其中,亚信安全“终端一体化安全运营解决方案”在…

Aigtek:电压放大器的选型方法有哪些

电压放大器是电子电路中常见的元件,用于将输入电压信号放大到所需的水平。在选择适合特定应用的电压放大器时,需要考虑多个因素,包括性能要求、电源电压、带宽、噪声等。下面安泰电子将详细介绍电压放大器的选型方法,以帮助工程师…

浪潮自研交换机系列常见问题处理

CN61108PC-V-H 不能PING通任何地址,也不能被PING 输入ip traceroute enable既可。注意视图 交换机通过console口远程登录至其他交换机,掉线后console口无法使用 例如有2台交换机A和B,在A交换机上插上console线登录后,在A通过SSH…

【嵌入式硬件】快衰减和慢衰减

1.引语 在使用直流有刷电机驱动芯片A4950时,这款芯片采用的是PWM控制方式,我发现他的正转、反转有两种控制方式,分别是快衰减和慢衰减。 2.理解 慢衰减:相当于加在电机(感性原件)两端电压消失,将电机两端正负短接。 快衰减:相当于加在电机(感性原件)两端电压消失,将电机…

KingBase 下的 sys_hba.conf 详解

客户端访问KingbaseES数据库,需要建立身份的认证,sys_hba.conf相当于认证的黑白名单,可以通过配置sys_hba.conf允许或拒绝客户端对数据库服务器的访问。 sys_hba.conf原理: 客户端认证是由一个配置文件(通常名为sys_…

linux环境交叉编译openssl库,以使Qt支持https

一.前言 Qt若需要支持https,则需要openssl的支撑,并且要注意,Qt不同版本会指定对应的openssl版本库,比方我用的Qt5.14.2他要求用的openssl版本是1.1.1,你就不能用其他版本,不然基本就是失败报错。 如何查看Qt对应open…

站在资本投资领域如何看待分布式光纤传感行业?

近年来,资本投资领域对于分布式光纤传感行业并不十分敏感。这主要是由于分布式光纤传感技术是一个专业且小众的领域,其生命周期相对较长,缺乏爆发性,与消费品或商业模式创新产业有所不同。此外,国内的投资环境也是影响…

开源AI智能名片S2B2C商城小程序在社群团购模式中的应用与探索

摘要 本文深入探讨了开源AI智能名片S2B2C商城小程序在社群团购模式中的创新应用与未来发展。通过详细分析社群团购模式的特征、发展趋势及其面临的挑战,结合开源AI智能名片S2B2C商城小程序的技术优势与实际应用案例,本文提出了一系列旨在提升社群团购效…

文档解析效果全维度测评标准

TextIn文档解析测评工具,全面评测文档解析产品能力 关注TechLead,复旦AI博士,分享AI领域全维度知识与研究。拥有10年AI领域研究经验、复旦机器人智能实验室成员,国家级大学生赛事评审专家,发表多篇SCI核心期刊学术论文…

品牌设计宝典:打造独特视觉形象

今天,我们来谈谈品牌设计。品牌设计是视觉设计师非常重要的内容。如果你了解品牌设计的相关知识,你会更好地了解“包装”自己、运营自己或建立个人品牌内容。 理论上,品牌是一个广义的概念。比如公司从外到内建立的一些内容属于品牌概念下的…

Unity DOTS中的world

Unity DOTS中的world 注册销毁逻辑自定义创建逻辑创建world创建system group插入player loopReference DOTS中,world是一组entity的集合。entity的ID在其自身的世界中是唯一的。每个world都拥有一个EntityManager,可以用它来创建、销毁和修改world中的en…

Python机器学习入门:从理论到实践

文章目录 前言一、机器学习是什么?二、机器学习基本流程三、使用Python进行机器学习1.数据读取2.数据规范化3. 数据降维(主成分分析)4. 机器学习模型的选择5. 线性回归模型的实现6. 可视化结果 总结 前言 机器学习是人工智能的一个重要分支&…

安装好anaconda,打开jupyter notebook,新建 报500错

解决办法: 打开anaconda prompt 输入 jupyter --version 重新进入jupyter notebook: 可以成功进入进行代码编辑

功能测试与APPSCAN自动化测试结合的提高效率测试策略

背景 手工探索性测试(Manual Exploratory Testing,简称MET)是一种软件测试方法,它依赖于测试人员的直觉、经验和即兴发挥来探索应用程序或系统。与传统的脚本化测试相比,手工探索性测试不遵循固定的测试脚本&#xff0…

基于 PyTorch 的模型瘦身三部曲:量化、剪枝和蒸馏,让模型更短小精悍!

基于 PyTorch 的模型量化、剪枝和蒸馏 1. 模型量化1.1 原理介绍1.2 PyTorch 实现 2. 模型剪枝2.1 原理介绍2.2 PyTorch 实现 3. 模型蒸馏3.1 原理介绍3.2 PyTorch 实现 参考文献 1. 模型量化 1.1 原理介绍 模型量化是将模型参数从高精度(通常是 float32&#xff0…

【北京迅为】《i.MX8MM嵌入式Linux开发指南》-第三篇 嵌入式Linux驱动开发篇-第四十四章 注册字符设备号

i.MX8MM处理器采用了先进的14LPCFinFET工艺,提供更快的速度和更高的电源效率;四核Cortex-A53,单核Cortex-M4,多达五个内核 ,主频高达1.8GHz,2G DDR4内存、8G EMMC存储。千兆工业级以太网、MIPI-DSI、USB HOST、WIFI/BT…

【Linux】汇总TCP网络连接状态命令

输入命令: netstat -na | awk /^tcp/ {S[$NF]} END {for(a in S) print a, S[a]} 显示: 让我们逐步解析这个命令: netstat -na: netstat 是一个用于显示网络连接、路由表、接口统计等信息的命令。 -n 选项表示输出地址和端口以数字格式显示…

Armv8/Armv9架构的学习大纲-学习方法-自学路线-付费学习路线

本文给大家列出了Arm架构的学习大纲、学习方法、自学路线、付费学习路线。有兴趣的可以关注,希望对您有帮助。 如果大家有需要的,欢迎关注我的CSDN课程:https://edu.csdn.net/lecturer/6964 ARM 64位架构介绍 ARM 64位架构介绍 ARM架构概况…