GPTCache 是一个面向大型语言模型(LLM)应用(如 ChatGPT)的开源框架。它会为相似的查询存储先前生成的 LLM 回复。应用程序无需每次都依赖 LLM,而是先检查缓存中是否有相关回复,从而为您节省时间。
本指南将介绍 GPTCache 的工作原理,以及如何在项目中高效使用它。
什么是 GPTCache?
GPTCache 是一个用于提升 大型语言模型(LLM) (如 GPT-3)性能与效率的缓存系统。它帮助 LLM 存储先前生成的查询与结果,以节省时间和资源。
当再次出现相似的查询时,LLM 可以直接调取缓存的回复,而无需从头生成。
与其他工具不同,GPTCache 采用语义缓存。语义缓存会保留查询/请求的意图。因此,当调用先前存储的查询时,其结果能够降低服务器负载并提高缓存命中率。
使用 GPTCache 的优势
GPTCache 的核心思想是在 LLM 推理过程中存储并复用中间计算结果。这样做有多方面好处:
降低 LLM API 调用成本
大多数 LLM 会基于处理的 token 数量按请求收费。这时 GPTCache 就派上用场了。它通过为相似查询返回先前生成的回复,减少 LLM API 调用次数,从而降低额外的 LLM 调用开销。
提升响应速度与效率
从缓存检索回复远比通过查询 LLM 从零生成要快得多。这能显著提升速度与响应时间。高效的回复也能减轻 LLM 本身的负担,为其他任务释放资源。
以更快的应用性能提升用户体验
假设您在为内容搜集问题。您提出的每个问题,AI 都要很久才回答。为什么?因为多数 LLM 服务在固定时间内会实施请求频控。超过限额后会阻塞后续请求,直到限额重置,导致服务中断。
ChatGPT 可能会达到响应生成上限
为避免这些问题,GPTchache 会缓存相似问题的先前答案。当您再次提问时,它会快速查询记忆,并瞬间给出信息。结果就是,您获得回复所需的时间大幅缩短。
简而言之,借助缓存回复,GPTCache 让基于 LLM 的应用变得更灵敏高效——正如您对任何现代工具的期望。
设置 GPTCache
您可以按如下方式直接安装 GPTCache:
安装与配置
使用以下代码安装 GPTCache 包。
! pip install - q gptcache技术支持
接下来,将 GPTCache 导入到您的应用中。
from gptcache import GPTCache
cache = GPTCache( )
技术支持
就这么简单,您已完成!
与 LLM 集成
您可以通过其 LLM Adapter 将 GPTCache 集成到 LLM 中。目前,它仅兼容两种大型语言模型适配器:
以下是与这两种适配器的集成方式:
将 GPTCache 与 OpenAI ChatGPT API 集成
要与 OpenAI 集成,先初始化缓存并从 gptcache.adapter 导入 openai。
from gptcache import cache
from gptcache. adapter import openai
cache. init( )
cache. set_openai_key( )
技术支持
在运行示例代码前,请通过执行 echo $OPENAI_API_KEY 来设置 OPENAI_API_KEY 环境变量。
如果尚未设置,您可以在 Unix/Linux/MacOS 系统上使用 export OPENAI_API_KEY=YOUR_API_KEY,或在 Windows 系统上使用 set OPENAI_API_KEY=YOUR_API_KEY 进行设置。
然后,如果您连续提出两个完全相同的问题,第二次的答案将直接从缓存中获取,而无需再次请求 ChatGPT。
以下是相似搜索缓存的示例代码:
import time
def response_text ( openai_resp) :
return openai_resp[ 'choices' ] [ 0 ] [ 'message' ] [ 'content' ]
print ( "Cache loading....." )
from gptcache import cache
from gptcache. adapter import openai
cache. init( )
cache. set_openai_key( )
question = "what's github"
for _ in range ( 2 ) :
start_time = time. time( )
response = openai. ChatCompletion. create(
model= 'gpt-3.5-turbo' ,
messages= [
{
'role' : 'user' ,
'content' : question
}
] ,
)
print ( f'Question: { question} ' )
print ( "Time consuming: {:.2f}s" . format ( time. time( ) - start_time) )
print ( f'Answer: { response_text( response) } \n' ) 技术支持
输出结果将类似如下:
第二次提问时,GPT 几乎在 0 秒内就回答了相同的问题
将 GPTCache 与 LangChain 集成
如果您想使用不同的 LLM,可以尝试 LangChain 适配器。以下是将 GPTCahe 与 LangChain 集成的方法:
from langchain. globals import set_llm_cache
from langchain_openai import OpenAI
llm = OpenAI( model_name= "gpt-3.5-turbo-instruct" , n= 2 , best_of= 2 ) 技术支持
了解如何 使用 Langchain 构建 LLM 应用 。
在项目中使用 GPTCache
下面看看 GPTCache 如何助力您的项目。
基础操作
由于查询本身的复杂性与多样性,LLM 的缓存命中率可能较低,进而影响效果。
为克服这一限制,GPTCache 采用语义缓存策略。语义缓存会存储相似或相关的查询——从而提高命中概率并增强整体缓存效率。
GPTCache 利用嵌入算法将查询转换为称为 嵌入(embeddings) 的数值表示。这些嵌入存储在向量库中,以支持高效的相似度检索。该过程使 GPTCache 能够从缓存中识别并调取相似或相关的查询。
凭借模块化设计,您可以根据需求自定义语义缓存的实现。
不过——语义缓存中有时会出现误命中与漏命中。为监控其表现,GPTCache 提供了三项性能指标:
命中率 衡量缓存满足请求的成功率,数值越高,性能越好。
延迟 表示从缓存检索数据所需时间,越低越好。
召回率 显示正确服务的缓存查询所占比例,百分比越高,准确性越好。
高级功能
初始查询、提示、回复与访问时间戳等所有基础数据元素都存储在“数据管理器”中。GPTCache 目前支持以下缓存存储选项:
SQLite
MySQL
PostgreSQL 数据库。
目前尚不支持 “NoSQL” 数据库,但计划尽快加入。
使用淘汰策略
此外,GPTCache 可根据指定的限制或数量从缓存中移除数据。为管理缓存大小,您可以采用最近最少使用(LRU)淘汰策略或先进先出(FIFO)策略。
LRU 淘汰策略 会移除最近最少访问的条目。
而 FIFO 淘汰策略 则丢弃在缓存中存在时间最长的条目。
评估回复表现
GPTCache 使用“评估”函数判断缓存回复是否解决了用户查询。为此,它接收三个输入:
用户的数据请求
被评估的缓存数据
用户定义的参数(如有)
您还可以使用另外两个函数:
log_time_func 用于记录并报告生成“嵌入 ”或执行缓存“搜索 ”等密集型任务的耗时,有助于监控性能特征。
通过 similarity_threshold ,您可以定义在判断两条嵌入向量(文本数据的高维表示 )足够相似以匹配时所用的阈值。
GPTCache 的最佳实践与故障排除
了解了 GPTCache 的工作机制后,以下是一些最佳实践与提示,帮助您充分发挥其优势。
优化 GPTCache 性能
您可以通过以下措施优化 GPTCache 的性能。
1. 明确您的提示词
您向 LLM 提示的方式会影响 GPTCache 的效果。因此请保持表述一致,以提升命中的可能性。
例如,使用一致的表述,如 “I can't log in to my account.”。这样,GPTCache 更容易高效识别类似问题,如 “Forgot my password” 或 “Account login problems”。
2. 使用内置跟踪指标
监控命中率、召回率和延迟等内置指标,以分析缓存性能。较高的命中率意味着缓存更有效地从已存数据中服务所请求的内容,帮助您评估其有效性。
3. 为拥有大量用户的 LLM 应用扩展 GPTCache
要为更大型的 LLM 应用扩展 GPTCache,可实施共享缓存策略,让具有相似画像的用户群使用同一缓存。创建用户画像并对其分类,以识别相似的用户群体。
对相同画像组的用户使用共享缓存,能在缓存效率与可扩展性方面取得良好成效。
原因在于同一画像组的用户往往会有相关的查询,能够从缓存回复中受益。不过,您需要采用合适的用户画像与分类技术,准确分组用户,最大化共享缓存的收益。
常见 GPTCache 问题的排查
如果您在使用 GPTCache 时遇到问题,可参考以下步骤进行排查。
1. 缓存失效
GPTCache 依赖最新的缓存回复。如果底层 LLM 的回复或用户意图随着时间发生变化,缓存的回复可能变得不准确或不相关。
为避免这种情况,请根据 LLM 预期的更新频率为缓存条目设置过期时间,并定期刷新缓存。
2. 过度依赖缓存回复
虽然 GPTCache 能提升效率,但若未正确进行缓存失效管理,过度依赖缓存可能导致信息不准确。
为此,请确保您的应用即便在相似查询的情况下,也会不时从 LLM 获取新鲜回复。这样在处理关键或时效性信息时,能够保持回复的准确性与质量。
3. 忽视缓存质量
缓存回复的质量与相关性会直接影响用户体验。因此,在将缓存回复返回给用户之前,应使用评估指标来衡量其质量。
理解这些潜在问题及其解决方案后,您就能在不牺牲准确性或用户体验的前提下,确保 GPTCache 有效提升 LLM 应用的性能与成本效率。
总结
GPTCache 是优化 LLM 应用性能与成本效率的强大工具。要获得准确且相关的回复,需要进行合理的配置、监控与缓存评估策略。
如果您刚接触 LLM,以下资源或许有帮助:
GPTCache 是一个面向大型语言模型(LLM)应用(如 ChatGPT)的开源框架。它会为相似的查询存储先前生成的 LLM 回复。应用程序无需每次都依赖 LLM,而是先检查缓存中是否有相关回复,从而为您节省时间。
本指南将介绍 GPTCache 的工作原理,以及如何在项目中高效使用它。
什么是 GPTCache?
GPTCache 是一个用于提升 大型语言模型(LLM)(如 GPT-3)性能与效率的缓存系统。它帮助 LLM 存储先前生成的查询与结果,以节省时间和资源。
当再次出现相似的查询时,LLM 可以直接调取缓存的回复,而无需从头生成。
与其他工具不同,GPTCache 采用语义缓存。语义缓存会保留查询/请求的意图。因此,当调用先前存储的查询时,其结果能够降低服务器负载并提高缓存命中率。
使用 GPTCache 的优势
GPTCache 的核心思想是在 LLM 推理过程中存储并复用中间计算结果。这样做有多方面好处:
降低 LLM API 调用成本
大多数 LLM 会基于处理的 token 数量按请求收费。这时 GPTCache 就派上用场了。它通过为相似查询返回先前生成的回复,减少 LLM API 调用次数,从而降低额外的 LLM 调用开销。
提升响应速度与效率
从缓存检索回复远比通过查询 LLM 从零生成要快得多。这能显著提升速度与响应时间。高效的回复也能减轻 LLM 本身的负担,为其他任务释放资源。
以更快的应用性能提升用户体验
假设您在为内容搜集问题。您提出的每个问题,AI 都要很久才回答。为什么?因为多数 LLM 服务在固定时间内会实施请求频控。超过限额后会阻塞后续请求,直到限额重置,导致服务中断。
ChatGPT 可能会达到响应生成上限
为避免这些问题,GPTchache 会缓存相似问题的先前答案。当您再次提问时,它会快速查询记忆,并瞬间给出信息。结果就是,您获得回复所需的时间大幅缩短。
简而言之,借助缓存回复,GPTCache 让基于 LLM 的应用变得更灵敏高效——正如您对任何现代工具的期望。
设置 GPTCache
您可以按如下方式直接安装 GPTCache:
安装与配置
使用以下代码安装 GPTCache 包。
接下来,将 GPTCache 导入到您的应用中。
就这么简单,您已完成!
与 LLM 集成
您可以通过其 LLM Adapter 将 GPTCache 集成到 LLM 中。目前,它仅兼容两种大型语言模型适配器:
以下是与这两种适配器的集成方式:
将 GPTCache 与 OpenAI ChatGPT API 集成
要与 OpenAI 集成,先初始化缓存并从
gptcache.adapter导入openai。在运行示例代码前,请通过执行 echo
$OPENAI_API_KEY来设置OPENAI_API_KEY环境变量。如果尚未设置,您可以在 Unix/Linux/MacOS 系统上使用 export
OPENAI_API_KEY=YOUR_API_KEY,或在 Windows 系统上使用set OPENAI_API_KEY=YOUR_API_KEY进行设置。然后,如果您连续提出两个完全相同的问题,第二次的答案将直接从缓存中获取,而无需再次请求 ChatGPT。
以下是相似搜索缓存的示例代码:
输出结果将类似如下:
第二次提问时,GPT 几乎在 0 秒内就回答了相同的问题
将 GPTCache 与 LangChain 集成
如果您想使用不同的 LLM,可以尝试 LangChain 适配器。以下是将 GPTCahe 与 LangChain 集成的方法:
了解如何 使用 Langchain 构建 LLM 应用。
在项目中使用 GPTCache
下面看看 GPTCache 如何助力您的项目。
基础操作
由于查询本身的复杂性与多样性,LLM 的缓存命中率可能较低,进而影响效果。
为克服这一限制,GPTCache 采用语义缓存策略。语义缓存会存储相似或相关的查询——从而提高命中概率并增强整体缓存效率。
GPTCache 利用嵌入算法将查询转换为称为 嵌入(embeddings) 的数值表示。这些嵌入存储在向量库中,以支持高效的相似度检索。该过程使 GPTCache 能够从缓存中识别并调取相似或相关的查询。
凭借模块化设计,您可以根据需求自定义语义缓存的实现。
不过——语义缓存中有时会出现误命中与漏命中。为监控其表现,GPTCache 提供了三项性能指标:
高级功能
初始查询、提示、回复与访问时间戳等所有基础数据元素都存储在“数据管理器”中。GPTCache 目前支持以下缓存存储选项:
目前尚不支持 “NoSQL” 数据库,但计划尽快加入。
使用淘汰策略
此外,GPTCache 可根据指定的限制或数量从缓存中移除数据。为管理缓存大小,您可以采用最近最少使用(LRU)淘汰策略或先进先出(FIFO)策略。
评估回复表现
GPTCache 使用“评估”函数判断缓存回复是否解决了用户查询。为此,它接收三个输入:
您还可以使用另外两个函数:
GPTCache 的最佳实践与故障排除
了解了 GPTCache 的工作机制后,以下是一些最佳实践与提示,帮助您充分发挥其优势。
优化 GPTCache 性能
您可以通过以下措施优化 GPTCache 的性能。
1. 明确您的提示词
您向 LLM 提示的方式会影响 GPTCache 的效果。因此请保持表述一致,以提升命中的可能性。
例如,使用一致的表述,如 “I can't log in to my account.”。这样,GPTCache 更容易高效识别类似问题,如 “Forgot my password” 或 “Account login problems”。
2. 使用内置跟踪指标
监控命中率、召回率和延迟等内置指标,以分析缓存性能。较高的命中率意味着缓存更有效地从已存数据中服务所请求的内容,帮助您评估其有效性。
3. 为拥有大量用户的 LLM 应用扩展 GPTCache
要为更大型的 LLM 应用扩展 GPTCache,可实施共享缓存策略,让具有相似画像的用户群使用同一缓存。创建用户画像并对其分类,以识别相似的用户群体。
对相同画像组的用户使用共享缓存,能在缓存效率与可扩展性方面取得良好成效。
原因在于同一画像组的用户往往会有相关的查询,能够从缓存回复中受益。不过,您需要采用合适的用户画像与分类技术,准确分组用户,最大化共享缓存的收益。
常见 GPTCache 问题的排查
如果您在使用 GPTCache 时遇到问题,可参考以下步骤进行排查。
1. 缓存失效
GPTCache 依赖最新的缓存回复。如果底层 LLM 的回复或用户意图随着时间发生变化,缓存的回复可能变得不准确或不相关。
为避免这种情况,请根据 LLM 预期的更新频率为缓存条目设置过期时间,并定期刷新缓存。
2. 过度依赖缓存回复
虽然 GPTCache 能提升效率,但若未正确进行缓存失效管理,过度依赖缓存可能导致信息不准确。
为此,请确保您的应用即便在相似查询的情况下,也会不时从 LLM 获取新鲜回复。这样在处理关键或时效性信息时,能够保持回复的准确性与质量。
3. 忽视缓存质量
缓存回复的质量与相关性会直接影响用户体验。因此,在将缓存回复返回给用户之前,应使用评估指标来衡量其质量。
理解这些潜在问题及其解决方案后,您就能在不牺牲准确性或用户体验的前提下,确保 GPTCache 有效提升 LLM 应用的性能与成本效率。
总结
GPTCache 是优化 LLM 应用性能与成本效率的强大工具。要获得准确且相关的回复,需要进行合理的配置、监控与缓存评估策略。
如果您刚接触 LLM,以下资源或许有帮助: