当前位置: 首页 > news >正文

【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?")

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

相关文章:

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

🔗 LangChain for LLM Application Development - DeepLearning.AI 学习目标 1、Langchain的历史记忆 ConversationBufferMemory 2、基于窗口限制的临时记忆 ConversationBufferWindowMemory 3、基于Token数量的临时记忆 ConversationTokenBufferMemory 4、基于历史…...

最新Qt6的下载与成功安装详细介绍

引言 Qt6 是一款强大的跨平台应用程序开发框架,支持多种编程语言,最常用的是C。Qt6带来了许多改进和新功能,包括对C17的支持、增强的QML和UI技术、新的图形架构,以及构建系统方面的革新。本文将指导你如何在Windows平台上下载和安…...

LeetCode 热题 HOT 100 (001/100)【宇宙最简单版】

【链表】 No. 0160 相交链表 【简单】👉力扣对应题目指路 希望对你有帮助呀!!💜💜 如有更好理解的思路,欢迎大家留言补充 ~ 一起加油叭 💦 欢迎关注、订阅专栏 【力扣详解】谢谢你的支持&#x…...

Ubantu 使用 docker 配置 + 远程部署 + 远程开发

大家好我是苏麟 , Ubantu 一些配置 . 视频 : 服务器很贵?搞台虚拟机玩玩!保姆级 Linux 远程开发教程_哔哩哔哩_bilibili Docker安装及配置 安装命令 : sudo apt install docker.io 查看版本号 : docker -v 查看虚拟机地址命令 : ifconfig 虚拟机地址 或…...

应用层自定义协议与序列化

个人主页:Lei宝啊 愿所有美好如期而遇 协议 简单来说,就是通信双方约定好的结构化的数据。 序列化与反序列化 我们通过一个问题引入这个概念,假如我们要实现一个网络版的计算器,那么现在有两种方案,第一种&#x…...

Python学习笔记—100页Opencv详细讲解教程

目录 1 创建和显示窗口... - 4 - 2 加载显示图片... - 6 - 3 保存图片... - 7 - 4 视频采集... - 8 - 5视频录制... - 11 - 6 控制鼠标... - 12 - 7 TrackBar 控件... - 14 - 8.RGB和BGR颜色空间... - 16 - 9.HSV和HSL和YUV.. - 17 - 10 颜色空间的转化... - 18 - …...

C语言·分支和循环语句(超详细系列·全面总结)

前言:Hello大家好😘,我是心跳sy,为了更好地形成一个学习c语言的体系,最近将会更新关于c语言语法基础的知识,今天更新一下分支循环语句的知识点,我们一起来看看吧~ 目录 一、什么是语句&#xf…...

Gateway源码分析:路由Route、断言Predicate、Filter

文章目录 源码总流程图说明GateWayAutoConfigurationDispatcherHandlergetHandler()handleRequestWith()RouteToRequestUrlFilterReactiveLoadBalancerClientFilterNettyRoutingFilter 补充知识适配器模式 详细流程图 源码总流程图 在线总流程图 说明 Gateway的版本使用的是…...

ARM体系结构和接口技术(十)按键中断实验①

一、按键中断实验 (一)分析按键电路图 (二)芯片手册 二、按键中断实验分析 注:NVIC----Cortx-M核GIC----Cortx-A核 (一)查看所有外设的总线以及寄存器基地址 注:GIC的总线是A7核的…...

PostgreSQL使用(二)——插入、更新、删除数据

