总结之LangChain(三)——模型IO缓存
一、聊天模型缓存
LangChain为聊天模型提供了一个可选的缓存层。这有两个好处:
如果您经常多次请求相同的完成结果,它可以通过减少您对LLM提供程序的API调用次数来帮您节省费用。
它可以通过减少您对LLM提供程序的API调用次数来加快您的应用程序速度。
from langchain_openai import ChatOpenAIllm = ChatOpenAI()
from langchain.globals import set_llm_cache
内存缓存
%%time 是一个魔术命令,用于在代码中测量代码块的执行时间。它是Python编程语言中的一个内置命令,可以用来计算代码块的执行时间。通过在代码块前加上"%%time",可以获取代码块的执行时间信息,包括总时间、CPU时间和内存使用情况等。
注意:%%time是Jupyter Notebook和IPython环境的特性,标准Python脚本(.py)或其他非交互式Python环境中无法直接使用。如果你在非Jupyter环境下需要类似功能,可以使用time模块来手动计时。
%%time
from langchain.cache import InMemoryCacheset_llm_cache(InMemoryCache())# 第一次,它尚未在缓存中,所以需要更长的时间
llm.predict("明天天气怎么样")
%%time
# 第二次,由于已存在于缓存中,因此速度更快
llm.predict("明天天气怎么样")
完整示例代码
from langchain_openai import ChatOpenAI
from langchain.cache import InMemoryCache
from langchain.globals import set_llm_cache
import time
llm = ChatOpenAI(api_key="sk-XXXXX")set_llm_cache(InMemoryCache())start_time = time.time()print(llm.predict("明天天气怎么样?"))
end_time = time.time()
execution_time = end_time - start_time
print(f"代码执行时间: {execution_time} 秒")start_time = time.time()
print(llm.predict("明天天气怎么样?"))
end_time = time.time()
execution_time = end_time - start_time
print(f"代码执行时间: {execution_time} 秒")
结果
抱歉,我无法提供明确的明天天气预报,因为我无法访问实时天气数据。建议你查看天气预报应用或网站,以获取最新的天气信息。
代码执行时间: 5.457608938217163 秒
抱歉,我无法提供明确的明天天气预报,因为我无法访问实时天气数据。建议你查看天气预报应用或网站,以获取最新的天气信息。
代码执行时间: 0.0010001659393310547 秒
当然,可以结合我们的Chain来使用,如下:
from langchain_openai import ChatOpenAI
from langchain.cache import InMemoryCache
from langchain.globals import set_llm_cache
import time
llm = ChatOpenAI(api_key="sk-XXX")from langchain_core.prompts import ChatPromptTemplate
prompt = ChatPromptTemplate.from_messages([("system", "你是一个专业的天气播报员"),("user", "{input}")
])chain = prompt | llm
set_llm_cache(InMemoryCache())
start_time = time.time()print(chain.invoke("明天天气怎么样?"))
end_time = time.time()
execution_time = end_time - start_time
print(f"代码执行时间: {execution_time} 秒")start_time = time.time()
print(chain.invoke("明天天气怎么样?"))
end_time = time.time()
execution_time = end_time - start_time
print(f"代码执行时间: {execution_time} 秒")
结果
content='明天的天气预报如下:\n- 地点:[请提供具体地点]\n- 天气:[晴/多云/阴/雨/雪/雾等]\n- 温度范围:[最高温度]℃ 到 [最低温度]℃\n- 风力风向:[风力等级],[风向]\n\n请提供具体地点,我可以帮您查询更详细的天气情况。' response_metadata={'token_usage': {'completion_tokens': 131, 'prompt_tokens': 33, 'total_tokens': 164}, 'model_name': 'gpt-35-turbo', 'system_fingerprint': 'fp_811936bd4f', 'finish_reason': 'stop', 'logprobs': None} id='run-c07a049c-727d-47bc-a6c4-89135ff279c6-0' usage_metadata={'input_tokens': 33, 'output_tokens': 131, 'total_tokens': 164}
代码执行时间: 3.432565689086914 秒
content='明天的天气预报如下:\n- 地点:[请提供具体地点]\n- 天气:[晴/多云/阴/雨/雪/雾等]\n- 温度范围:[最高温度]℃ 到 [最低温度]℃\n- 风力风向:[风力等级],[风向]\n\n请提供具体地点,我可以帮您查询更详细的天气情况。' response_metadata={'token_usage': {'completion_tokens': 131, 'prompt_tokens': 33, 'total_tokens': 164}, 'model_name': 'gpt-35-turbo', 'system_fingerprint': 'fp_811936bd4f', 'finish_reason': 'stop', 'logprobs': None} id='run-c07a049c-727d-47bc-a6c4-89135ff279c6-0' usage_metadata={'input_tokens': 33, 'output_tokens': 131, 'total_tokens': 164}
代码执行时间: 0.0029997825622558594 秒```
程序或者脚本运行周期结束,缓存失效。
SQLite缓存
from langchain_openai import ChatOpenAI
from langchain.cache import SQLiteCache
from langchain.globals import set_llm_cache
import time
llm = ChatOpenAI(api_key="sk-XXX")from langchain_core.prompts import ChatPromptTemplate
prompt = ChatPromptTemplate.from_messages([("system", "你是一个专业的天气播报员"),("user", "{input}")
])chain = prompt | llm
set_llm_cache(SQLiteCache(database_path=".langchain.db"))
start_time = time.time()print(chain.invoke("明天天气怎么样?"))
end_time = time.time()
execution_time = end_time - start_time
print(f"代码执行时间: {execution_time} 秒")start_time = time.time()
print(chain.invoke("明天天气怎么样?"))
end_time = time.time()
execution_time = end_time - start_time
print(f"代码执行时间: {execution_time} 秒")
结果
content='明天的天气预报如下:预计会有阵雨,气温介于20-25摄氏度之间,风力较强,东北风,风速大约在20-25公里/小时。请注意携带雨具并做好防风保暖措施。' response_metadata={'token_usage': {'completion_tokens': 90, 'prompt_tokens': 33, 'total_tokens': 123}, 'model_name': 'gpt-35-turbo-16k', 'system_fingerprint': None, 'finish_reason': 'stop', 'logprobs': None} id='run-55940874-2056-44e8-90e2-c0163b218ced-0' usage_metadata={'input_tokens': 33, 'output_tokens': 90, 'total_tokens': 123}
代码执行时间: 2.634726047515869 秒
content='明天的天气预报如下:预计会有阵雨,气温介于20-25摄氏度之间,风力较强,东北风,风速大约在20-25公里/小时。请注意携带雨具并做好防风保暖措施。' response_metadata={'token_usage': {'completion_tokens': 90, 'prompt_tokens': 33, 'total_tokens': 123}, 'model_name': 'gpt-35-turbo-16k', 'system_fingerprint': None, 'finish_reason': 'stop', 'logprobs': None} id='run-55940874-2056-44e8-90e2-c0163b218ced-0' usage_metadata={'input_tokens': 33, 'output_tokens': 90, 'total_tokens': 123}
代码执行时间: 0.23708701133728027 秒
相关文章:
总结之LangChain(三)——模型IO缓存
一、聊天模型缓存 LangChain为聊天模型提供了一个可选的缓存层。这有两个好处: 如果您经常多次请求相同的完成结果,它可以通过减少您对LLM提供程序的API调用次数来帮您节省费用。 它可以通过减少您对LLM提供程序的API调用次数来加快您的应用程序速度。…...
判断一个Java服务是不是GateWay
方法 直接在对应服务的url后变加上后缀/actuator/gateway/routes,看是否会返回Gateway的路由信息。 如果返回了GateWay的路由列表,则该服务为Gateway服务。...
三次插值曲线--插值技术
三次插值曲线 1.1.三次样条曲线 三次样条曲线的基本思想是,在给定的一系列点(称为控制点或数据点)之间,通过一系列三次多项式曲线段来拟合这些点,使得整个曲线既平滑又准确地通过所有控制点。 1.1.1.数学定义 给定…...
python循环结构
1.while 循环 语句: while 循环条件表达式: 代码块 else: 代码块 小练: 设计一百以内的偶数相加 n 0 while n < 100:n 1if n % 2 0 :print(n) 判断是不是闰年(四年一润和百年不润,或者四百年一润&am…...
深入理解Netty的Pipeline机制:原理与实践详解
深入理解Netty的Pipeline机制:原理与实践详解 Netty是一个基于Java的高性能异步事件驱动的网络应用框架,广泛应用于高并发网络编程。(学习netty请参考:深入浅出Netty:高性能网络应用框架的原理与实践)Nett…...
直方图均衡化示例
禹晶、肖创柏、廖庆敏《数字图像处理(面向新工科的电工电子信息基础课程系列教材)》 图3-17...
私域电商新纪元:消费增值模式的创新与成功实践
大家好,我是吴军,很高兴能够与您分享私域电商领域的魅力与机遇。今天,我将为大家呈现一个令人瞩目的成功案例,这个案例充分展现了私域电商的巨大潜力和无限可能。 在短短一个月的时间里,我们的客户成功实现了业绩的飞跃…...
Java——IO流(一)-(6/8):字节流-FileInputStream 每次读取多个字节(示例演示)、一次读取完全部字节(方式一、方式二,注意事项)
目录 文件字节输入流:每次读取多个字节 实例演示 注意事项 文件字节输入流:一次读取完全部字节 方式一 方式二 注意事项 文件字节输入流:每次读取多个字节 用到之前介绍过的常用方法: 实例演示 需求:用每次读取…...
服务器SSH 免密码登录
1. 背景 为了服务器的安全着想,设置的服务器密钥非常长。但是这导致每次连接服务器都需要输入一长串的密码,把人折腾的很痛苦,所以我就在想,能不能在终端SSH的时候无需输入密码。 windows 可以使用 xshell 软件,会自…...
Linux安装MySQL以及远程连接
1、Linux安装MySQL 1.1、准备解压包 MySQL5.x解压包 提取码:9y7n 1.2、通过rpm脚本安装 切记安装顺序:common --> libs --> client --> server 因为它们之间存在依赖关系,所以务必按照顺序安装 安装前请确保当前目录/文…...
SQL Server 数据库分页技术详解:选择最佳方法优化查询性能”。
当今数据驱动的应用程序中,数据库分页技术在优化查询性能和提升用户体验中扮演着重要角色。在 SQL Server 环境下,开发者面对大数据集时,常常需要选择合适的分页方法以平衡功能需求和性能优化。本文将详细介绍 SQL Server 中几种主要的分页技…...
electron录制-镜头缩放、移动
要求 1、当录屏过程中,鼠标点击,镜头应该往点击处拉近,等一段时间还原 2、录屏过程中,可能会发生多次点击,但是点击位置偏差大,可能会导致缩放之后,画面没出来,因此需要移动镜头帧 …...
红队内网攻防渗透:内网渗透之内网对抗:信息收集篇自动项目本机导出外部打点域内通讯PillagerBloodHound
红队内网攻防渗透 1. 内网自动化信息收集1.1 本机凭据收集类1.1.1、HackBrowserData 快速获取浏览器的账户密码1.1.2、Searchall 快速搜索服务器中的有关敏感信息还有浏览器的账户密码1.1.3、Pillager 适用于后渗透期间的信息收集工具,可以收集目标机器上敏感信息1.2 对外打点…...
2024最新IDEA插件开发+发布全流程 SelectCamelWords[选中驼峰单词](idea源代码)
2024最新IDEA插件开发(发布)-SelectCamelWords[选中驼峰单词](idea源代码) 参考文档 Jetbrains Idea插件开发文档: https://plugins.jetbrains.com/docs/intellij/welcome.html代码地址:https://github.com/yangfeng…...
【网络安全】网络安全基础精讲 - 网络安全入门第一篇
目录 一、网络安全基础 1.1网络安全定义 1.2网络系统安全 1.3网络信息安全 1.4网络安全的威胁 1.5网络安全的特征 二、入侵方式 2.1黑客 2.1.1黑客入侵方式 2.1.2系统的威胁 2.2 IP欺骗 2.2.1 TCP等IP欺骗 2.2.2 IP欺骗可行的原因 2.3 Sniffer探测 2.4端口扫描技术…...
初识 GPT-4 和 ChatGPT
文章目录 LLM 概述理解 Transformer 架构及其在 LLM 中的作用解密 GPT 模型的标记化和预测步骤 想象这样⼀个世界:在这个世界里,你可以像和朋友聊天⼀样快速地与计算机交互。那会是怎样的体验?你可以创造出什么样的应用程序?这正是…...
【C语言】解决C语言报错:Array Index Out of Bounds
文章目录 简介什么是Array Index Out of BoundsArray Index Out of Bounds的常见原因如何检测和调试Array Index Out of Bounds解决Array Index Out of Bounds的最佳实践详细实例解析示例1:访问负索引示例2:访问超出上限的索引示例3:循环边界…...
【C++】一个极简但完整的C++程序
一、一个极简但完整的C程序 我们编写程序是为了解决问题和任务的。 1、任务: 某个书店将每本售出的图书的书名和出版社,输入到一个文件中,这些信息以书售出的时间顺序输入,每两周店主会手工计算每本书的销售量、以及每个出版社的…...
Lua迭代器详解(附加红点功能实例)
Lua迭代器详解与用法 1. 什么是迭代器2. 为什么需要理解迭代器的原理3. 迭代器的实现0. 闭包1. 有状态迭代器2. 无状态迭代器 4. 红点树系统基础 1. 什么是迭代器 迭代器是一种能让我们遍历一个集合中的所有元素的代码结构。比如常用ipairs()和pairs()。 2. 为什么需要理解迭代…...
锂磷硫(LPS)属于硫化物固态电解质 Li7P3S11是代表性产品
锂磷硫(LPS)属于硫化物固态电解质 Li7P3S11是代表性产品 锂磷硫(LPS),为非晶态材料,是硫化物固态电解质代表性产品之一,具有热稳定性好、成本较低等优点,在固态电解质中离子电导率较…...
PointCloudLib 点云边缘点提取 C++版本
0.实现效果 1.算法原理 PCL(Point Cloud Library)中获取点云边界的算法主要基于点云数据的几何特征和法向量信息。以下是对该算法的详细解释,按照清晰的格式进行归纳: 算法概述 PCL中的点云边界提取算法主要用于从3D点云数据中识别并提取出位于物体边界上的点。这些边界…...
【Qt】QList<QVariantMap>中数据修改
1. 问题 QList<QVariantMap> 类型中,修改QVariantMap中的值。 2. 代码 //有效代码1QVariantMap itemMap itemList.at(0);itemMap.insert("title", "test");itemList.replace(0, itemMap);//有效代码 2itemList.operator [](0).insert(…...
如何避免vue的url中使用hash符号?
目录 1. 安装 Vue Router 2. 配置 Vue Router 使用 history 模式 3. 更新 main.js 4. 配置服务器以支持 history 模式(此处需要仔细测试) a. Nginx 配置 b. Apache 配置 5. 部署并测试 总结 在 Vue.js 项目中,避免 URL 中出现 # 符号的…...
Java学习 - MySQL存储过程、函数和触发器练习实例
存储过程 存储过程是什么 存储过程是一组已经编译好的SQL语句存储过程优点有什么 安全 性能高 提高代码复用性创建存储过程的语法 DELIMITER $ # 不能加分号CREATE PROCEDURE 存储过程名(IN|OUT|INOUT 参数名 参数类型) BEGIN存储过程语句块 END;$DELIMITER ;创建一个无参的存储…...
【深度神经网络 (DNN)】
深度神经网络 (DNN) 深度神经网络 (DNN) 是机器学习领域中一种强大的工具,它由多层神经元组成,能够学习复杂的数据模式,解决各种任务,如图像识别、语音识别、自然语言处理等。 DNN 的构成: 神经元: DNN 的基本单元&…...
ES全文检索支持繁简和IK分词检索
ES全文检索支持繁简和IK分词检索 1. 前言2. 引入繁简转换插件analysis-stconvert2.1 下载已有作者编译后的包文件2.2 下载源码进行编译2.3 复制解压插件到es安装目录的plugins文件夹下 3. 引入ik分词器插件3.1 已有作者编译后的包文件3.2 只有源代码的版本3.3 安装ik分词插件 4…...
解决Visual Studio Code在Ubuntu上崩溃的问题
解决Visual Studio Code在Ubuntu上崩溃的问题 我正在使用Ubuntu系统,每次打开Visual Studio Code时,只能短暂打开一秒钟,然后就会崩溃。当通过终端使用code --verbose命令启动Visual Studio Code时,出现以下错误信息:…...
【OpenGauss源码学习 —— (ALTER TABLE(SET attribute_option))】
ALTER TABLE(SET attribute_option) ATExecSetOptions 函数 声明:本文的部分内容参考了他人的文章。在编写过程中,我们尊重他人的知识产权和学术成果,力求遵循合理使用原则,并在适用的情况下注明引用来源。…...
Elasticsearch 数据提取 - 最适合这项工作的工具是什么?
作者:来自 Elastic Josh Asres 了解在 Elasticsearch 中为你的搜索用例提取数据的所有不同方式。 对于搜索用例,高效采集和处理来自各种来源的数据的能力至关重要。无论你处理的是 SQL 数据库、CRM 还是任何自定义数据源,选择正确的数据采集…...
‘浔川画板v5.1’即将上线!——浔川python社
1 简介: 浔川画板是一款专业的数字绘画和漫画创作软件,它为艺术家和设计师提供了丰富的绘画工具、色彩管理功能以及易于使用的界面。用户可以使用浔川画板进行手绘风格的绘画、精细的素描、漫画分格、UI设计等多种创作。该软件支持多种笔刷和特效&#…...
北京最新疫情情况/seo赚钱方法大揭秘
在我们实际使用 Elasticsearch 时,随着时间的推移,我们会发现有扩容的必要。这个可能由于我们在刚开始创建项目认识不足。我们需要更多的 primary shards,这样可以提高 ingest 的速度。那么我们有什么办法来把之前的一个大的索引变成更多的小…...
网站建设价格/青岛网络优化哪家专业
搬到了gipsyh.icu...
滨州正规网站建设价格/网络推广平台
地球人都知道,频率是移动通信系统(IMT)的最重要的资源,是血脉基础。运营商无时无刻不想获取“黄金”频率,有好的频率,事半功倍。对于广大通信从业者们,尤其是像小编这样研究5G终端的人ÿ…...
jira confluence做网站/自动收录网
导读:电脑是一种高科技产品,它能够给工作、生活带来极大的方便,同时还具有娱乐功能。它操作一点都不费力,特别适合中老年人的生理特点。经常使用电脑可以健脑增智。电脑的操作需要手眼的配合,人的手指内有丰富的神经&a…...
南宁网站建设索王道下拉/app营销策略有哪些
什么是PHP?PHP(外文名 Hypertext Preprocessor,中文名“超文本预处理器”)是一种通用开源脚本语言。语法吸收了C语言、Java和Perl的特点,利于学习,使用广泛,主要适用于Web开发领域。PHP 独特的语…...
杭州网站建设培训班/百度免费下载安装百度
JAVA方法和本地方法 原地址http://blog.sina.com.cn/s/blog_5b9b4abe01016zw0.html JAVA中有两种方法:JAVA方法和本地方法 JAVA方法是由JAVA编写的,编译成字节码,存储在class文件中本地方法是由其它语言编写的,编译成和处理器相关…...