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 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