说明:本文介绍PostgreSQL的DML语言; 插入数据 -- 1.全字段插入,字段名可以省略 insert into tb_student values (1, 张三, 1990-01-01, 88.88);-- 2.部分字段插入,字段名必须写全 insert into tb_student (id, name) values (2,…...

有关css的题目

css样式来源有哪些&#xff1f; 内联样式&#xff1a; <a style"color: red"> </a> 内部样式&#xff1a;<style></style> 外部样式&#xff1a;写在独立的 .css文件中的 浏览器的默认样式 display有哪些属性 none - 不展示 block - 块类型…...

【开源库】libodb库编译及使用

前言 本文介绍windows平台下libodb库的编译及使用。 文末提供libodb-2.4.0编译好的msvc2019_64版本&#xff0c;可直接跳转自取 ODB库学习相关 【开源库学习】libodb库学习&#xff08;一&#xff09; 【开源库学习】libodb库学习&#xff08;二&#xff09; 【开源库学习】…...

电力需求预测挑战赛笔记 Task3 #Datawhale AI 夏令营

上文&#xff1a; 电力需求预测挑战赛笔记 Task2 #Datawhale AI 夏令营-CSDN博客文章浏览阅读80次。【代码】电力需求预测挑战赛笔记 Task2。https://blog.csdn.net/qq_23311271/article/details/140360632 前面我们介绍了如何使用经验模型以及常见的lightgbm决策树模型来解决…...

Promise 详解(原理篇)

目录 什么是 Promise 实现一个 Promise Promise 的声明 解决基本状态 添加 then 方法 解决异步实现 解决链式调用 完成 resolvePromise 函数 解决其他问题 添加 catch 方法 添加 finally 方法 添加 resolve、reject、race、all 等方法 如何验证我们的 Promise 是否…...

动态内存经典笔试题分析

目录 1.题目一 2.题目二 3.题目三 4.题目四 1.题目一 #include<stdlib.h> #include<stdio.h> #include<string.h> void GetMemory(char* p) {p (char*)malloc(100); } void Test(void) {char* str NULL;GetMemory(str);strcpy(str, "hello world…...

JS设计模式(一)单例模式

注释很详细&#xff0c;直接上代码 本文建立在已有JS面向对象基础的前提下&#xff0c;若无&#xff0c;请移步以下博客先行了解 JS面向对象&#xff08;一&#xff09;类与对象写法 特点和用途&#xff1a; 全局访问点&#xff1a;通过单例模式可以在整个应用程序中访问同一个…...

uniapp动态计算并设置元素高度

<template><view><scroll-view id"sv-box" :scroll-y"true" :style"{height:navHeightpx}"></scroll-view><view id"btn-box"><button>取消</button><button>确认</button><…...

直播架构如何设计核心节点和边缘节点

在直播架构中&#xff0c;核心节点和边缘节点的分工及主要服务是确保直播服务稳定、高效和可扩展的关键。以下是对这些节点的详细描述&#xff1a; 核心节点 核心节点通常位于数据中心&#xff0c;负责处理直播的主要逻辑和数据处理。其主要服务包括&#xff1a; 直播管理后…...

自动驾驶-预测概览

通过生成一条路径来预测一个物体的行为&#xff0c;在每一个时间段内&#xff0c;为每一辆汽车重新计算预测他们新生成的路径&#xff0c;这些预测路径为规划阶段做出决策提供了必要信息 预测路径有实时性的要求&#xff0c;预测模块能够学习新的行为。我们可以使用多源的数据…...

基于PSO算法优化PID参数的一些问题

目录 前言 Q1&#xff1a;惯性权重ω如何设置比较好&#xff1f;学习因子C1和C2如何设置&#xff1f; Q2&#xff1a;迭代速度边界设定一定能够遍历&#xff08;/覆盖&#xff09;整个PID参数二维空间范围吗&#xff1f;还是说需要与迭代次数相关&#xff1f;迭代次数越高&a…...

ElevenLabs Starter计划实战指南(新手必看的4步激活+2次配额翻倍技巧)

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;ElevenLabs Starter计划的核心定位与适用边界 ElevenLabs Starter 计划是面向开发者、内容创作者及小型团队推出的免费语音合成入门方案&#xff0c;旨在以零门槛方式提供高质量、低延迟的文本转语音&…...

开源状态监控工具openclaw-status:从原理到部署的完整实践指南

1. 项目概述&#xff1a;一个开源状态监控工具的诞生最近在折腾一个开源项目&#xff0c;叫openclaw-status&#xff0c;是vibe-with-me-tools组织下的一个子项目。简单来说&#xff0c;这是一个用于监控和展示各种服务、应用、设备状态的工具。听起来是不是有点像那些商业化的…...

收藏!小白程序员必看:详解7种RAG分块策略,轻松提升大模型检索效果

收藏&#xff01;小白程序员必看&#xff1a;详解7种RAG分块策略&#xff0c;轻松提升大模型检索效果 本文深入解析了RAG系统中7种主流分块策略&#xff0c;包括固定大小、语义、递归、文档结构、智能体、句子和段落分块。强调了分块策略对检索增强生成&#xff08;RAG&#xf…...

机器学习模型安全防护与TEE技术实践

1. 机器学习模型安全与完整性挑战概述 在金融风控、医疗诊断等关键领域&#xff0c;机器学习模型的安全与完整性已成为AI落地的首要考量。过去三年中&#xff0c;恶意数据投毒攻击增长了近300%&#xff0c;而预训练模型供应链中的安全漏洞更是导致了多起重大数据泄露事件。这些…...

别再死记硬背段码了!用Python脚本自动生成数码管显示码表(支持共阳/共阴)

用Python解放双手&#xff1a;动态生成数码管段码的工程实践 数码管作为电子设计中最基础的显示元件之一&#xff0c;其驱动原理看似简单却暗藏玄机。传统开发流程中&#xff0c;工程师需要反复查阅手册或记忆十六进制段码&#xff0c;这种低效模式在复杂项目中将消耗大量时间。…...

ImageTrans插件生态:用Python扩展图片OCR与翻译工作流

1. 项目概述&#xff1a;一个为ImageTrans量身定制的插件生态如果你经常需要处理图像中的文字&#xff0c;比如翻译漫画、本地化游戏截图或者处理带文字的UI设计稿&#xff0c;那你很可能听说过或者用过ImageTrans这款工具。它是一款专注于图片文字识别&#xff08;OCR&#xf…...

Codepack:标准化开发配置与自动化工具链的工程实践

1. 项目概述&#xff1a;一个为开发者准备的“代码行囊” 最近在GitHub上闲逛&#xff0c;发现了一个挺有意思的项目&#xff0c;叫 JasonLovesDoggo/codepack 。乍一看名字&#xff0c;你可能会觉得这又是一个普通的代码库或者工具集。但点进去仔细研究后&#xff0c;我发现…...

404 Not Found 与 500 Internal Server Error 全方位解析

前言在日常开发与运维中&#xff0c;HTTP 状态码是我们最常打交道的一类信号。其中&#xff0c;404 与 500 两类错误几乎占据了线上问题的一半以上。你是否遇到过&#xff1a;用户反馈页面打不开&#xff0c;浏览器提示 404 Not Found&#xff0c;但实际上资源明明存在&#xf…...

利用Google可编程搜索引擎API实现免费高效的Python搜索自动化

1. 项目概述&#xff1a;一个被低估的搜索利器 如果你经常需要从Google上批量、自动化地获取搜索结果&#xff0c;并且对搜索结果的质量、速度和稳定性有要求&#xff0c;那你一定遇到过官方API的种种限制&#xff0c;或者对第三方付费服务望而却步。今天要聊的这个项目 chhan…...

基于WebSocket的Web即时通讯后端架构设计与实战部署指南

1. 项目概述&#xff1a;一个面向开发者的Web即时通讯解决方案最近在折腾一个内部协作工具&#xff0c;需要集成一个稳定、可控且能深度定制的即时通讯模块。市面上成熟的IM SDK很多&#xff0c;但要么是黑盒&#xff0c;出了问题排查困难&#xff1b;要么是功能臃肿&#xff0…...