解码 LangChain | LangChain + GPTCache =兼具低成本与高性能的 LLM

本文涉及的产品
阿里云百炼推荐规格 ADB PostgreSQL,4核16GB 100GB 1个月
简介: GPTCache 是一个用于存储 LLM 响应的语义缓存层。它可以为 LLM 相关应用构建相似语义缓存,当相似的问题请求多次出现时,可以直接从缓存中获取,在减少请求响应时间的同时也降低了 LLM 的使用成本。

LangChain 联合创始人 Harrison Chase 提到,多跳问题会给语义检索带来挑战,并提出可以试用 AI 代理工具解决。不过,频繁调用 LLM 会导致出现使用成本高昂的问题。

对此,Zilliz 软件工程师 Filip Haltmayer 指出,将 GPTCache 与 LangChain 集成,可以有效解决这一问题。

GPTCache 是一个用于存储 LLM 响应的语义缓存层。它可以为 LLM 相关应用构建相似语义缓存,当相似的问题请求多次出现时,可以直接从缓存中获取,在减少请求响应时间的同时也降低了 LLM 的使用成本。

本文为解码 LangChain 系列,将从 GPTCache 的适用场景出发,厘清 GPTCache 和 LangChain 集成的原理,并附赠集成教程。

01. GPTCache 的功能和原理

GPTCache 能做什么?

  • 降低 LLM 使用费用:目前大多数LLM服务均通过请求token数进行计费,当请求使用缓存结果,自然降低请求次数,则减少了LLM使用成本;

  • 性能优化:相比于大模型的推理时间,从缓存数据中获取时间将降低一个数量级;

  • 兼容性强,适用于多种应用场景:GPTCache 提供多种 LLM 的镜像接口,只需修改 import 路径,即可缓存 LLM 请求;

  • 改善LLM服务的可扩展性和可用性:目前 LLM 服务都有请求速率限制,达到这一限制则服务无法进行响应。如果对于相似的问题使用缓存答案,将有效缓解服务无法响应这一问题。

GPTCache 的推荐场景有哪些?

  • 某一垂直领域的 LLM 相关应用,如法律、生物、医学等;

  • 固定的 LLM 相关应用,如某公司内部或个人使用的 ChatBot;

  • 开发的 LLM 应用在某些时间内的请求具有高度相似性,如节日祝福语模版等;

  • 具有大用户群体的 LLM 应用,如果给用户群体进行分类,类似用户用同一缓存。

LangChain 的大型语言模型(LLM)是一种革命性的技术,允许开发人员构建许多在以前不可想象的应用。然而,仅依靠单个 LLM 就创建一整套应用是几乎不可能的。因此,我们需要将 LLM 与其他计算资源或知识源进行结合。 LangChain 就能帮助我们将 LLM 和其他知识相结合,从而开发出完美的应用。

02. 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 就是方法之一。

03. 集成 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 集成的全部内容。

如果在使用 Milvus 或 Zilliz 产品有任何问题,可添加小助手微信 “zilliz-tech” 加入交流群。

