查看原文
其他

GPTCache:LLM 应用必备的【省省省】利器

为你省省省的 Zilliz 2023-07-28



想提升大型语言模型(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 API


不同的 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]


🌟【相关链接】🌟

[1]        

语义缓存(semantic cache):https://zilliz.com/glossary/semantic-cache

[2]        

OSSChat:https://osschat.io/

[3]        

Milvus:https://milvus.io/

[4]        

Zilliz Cloud:https://zilliz.com/cloud

[5]       

GPTCache 贡献代码:https://gptcache.readthedocs.io/en/latest/contributing.html

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存