GPTCache介绍

释放双眼,带上耳机,听听看~!
本文介绍了GPTCache的作用和优势,说明了其在LangChain缓存模块中的应用和优势,以及可能带来的效率提升和成本降低。

GPTCache介绍

ChatGPT和其他大型语言模型(LLM)具有令人难以置信的多功能性,可用于广泛的应用程序开发。然而,随着对应开发的应用程序受欢迎程度的提高和流量级别的增加,与LLM API调用相关的费用可能会变得非常高昂。此外,当处理大量请求时,LLM服务可能会表现出缓慢的响应时间。

为了应对这一挑战,我们创建了GPTCache项目,该项目致力于构建用于存储LLM响应的语义缓存。

LangChain 介绍

大型语言模型 (LLM) 正在成为一种变革性技术,使开发人员能够构建以前无法实现的应用程序。然而,仅仅依靠单个 LLM 往往难以创建一个真正强大的应用程序。真正的力量在于将它们与其他计算或知识来源相结合。因此,LangChain这个库旨在协助开发这些类型的应用程序。

LangChain 缓存现状

在接入GPTCache之前,LangChain的缓存是基于字符串匹配实现,也就是只有当字符完全一致的两个请求,后者从缓存中获得相应的数据,其实现包括了:Memory Cache, SQLite Cache, Redis Cache

用法大致如下:

import langchain
from langchain.cache import InMemoryCache
langchain.llm_cache = InMemoryCache()
llm = OpenAI(model_name="text-davinci-002", n=2, best_of=2)

// CPU times: user 14.2 ms, sys: 4.9 ms, total: 19.1 ms
// Wall time: 1.1 s
llm("Tell me a joke")

// CPU times: user 162 µs, sys: 7 µs, total: 169 µs
// Wall time: 175 µs
llm("Tell me a joke")

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


def init_gptcache_map(cache_obj: gptcache.Cache):
    global i
    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("Tell me a joke")

# This is not an exact match, but semantically within distance so it hits!
# CPU times: user 737 ms, sys: 7.79 ms, total: 745 ms
# Wall time: 135 ms
llm("Tell me joke")

参考链接:

本网站的内容主要来自互联网上的各种资源,仅供参考和信息分享之用,不代表本网站拥有相关版权或知识产权。如您认为内容侵犯您的权益,请联系我们,我们将尽快采取行动,包括删除或更正。
AI教程

流水线工作与计算机指令流水

2023-12-6 5:46:14

AI教程

Stable Diffusion: 一种多模态任务的开源扩散模型

2023-12-6 7:36:14

个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索