相关实践学习
阿里云百炼xAnalyticDB PostgreSQL构建AIGC应用
通过该实验体验在阿里云百炼中构建企业专属知识库构建及应用全流程。同时体验使用ADB-PG向量检索引擎提供专属安全存储,保障企业数据隐私安全。
AnalyticDB PostgreSQL 企业智能数据中台:一站式管理数据服务资产
企业在数据仓库之上可构建丰富的数据服务用以支持数据应用及业务场景;ADB PG推出全新企业智能数据平台,用以帮助用户一站式的管理企业数据服务资产,包括创建, 管理,探索, 监控等; 助力企业在现有平台之上快速构建起数据服务资产体系
目录
相关文章
|
1月前
|
前端开发 机器人 API
前端大模型入门(一):用 js+langchain 构建基于 LLM 的应用
本文介绍了大语言模型(LLM)的HTTP API流式调用机制及其在前端的实现方法。通过流式调用,服务器可以逐步发送生成的文本内容,前端则实时处理并展示这些数据块,从而提升用户体验和实时性。文章详细讲解了如何使用`fetch`发起流式请求、处理响应流数据、逐步更新界面、处理中断和错误,以及优化用户交互。流式调用特别适用于聊天机器人、搜索建议等应用场景,能够显著减少用户的等待时间,增强交互性。
322 2
|
23天前
|
JSON 数据可视化 NoSQL
基于LLM Graph Transformer的知识图谱构建技术研究:LangChain框架下转换机制实践
本文介绍了LangChain的LLM Graph Transformer框架,探讨了文本到图谱转换的双模式实现机制。基于工具的模式利用结构化输出和函数调用,简化了提示工程并支持属性提取;基于提示的模式则为不支持工具调用的模型提供了备选方案。通过精确定义图谱模式(包括节点类型、关系类型及其约束),显著提升了提取结果的一致性和可靠性。LLM Graph Transformer为非结构化数据的结构化表示提供了可靠的技术方案,支持RAG应用和复杂查询处理。
76 2
基于LLM Graph Transformer的知识图谱构建技术研究:LangChain框架下转换机制实践
|
4月前
|
自然语言处理 API 开发工具
初识langchain:LLM大模型+Langchain实战[qwen2.1、GLM-4]+Prompt工程
【7月更文挑战第6天】初识langchain:LLM大模型+Langchain实战[qwen2.1、GLM-4]+Prompt工程
初识langchain:LLM大模型+Langchain实战[qwen2.1、GLM-4]+Prompt工程
|
5月前
|
存储 人工智能 自然语言处理
LangChain让LLM带上记忆
最近两年,我们见识了“百模大战”,领略到了大型语言模型(LLM)的风采,但它们也存在一个显著的缺陷:没有记忆。在对话中,无法记住上下文的 LLM 常常会让用户感到困扰。本文探讨如何利用 LangChain,快速为 LLM 添加记忆能力,提升对话体验。
49828 7
LangChain让LLM带上记忆
|
3月前
|
JSON Go 数据格式
langchain 入门指南 - 让 LLM 自动选择不同的 Prompt
langchain 入门指南 - 让 LLM 自动选择不同的 Prompt
94 0
|
5月前
|
存储 人工智能 机器人
LangChain结合LLM做私有化文档搜索
我们知道LLM(大语言模型)的底模是基于已经过期的公开数据训练出来的,对于新的知识或者私有化的数据LLM一般无法作答,此时LLM会出现“幻觉”。针对“幻觉”问题,一般的解决方案是采用RAG做检索增强。
LangChain结合LLM做私有化文档搜索
|
6月前
|
机器学习/深度学习 人工智能
【LangChain系列】第九篇:LLM 应用评估简介及实践
【5月更文挑战第23天】本文探讨了如何评估复杂且精密的语言模型(LLMs)应用。通过创建QA应用程序,如使用GPT-3.5-Turbo模型,然后构建测试数据,包括手动创建和使用LLM生成示例。接着,通过手动评估、调试及LLM辅助评估来衡量性能。手动评估借助langchain.debug工具提供执行细节,而QAEvalChain则利用LLM的语义理解能力进行评分。这些方法有助于优化和提升LLM应用程序的准确性和效率。
561 8
|
6月前
|
Shell Android开发
Android系统 adb shell push/pull 禁止特定文件
Android系统 adb shell push/pull 禁止特定文件
557 1
|
6月前
|
Android开发 Python
Python封装ADB获取Android设备wifi地址的方法
Python封装ADB获取Android设备wifi地址的方法
153 0
|
3月前
|
Shell Linux 开发工具
"开发者的救星:揭秘如何用adb神器征服Android设备,开启高效调试之旅!"
【8月更文挑战第20天】Android Debug Bridge (adb) 是 Android 开发者必备工具,用于实现计算机与 Android 设备间通讯,执行调试及命令操作。adb 提供了丰富的命令行接口,覆盖从基础设备管理到复杂系统操作的需求。本文详细介绍 adb 的安装配置流程,并列举实用命令示例,包括设备连接管理、应用安装调试、文件系统访问等基础功能,以及端口转发、日志查看等高级技巧。此外,还提供了常见问题的故障排除指南,帮助开发者快速解决问题。掌握 adb 将极大提升 Android 开发效率,助力项目顺利推进。
92 0

热门文章

最新文章

下一篇
无影云桌面