GPTCache介绍
ChatGPT和其他大型言语模型(LLM)具有令人难以置信的多功用性,可用于广泛的应用程序开发。但是,随着对应开发的应用程序受欢迎程度的进步和流量级别的添加,与LLM API调用相关的费用可能会变得非常高昂。此外,当处理很多恳求时,LLM服务可能会表现出缓慢的呼应时刻。
为了应对这一应战,咱们创立了GPTCache项目,该项目致力于构建用于存储LLM呼应的语义缓存。
LangChain 介绍
大型言语模型 (LLM) 正在成为一种变革性技术,使开发人员能够构建曾经无法完成的应用程序。但是,只是依靠单个 LLM 往往难以创立一个真实强壮的应用程序。真实的力气在于将它们与其他核算或知识来源相结合。因而,LangChain这个库旨在协助开发这些类型的应用程序。
LangChain 缓存现状
在接入GPTCache之前,LangChain的缓存是基于字符串匹配完成,也就是只有当字符完全一致的两个恳求,后者从缓存中取得相应的数据,其完成包含了:Memory Cache
, SQLite Cache
, Redis Cache
。
用法大致如下:
importlangchain
fromlangchain.cacheimportInMemoryCache
langchain.llm_cache=InMemoryCache()
llm=OpenAI(model_name="text-davinci-002",n=2,best_of=2)
//CPUtimes:user14.2ms,sys:4.9ms,total:19.1ms
//Walltime:1.1s
llm("Tellmeajoke")
//CPUtimes:user162s,sys:7s,total:169s
//Walltime:175s
llm("Tellmeajoke")
LangChain 缓存分析
从运转时刻时刻角度,能够明晰看出假如恳求射中缓存,将大幅度削减恳求呼应时刻。一起现在LLM的运用本钱仍是相对较高的,运用在线服务,如OpenAI、Cohere等,一般经过token进行计费;或者自己部署呼应的LLM模型,其一次推理耗时取决于核算机资源多少,包含CPU、内存、GPU等,一起假如并发进行多个恳求处理,对于核算资源则有更高的要求。假如恳求能够屡次射中缓存,则能够有效削减核算机资源压力,一起也能够给其他任务更多的核算机资源。
LangChain射中缓存的条件是,必须是完全相同的两个问题,在实际运用过程,要射中缓存仍是有必定难度,其缓存利用率有比较大的进步空间。
GPTCache 接入
GPTCache的接入,将能够很好的完善LangChain缓存模块的功用,进步缓存射中率,然后降低LLM运用本钱和呼应时刻。因为GPTCache会先讲输入进行embedding操作,得到向量后,然后在Cache存储中进行向量近似查找,得到查找成果后进行相似评估,达到设定阈值后在进行回来。能够经过调理阈值,改变其模糊查找成果的精确度。
LangChain中运用GPTCache的相似查找比如:
i=0
file_prefix="data_map"
llm_cache=Cache()
definit_gptcache_map(cache_obj:gptcache.Cache):
globali
onnx=Onnx()
cache_base=CacheBase('sqlite',sql_url=f'sqlite:///./sqlite_{i}.db')
vector_base=VectorBase('faiss',dimension=onnx.dimension,index_path=f'faiss_{i}.index')
data_manager=get_data_manager(cache_base,vector_base)
cache_obj.init(
pre_embedding_func=get_prompt,
embedding_func=onnx.to_embeddings,
data_manager=data_manager,
similarity_evaluation=SearchDistanceEvaluation(),
)
i+=1
langchain.llm_cache=GPTCache(init_gptcache_map)
# CPU times: user 1.01 s, sys: 153 ms, total: 1.16 s
# Wall time: 2.49 s
llm("Tellmeajoke")
#Thisisnotanexactmatch,butsemanticallywithindistancesoithits!
#CPUtimes:user737ms,sys:7.79ms,total:745ms
# Walltime:135ms
llm("Tellmejoke")
参阅链接:
- LangChain, How to cache LLM calls
- GPTCache Usage Doc