GPTCache:LLM 应用必备的【省省省】利器
想提升大型语言模型(LLM)应用的性能?用 GPTCache。
想提升 LLM 应用性能的同时降低开销?还得用 GPTCache!
GPTCache 是 LLM 语义缓存层(caching layer),它采用语义缓存(semantic cache)[1] 技术,能够存储 LLM 响应,从而显著减少检索数据所需的时间、降低 API 调用开销、提升应用可扩展性。不仅如此,用户还可以通过定制个性化缓存规则并监控缓存性能,进一步优化 GPTCache 并提升效率。
总之,可以用三个词来概括:高效(省时间)、节约成本(省钱)、定制化(省劲儿)。接下来,我们将详细介绍 GPTCache 的功能以及如何物尽其用,最大程度地借助它实现性能、成本的最优化。
01. 用语义缓存来存储 LLM 响应的五大理由
我们在开篇已经介绍过,GPTCache 采用语义缓存技术来储存 LLM 响应。原因是什么?这背后有 5 个重点:
重点一,提升性能。将 LLM 响应存储在缓存中可以显著减少检索响应所需的时间。如果之前的请求已经存储在缓存中,能够更大幅度地降低响应时间,提高应用程序的整体性能。
重点二,节省开销。大多数 LLM 服务根据请求次数和令牌数(token count)收费。缓存 LLM 响应可以减少对服务 API 的调用次数,从而节省成本。尤其是在高流量场景下,缓存尤为重要。如果不使用语义缓存,可能会多次调用 API,产生极高的费用。
重点三,提高可扩展性。缓存 LLM 响应可以通过降低 LLM 服务的负载来提高整个应用的可扩展性。而语义缓存有助于避免系统瓶颈,确保应用可以处理更多请求。
重点四,定制个性化缓存规则。根据特定要求定制语义缓存规则(如:输入类型、输出格式或响应长度等)有助于提升缓存效率。
重点五,降低网络延迟。语义缓存更靠近客户端,可以减少从 LLM 服务检索数据所需的时间,降低网络延迟,从而有效提升用户的整体体验。
02.GPTCache 的前世今生
如果要追本溯源,GPTCache 的灵感其实来自 OSSChat [2]。在搭建 ChatGPT 的 demo 应用 OSSChat 时,我们发现随着时间的推移,OSSChat 出现性能逐步下降、服务费用不断增加的情况。为解决这些问题,需要引入一套缓存机制,在研发缓存层 GPTCache 时,我们的工程师意识到,这能够帮助到社区用户。所以,我们决定将其开源,为更多用户提供便利。
目前,GPTCache 已经能够通过缓存语言模型的响应,提高 GPT 应用的效率和速度。同时,GPTCache 也允许用户根据自己的需求自定义缓存规则,包括 embedding 函数、相似性计算方式、存储位置和存储逐出(eviction)规则等。此外,GPTCache 支持 OpenAI ChatGPT 接口和 LangChain 接口。
不同的 embedding 方式会影响 GPTCache 中相似性搜索的准确性和效率。为应对多样的应用场景,GPTCache 支持丰富的 embedding 方式。迄今为止,GPTCache 支持的用于提取 embedding 的 API 包括:
OpenAI embedding API ONNX with the GPTCache/paraphrase-albert-onnx model Hugging Face embedding API Cohere embedding API fastText embedding API SentenceTransformers embedding API 此外,GPTCache 还提供一个通用接口,同时支持多个 embedding API,这意味着用户可以根据自己的需求灵活选择最适合的 embedding API。
缓存存储(Cache Storage)
GPTCache 将 LLM 响应存储在各种数据库管理系统中。GPTCache 支持丰富的缓存存储数据库,用户可根据性能、可扩展性需求和成本预算,灵活选择最适合的数据库。GPTCache 支持的热门数据库包括:
SQLite PostgreSQL MySQL MariaDB SQL Server Oracle 此外,GPTCache 还提供一个通用接口,用于扩展模块,允许用户按需添加不同的数据库系统。
向量存储(Vector Store)
GPTCache 包含向量存储模块,向量存储模块会根据输入请求的 embedding 查找 top-K 最相似的请求。简而言之,该模块用于评估请求之间的相似性。GPTCache 的界面十分友好,提供丰富的向量存储数据库。选择不同的向量数据库会影响相似性检索的效率和准确性。目前,GPTCache 支持多个向量数据库,包括:
Milvus [3] Zilliz Cloud [4] FAISS 当然,我们也计划在未来支持更多其他的向量数据库。
逐出策略
GPTCache 中的缓存管理器(Cache Manager)控制 Cache Storage 和 Vector Store 模块的操作。缓存满后,缓存替换机制会决定淘汰哪些数据,为新数据腾出空间。GPTCache 目前支持以下两种标准逐出策略:
“最近最少使用” 逐出策略(Least Recently Used,LRU) “先进先出” 逐出策略(First In First Out,FIFO) 相似性评估
GPTCache 中的相似性评估模块从 Cache Storage 和 Vector Store 中收集数据,并使用各种策略来确定输入请求与来自 Vector Store 的请求之间的相似性,该模块用于确定某一请求是否与缓存匹配。
GPTCache 提供标准化接口,集成各种相似性计算方式。多样的的相似性计算方式能够灵活满足不同的需求和应用场景。GPTCache 根据其他用例和需求提供灵活性。
所以,还是那句话:想提升大型语言模型(LLM)应用的性能?用 GPTCache。想提升 LLM 应用性能的同时降低开销?还得用 GPTCache!
欢迎大家点击链接【https://github.com/zilliztech/GPTCache】使用 GPTCache 开源项目!同时,如果你对 GPTCache 有任何建议,也欢迎告诉我们或在 GPTCache 贡献代码 [5]!
【相关链接】
语义缓存(semantic cache):https://zilliz.com/glossary/semantic-cache
OSSChat:https://osschat.io/
Milvus:https://milvus.io/
Zilliz Cloud:https://zilliz.com/cloud
GPTCache 贡献代码:https://gptcache.readthedocs.io
评论