解码 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” 加入交流群。

相关实践学习
AnalyticDB PostgreSQL 企业智能数据中台:一站式管理数据服务资产
企业在数据仓库之上可构建丰富的数据服务用以支持数据应用及业务场景;ADB PG推出全新企业智能数据平台,用以帮助用户一站式的管理企业数据服务资产,包括创建, 管理,探索, 监控等; 助力企业在现有平台之上快速构建起数据服务资产体系
目录
相关文章
|
11月前
|
前端开发 机器人 API
前端大模型入门(一):用 js+langchain 构建基于 LLM 的应用
本文介绍了大语言模型(LLM)的HTTP API流式调用机制及其在前端的实现方法。通过流式调用,服务器可以逐步发送生成的文本内容,前端则实时处理并展示这些数据块,从而提升用户体验和实时性。文章详细讲解了如何使用`fetch`发起流式请求、处理响应流数据、逐步更新界面、处理中断和错误,以及优化用户交互。流式调用特别适用于聊天机器人、搜索建议等应用场景,能够显著减少用户的等待时间,增强交互性。
2958 2
|
2月前
|
缓存 异构计算 Docker
构建高性能LLM推理服务的完整方案:单GPU处理172个查询/秒、10万并发仅需15美元/小时
本文将通过系统性实验不同的优化技术来构建自定义LLaMA模型服务,目标是高效处理约102,000个并行查询请求,并通过对比分析确定最优解决方案。
141 0
构建高性能LLM推理服务的完整方案:单GPU处理172个查询/秒、10万并发仅需15美元/小时
|
5月前
|
存储 人工智能 监控
通过Milvus和Langchain快速构建基于百炼大模型的LLM问答系统
阿里云向量检索服务Milvus版是一款全托管向量检索引擎,并确保与开源Milvus的完全兼容性,支持无缝迁移。它在开源版本的基础上增强了可扩展性,能提供大规模AI向量数据的相似性检索服务。凭借其开箱即用的特性、灵活的扩展能力和全链路监控告警,Milvus云服务成为多样化AI应用场景的理想选择,包括多模态搜索、检索增强生成(RAG)、搜索推荐、内容风险识别等。您还可以利用开源的Attu工具进行可视化操作,进一步促进应用的快速开发和部署。
|
8月前
|
存储 缓存 人工智能
深度解析CPFS 在 LLM 场景下的高性能存储技术
本文深入探讨了CPFS在大语言模型(LLM)训练中的端到端性能优化策略,涵盖计算端缓存加速、智能网卡加速、数据并行访问及数据流优化等方面。重点分析了大模型对存储系统的挑战,包括计算规模扩大、算力多样性及数据集增长带来的压力。通过分布式P2P读缓存、IO加速、高性能存算通路技术以及智能数据管理等手段,显著提升了存储系统的吞吐量和响应速度,有效提高了GPU利用率,降低了延迟,从而加速了大模型的训练进程。总结了CPFS在AI训练场景中的创新与优化实践,为未来大模型发展提供了有力支持。
|
9月前
|
弹性计算 自然语言处理 数据库
通过阿里云Milvus和LangChain快速构建LLM问答系统
本文介绍如何通过整合阿里云Milvus、阿里云DashScope Embedding模型与阿里云PAI(EAS)模型服务,构建一个由LLM(大型语言模型)驱动的问题解答应用,并着重演示了如何搭建基于这些技术的RAG对话系统。
|
10月前
|
JSON 数据可视化 NoSQL
基于LLM Graph Transformer的知识图谱构建技术研究:LangChain框架下转换机制实践
本文介绍了LangChain的LLM Graph Transformer框架,探讨了文本到图谱转换的双模式实现机制。基于工具的模式利用结构化输出和函数调用,简化了提示工程并支持属性提取;基于提示的模式则为不支持工具调用的模型提供了备选方案。通过精确定义图谱模式(包括节点类型、关系类型及其约束),显著提升了提取结果的一致性和可靠性。LLM Graph Transformer为非结构化数据的结构化表示提供了可靠的技术方案,支持RAG应用和复杂查询处理。
604 2
基于LLM Graph Transformer的知识图谱构建技术研究:LangChain框架下转换机制实践
|
自然语言处理 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工程
|
JSON Go 数据格式
langchain 入门指南 - 让 LLM 自动选择不同的 Prompt
langchain 入门指南 - 让 LLM 自动选择不同的 Prompt
381 0
|
5月前
|
机器学习/深度学习 存储 缓存
加速LLM大模型推理,KV缓存技术详解与PyTorch实现
大型语言模型(LLM)的推理效率是AI领域的重要挑战。本文聚焦KV缓存技术,通过存储复用注意力机制中的Key和Value张量,减少冗余计算,显著提升推理效率。文章从理论到实践,详细解析KV缓存原理、实现与性能优势,并提供PyTorch代码示例。实验表明,该技术在长序列生成中可将推理时间降低近60%,为大模型优化提供了有效方案。
857 15
加速LLM大模型推理,KV缓存技术详解与PyTorch实现
|
3月前
|
机器学习/深度学习 自然语言处理 算法
万字长文详解|DLRover LLM Agent:大模型驱动的高效集群资源调优
本文介绍了DLRover LLM Agent,展示了基于 LLM 上下文学习能力的优化算法设计理念以及在DLRover 资源调优上的应用方法和效果。