LangChain中的缓存机制详解

文章目录

    • 概要
    • 整体架构流程
    • SQLite 缓存
    • 小结

概要

在处理大规模语言模型(LLMs)时,频繁的API调用不仅耗费时间和金钱,还可能导致不必要的延迟。为了解决这个问题,LangChain 提供了一种缓存机制,通过存储先前请求的结果来避免重复调用相同的API。本文将详细介绍 LangChain 的缓存机制及其使用方法。

缓存的重要性
缓存对于提高应用程序的性能和减少成本有着重要的意义:

节省资金:如果您的应用程序频繁请求相同的完成结果,缓存可以帮助减少对LLM提供商的API调用次数,从而节省资金。
加速应用:通过减少API调用次数,缓存还可以加快应用程序的响应速度,提升用户体验。

整体架构流程

启用缓存
启用LangChain的缓存功能非常简单,只需几行代码即可完成。下面我们将通过具体的例子来展示如何启用内存缓存。

首先,我们需要初始化一个ChatOpenAI实例,这将是我们的LLM客户端:

然后,我们可以尝试不使用缓存的情况下调用一次:

python"># 初始化客户端
from langchain_community.llms.ollama import Ollamaollama_client = Ollama(model="qwen:7b")ollama_client.invoke("请问2只兔子有多少条腿?")

接下来,我们将启用内存缓存:

python">from langchain.globals import set_llm_cache
from langchain.cache import InMemoryCacheset_llm_cache(InMemoryCache())

然后创建一个请求链

python">from langchain_core.output_parsers import StrOutputParser
from langchain_core.prompts import ChatPromptTemplateprompt = ChatPromptTemplate.from_template("请根据下面的主题写一篇小红书营销的短文: {topic}")
output_parser = StrOutputParser()chain = prompt | ollama_client | output_parser

首次调用请求链

python">chain.invoke({"topic": "康师傅绿茶"})

次调用相同的主题,这次应该从缓存中获取结果:

python">chain.invoke({"topic": "康师傅绿茶"})

可以看到,第二次调用的速度更快,因为它直接从缓存中读取了结果。

SQLite 缓存

除了内存缓存之外,LangChain 还支持使用 SQLite 数据库存储缓存。SQLite 是一种轻量级的数据库,非常适合用于缓存数据,特别是当需要持久化存储时。

启用 SQLite 缓存
启用 SQLite 缓存的步骤与内存缓存类似,只需更改缓存的类型即可:

python">from langchain.cache import SQLiteCacheset_llm_cache(SQLiteCache(database_path="./db/langchain.db"))

现在,我们可以使用 SQLite 缓存来处理一个新的请求:

python">chain.invoke({"topic": "旺仔小馒头"})

再次调用相同的主题,这次也应该从缓存中获取结果:

python">chain.invoke({"topic": "旺仔小馒头"})

小结

通过启用LangChain的缓存功能,您可以显著减少对LLM提供商的API调用次数,从而节省成本并提高应用程序的响应速度。本文介绍了如何使用内存缓存和SQLite缓存两种方式来实现这一目标。希望这篇博客能够帮助您更好地理解和应用LangChain的缓存机制。


http://www.ppmy.cn/news/1520690.html

相关文章

gitea + drone实现CI/CD

下面只是使用docker compose 启动容器docker-compose.yml文件 创建drone容器 version: 3 services:drone-server:restart: alwaysimage: drone/drone:2ports:- "3000:80"volumes:- /home/dorne/lib/drone:/var/lib/drone/- /home/dorne/data:/data/environment:- D…

微服务日常总结

1.当我们在开发中,需要连接多个库时,可以在yml中进行配置。 当在查询的时候,跨库时,需要通过DS 注解来指定,需要yml配置需要保持一致。 2. 当我们想把数据存入到clob类型中,需要再字段 的占位符后面加上j…

Spring全局异常处理HandlerExceptionResolver使用

1 引言 全局异常处理在项目中经常会用到,主要作用包括统一处理异常、提供友好的错误信息、避免应用程序崩溃、记录异常日志、避免异常信息泄露等等。下文将以实现HandlerExceptionResolver接口的方式,实现全局异常处理功能及常规用法。 2 代码 下面列…

搜维尔科技:蹦床、跳绳或骑马,OptiTrack可以捕捉难以想象的物体

蹦床、跳绳或骑马,OptiTrack可以捕捉难以想象的物体 搜维尔科技:蹦床、跳绳或骑马,OptiTrack可以捕捉难以想象的物体

Eureka简介与开发

Eureka 是由 Netflix 开源的服务发现和注册中心,它提供了服务的注册与发现功能,是 Spring Cloud 体系中的核心组件之一。Eureka 采用 C/S 架构,包含 Eureka Server 和 Eureka Client 两个主要的组件。 **Eureka Server** 充当服务注册中心&a…

读懂以太坊源码(3)-详细解析genesis.json

要想搞懂以太坊的源代码逻辑,必须要了解以太坊创世区块配置文件(genesis.json)的结构,以及每个配置参数的意义,创世配置文件,主要作用是设置链的ID,指定以太坊网络中硬分叉发生的区块高度,以及初始ETH数量的…

DuplicateKeyException产生原因及解决方案

