解码 LangChain | LangChain + GPTCache =强强联合
上周我们邀请到了 LangChain 联合创始人 Harrison Chase 分享【如何用 LangChain 和 Milvus 进行检索】,Harrison 提到,多跳问题会给语义检索带来挑战,并提出可以试用 AI 代理工具解决。不过,频繁调用 LLM 会导致出现使用成本高昂的问题。
对此,Zilliz 软件工程师 Filip Haltmayer 指出,将 GPTCache 与 LangChain 集成,可以有效解决这一问题。
GPTCache 是一个用于存储 LLM 响应的语义缓存层。它可以为 LLM 相关应用构建相似语义缓存,当相似的问题请求多次出现时,可以直接从缓存中获取,在减少请求响应时间的同时也降低了 LLM 的使用成本。
本文为解码 LangChain 系列,将从 GPTCache 的适用场景出发,厘清 GPTCache 和 LangChain 集成的原理,并附赠集成教程。
GPTCache 的功能和原理
GPTCache 能做什么?
-
降低 LLM 使用费用:目前大多数LLM服务均通过请求token数进行计费,当请求使用缓存结果,自然降低请求次数,则减少了LLM使用成本;
-
性能优化:相比于大模型的推理时间,从缓存数据中获取时间将降低一个数量级;
-
兼容性强,适用于多种应用场景:GPTCache 提供多种 LLM 的镜像接口,只需修改 import 路径,即可缓存 LLM 请求;
-
改善LLM服务的可扩展性和可用性:目前 LLM 服务都有请求速率限制,达到这一限制则服务无法进行响应。如果对于相似的问题使用缓存答案,将有效缓解服务无法响应这一问题。
GPTCache 的推荐场景有哪些?
-
某一垂直领域的 LLM 相关应用,如法律、生物、医学等;
-
固定的 LLM 相关应用,如某公司内部或个人使用的 ChatBot;
-
开发的 LLM 应用在某些时间内的请求具有高度相似性,如节日祝福语模版等;
-
具有大用户群体的 LLM 应用,如果给用户群体进行分类,类似用户用同一缓存。
LangChain 的大型语言模型(LLM)是一种革命性的技术,允许开发人员构建许多在以前不可想象的应用。然而,仅依靠单个 LLM 就创建一整套应用是几乎不可能的。因此,我们需要将 LLM 与其他计算资源或知识源进行结合。 LangChain 就能帮助我们将 LLM 和其他知识相结合,从而开发出完美的应用。
LangChain 缓存分析
LangChain 的缓存方式
在学习如何集成 GPTCache 之前,我们先来看看 LangChain 是如何实现缓存的。事实上,LangChain 缓存是通过字符串匹配来实现的。也就是说,如果有两个请求字符串完全相同,那么收到后一个请求时,可以从缓存中检索出相应的数据。具体实现过程中使用了内存缓存(Memory Cache)、SQ Lite 缓存 (SQLite Cache)和 Redis 缓存(Redis Cache)。
LangChain 缓存的使用方法大致如下:
import langchain from langchain.cache import InMemoryCache langchain.llm_cache = InMemoryCache() llm = OpenAI(model_name="text-davinci-002", n=2, best_of=2) // CPU times: user 14.2 ms, sys: 4.9 ms, total: 19.1 ms // Wall time: 1.1 s llm("Tell me a joke") // CPU times: user 162 µs, sys: 7 µs, total: 169 µs // Wall time: 175 µs llm("Tell me a joke")
从运行角度来看,如果请求命中缓存,那么响应时间会显著缩短。不过,我们还需要思考另一个问题,即 LLM 高昂的使用成本问题。
我们都知道,使用 OpenAI 和 Cohere 等在线服务通常需要 token,部署相应的 LLM 模型也会产生费用。单次 LLM 推理(inference)时间取决于你的计算资源量,包括 CPU、内存、GPU 等。如果需要同时处理多个请求,对计算资源的要求就更高。如果请求多次命中缓存,则可以减少对计算机资源的压力,并合理地将更多的计算资源分配给其他任务。
LangChain 命中缓存的条件是两个问题必须完全相同。但是在实际使用中,这种情况十分罕见,因此很难命中缓存。这也意味着,我们还有很多空间可以用来提升缓存利用率,集成 GPTCache 就是方法之一。
集成 GPTCache
集成 GPTCache 能够显着提升 LangChain 缓存模块的功能,增加缓存命中率,从而降低 LLM 使用成本和响应时间。GPTCache 首先将输入的问题转化为 embedding 向量,随后 GPTCache 会在缓存中进行向量近似搜索。获取向量相似性检索的结果后,GPTCache 会执行相似性评估,并将达到设置阈值的结果作为最终返回结果。大家可以通过调整阈值来调节 GPTCache 模糊搜索结果的准确性。
以下示例中在 LangChain 中集成了 GPTCache,并使用了 GPTCache 进行向量相似性检索。
from gptcache import Cache from gptcache.adapter.api import init_similar_cache from langchain.cache import GPTCache import hashlib def get_hashed_name(name): return hashlib.sha256(name.encode()).hexdigest() def init_gptcache(cache_obj: Cache, llm: str): hashed_llm = get_hashed_name(llm) init_similar_cache(cache_obj=cache_obj, data_dir=f"similar_cache_{hashed_llm}") langchain.llm_cache = GPTCache(init_gptcache) # The first time, it is not yet in cache, so it should take longer # CPU times: user 1.42 s, sys: 279 ms, total: 1.7 s # Wall time: 8.44 s llm("Tell me a joke") # This is an exact match, so it finds it in the cache # CPU times: user 866 ms, sys: 20 ms, total: 886 ms # Wall time: 226 ms llm("Tell me a joke") # This is not an exact match, but semantically within distance so it hits! # CPU times: user 853 ms, sys: 14.8 ms, total: 868 ms # Wall time: 224 ms llm("Tell me joke")
以上就是关于 GPTCache 和 LangChain 集成的全部内容。大家如果想了解更多关于 LangChain 和 Milvus 集成的内容,可以阅读《LLMs 诸神之战:LangChain ,以【奥德赛】之名》。
预告一下,解码 LangChain 系列的下一篇将详解如何用 LangChain 和 Milvus 增强 LLM 应用,以及构建和优化 AIGC 应用的小秘籍,敬请期待!
(本文作者付邦系 Zilliz 软件工程师)
相关阅读:
- LLMs 诸神之战:LangChain ,以【奥德赛】之名
- LangChain 查询使用指「北」
- LangChain 联合创始人下场揭秘:如何用 LangChain 和向量数据库搞定语义搜索?
🌟「寻找 AIGC 时代的 CVP 实践之星」 专题活动即将启动!
Zilliz 将联合国内头部大模型厂商一同甄选应用场景, 由双方提供向量数据库与大模型顶级技术专家为用户赋能,一同打磨应用,提升落地效果,赋能业务本身。
如果你的应用也适合 CVP 框架,且正为应用落地和实际效果发愁,可直接申请参与活动,获得最专业的帮助和指导!联系邮箱为 business@zilliz.com。
-
如果在使用 Milvus 或 Zilliz 产品有任何问题,可添加小助手微信 “zilliz-tech” 加入交流群。
-
欢迎关注微信公众号“Zilliz”,了解最新资讯。

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
MySQL Schema 比较同步工具汇总(2023 版)
数据库 schema 比较工具使你能够识别关系数据库中对象结构的差异,并在多个数据库中同步你的特定对象。它通常用于以下情况: 将数据库变更从私有分支合并到团队的主分支 在同构数据库中保持 schema 一致性 构建新的数据库测试环境 根据应用需求将数据库 schema 变更部署到生产环境 在服务中断时排除数据库问题 根据 DB-Engines 排名报告,MySQL 是排名第一的开源数据库。在这篇文章中,我们将分析 MySQL 的 5 个 schema 比较工具。 MySQL Workbench MySQL Workbench 是 Oracle 公司用于 MySQL 开发的官方图形用户界面。它包括 schema 比较和同步工具。它使你能够比较和同步模型、数据库和 SQL 文件之间的 schema。这三种类型可以是目标、源或两者。下图显示源为模型,目标为数据库。 此外,MySQL Workbench允许 您创建一个报告,显示比较对象之间的目录差异,如下图所示。 它可在 Windows、Linux 和 Mac OS X 上使用。 dbForge Schema Compare for MySQ...
- 下一篇
高性能网络设计秘笈:深入剖析Linux网络IO与epoll
本文分享自华为云社区《高性能网络设计秘笈:深入剖析Linux网络IO与epoll》,作者: Lion Long 。 一、epoll简介 epoll是Linux内核中一种可扩展的IO事件处理机制,可替代select和poll的系统调用。处理百万级并发访问性能更佳。 二、select的局限性 (1)文件描述符越多,性能越差。单个进程中能够监视的文件描述符存在最大的数量,默认是1024(在linux内核头文件中定义有 #define _FD_SETSIZE 1024),当然也可以修改,但是文件描述符数量越多,性能越差。 (2)开销巨大,select需要复制大量的句柄数据结构,产生了巨大的开销(内核/用户空间内存拷贝问题)。 (3)select需要遍历整个句柄数组才能知道哪些句柄有事件。 (4)如果没有完成对一个已经就绪的文件描述符的IO操作,那么每次调用select还是会将这些文件描述符通知进程,即水平触发。 (5)poll使用链表保存监视的文件描述符,虽然没有了监视文件数量的限制,但是其他缺点依旧存在。 由于以上缺点,基于select模型的服务器程序,要达到十万以上的并发访问,是很难完成的...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- Red5直播服务器,属于Java语言的直播服务器
- CentOS7设置SWAP分区,小内存服务器的救世主
- CentOS7安装Docker,走上虚拟化容器引擎之路
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
- CentOS关闭SELinux安全模块
- CentOS7,CentOS8安装Elasticsearch6.8.6
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- Linux系统CentOS6、CentOS7手动修改IP地址