DuplicateKeyException 是 Spring 框架中与数据库操作相关的异常之一,通常在试图向数据库中插入一条记录时,违反了唯一性约束(如主键或唯一索引约束)时抛出。这意味着数据库中已经存在具有相同键值的记录,导致插入操作…

小程序中用于跳转页面的5个api是什么?区别是什么

小程序中用于跳转页面的5个主要API分别是wx.navigateTo、wx.redirectTo、wx.reLaunch、wx.switchTab和wx.navigateBack。这些API各自具有不同的功能和特点,适用于不同的页面跳转场景。以下是它们的详细介绍及区别: 1. wx.navigateTo 功能:保…

认识爬虫技术

爬虫目的 网络爬虫,主要目的是代替人工收集网络数据。 应用场景主要包括两个方面: 网页收集的数据量少,但重复操作频率高; 通过网页搜集数据的量大。 只要满足以上两个应用场景,其实都可以考虑使用爬虫技术降低人…

TCP协议 配合 Wireshark 分析数据

在TCP连接中,无论是客户端还是服务端,都有可能成为发送端或接收端,这是因为TCP是一个全双工协议,允许数据在同一连接中双向流动 客户端(Client):通常是指主动发起连接请求的一方。例如&#xf…

【归纳总结】常见排序算法及其实现:直接插入排序、希尔排序、选择排序、堆排序、冒泡排序、快排、归并排序

思维导图: 目录 思维导图: 一、插入排序 1.直接插入排序: a:基本思想: b:基本步骤: c:复杂度分析 d:Java代码实现: 2.希尔排序(缩小增量排序) a:基本思想: c…

VMware部署linux系统

前期准备 安装VMware的相关教程在我的另一篇博客。 VMware的安装教程-CSDN博客 CentOS7.6的安装包 链接:https://pan.baidu.com/s/1sl8COPAC_VEcRtKxvu2S1A?pwd84el 提取码:84el 如果觉得百度网盘速度太慢,可以去镜像下载也可以 阿里…

对同一文件夹下所有excel表进行相同操作(数据填充、删除、合并)

背景引入:如图所示,笔者需要对数十个表格的银行日记账工作簿合并成一个工作簿,以便与本月银行流水进行核对。 为了方便银行日记账与银行流水进行核对,需要再每个村或小组的表格中,将村或小组的名称放在J列。 clear c…

mongodb在Java中条件分组聚合查询并且分页(时间戳,按日期分组,年月日...)

废话不多说,先看效果图: SQL查询结果示例: 多种查询结果示例: 原SQL: db.getCollection("hbdd_order").aggregate([{// 把时间戳格式化$addFields: {orderDate: {"$dateToString": {"for…

51单片机-独立按键

时间&#xff1a;2024.8.28 作者&#xff1a;Whappy 目的&#xff1a;学习51单片机 代码&#xff1a; #include <REGX52.H> #include "intrins.h"void Delay1ms(unsigned int xms) //11.0592MHz {unsigned char i, j;while(xms--){_nop_();i 2;j 199;do{…

ORA-01186: file 201 failed verification tests

环境&#xff1a;oracle11.2.0.4RACASMred hat6.1x64 主库两节点RAC&#xff0c;备库也为两节点RAC。 备库启用为实时应用查询。日志应用等都是正常的。 主库asm group如下&#xff1a; ASMCMD> ls CRS/DATA/ FRA/ 备库asm group如下&#xff1a; ASMCMD> ls CRS/SDATA/ …

西北工业大学oj-打印杨辉三角

用函数编程计算并输出如图所示的杨辉三角&#xff0c;行数由用户输入。 这道题就很简单了知道杨辉三角的规律&#xff0c;前后都是1&#xff0c;中间数字等于左上加右上 杨辉三角可以通过递推公式计算&#xff1a;C(n, k) C(n-1, k-1) C(n-1, k)&#xff0c;其中 C(n, k) 表…

掌控安全CTF-2024年8月擂台赛-ez_misc

题解&#xff1a; 题目给了一个流量包和一个加密的zip文件&#xff0c;我们首先打开流量包&#xff0c;很多流量&#xff0c;查看一下http协议&#xff0c;发现是个sql靶场&#xff0c;找到关键字样flag&#xff0c;得到一串字符&#xff1a; LJWXQ2C2GN2DAYKHNR5FQMTMPJMDER…

STM32F103C8----GPIO(跟着江科大学STM32)

一&#xff0c;GPIO简介 GPIO&#xff08;General Purpose Input Output&#xff09;通用输入输出口 可配置为8种输入输出模式 引脚电平&#xff1a;0V~3.3V&#xff08;0V&#xff09;&#xff0c;部分引脚可容忍5V 输出模式下可控制端口输出高低电平&#xff0c;用以驱动…

【机器学习-随记】使用 Slack 和 Facebook Messenger 的消息机器人实现虚拟客服人员

使用 Slack 和 Facebook Messenger 的消息机器人实现虚拟客服人员 1. 平台选择与集成 2. 消息机器人开发 3. 自然语言处理 (NLP) 4. 虚拟助手功能实现 5. 语音助手集成 6. 安全与用户隐私 7. 测试与部署 &#x1f388;边走、边悟&#x1f388;迟早会好 实现一个虚拟客…