SimFg
2023/04/02阅读:78主题:全栈蓝
GPT Cache:2 如何配置缓存存储
GPT Cache:2 如何配置缓存存储
注:以下内容基于gptcache 0.1.2 版本介绍
如果觉得项目不错,帮忙star一下,🙏 仓库地址:https://github.com/zilliztech/gptcache
上一节内容 GPT Cache:1 介绍
最简单的缓存管理器 - Map
使用示例代码:
from gptcache.view import openai
from gptcache.core import cache
cache.init()
answer = openai.ChatCompletion.create(
model="gpt-3.5-turbo",
messages=[
{"role": "user", "content": "hello"}
],
)
print(answer)
cache.init方法,是整个cache的配置入口,同时在使用前必须被调用。
如果需要自定义一个cache manage,则需要自己进行创建:
from gptcache.cache.factory import get_data_manager
data_manager = get_data_manager("map")
map cache manager自定义cache数据保存目录。程序结束时,会将cache进行持久化,对于map来说则是会将map序列化成文件,再一次启动时,则会读取文件内容。
from gptcache.cache.factory import get_data_manager
data_manager = get_data_manager("map", data_path="custom_map.txt")
自定义缓存大小,目前map使用是LRU cache
from gptcache.cache.factory import get_data_manager
data_manager = get_data_manager("map",
data_path="custom_map.txt",
max_size=10)
向量相似搜索缓存管理器
目前主要包含两种组合,分别是标量数据库+向量索引搜索和标量数据库+向量数据库,「更多的存储方式正在添加」,也欢迎大家给项目进行贡献。
项目地址:https://github.com/zilliztech/gptcache
如果觉得项目不错,帮忙点个star🙏
标量数据库+向量索引搜索
-
标量数据库,目前支持sqlite,无需任何安装即可使用,更多方式正在开发 -
向量索引搜索,目前支持faiss,更多方式正在开发
创建缓存管理器
data_manager = get_si_data_manager("sqlite", "faiss", dimension=d)
si表示:「scalar」 store and vector 「index」
「必须」设置dimension参数,表示向量的维度,主要用于创建索引,维度的设置取决于encoder模块中embedding函数的原则,如towhee的模型是768维,openai的embedding api则是1536维
其他参数:
-
max_size:缓存的最大数量,默认1000 -
clean_size:缓存达上限清除数据数量,默认为最大数量的20% -
sqlite_path:sqlite文件路径 -
eviction_strategy:数据过期策略,默认为最少访问(least_accessed_data),也可设置为:最早创建(oldest_created_data) -
top_k:每次搜索获得多少结果,默认为1 -
index_path:索引数据路径
使用示例:
data_manager = get_si_data_manager("sqlite", "faiss",
dimension=d,
max_size=8,
clean_size=2,
top_k=3)
cache.init(embedding_func=mock_embeddings,
data_manager=data_manager,
evaluation_func=pair_evaluation,
similarity_threshold=10000,
similarity_positive=False,
)
因为缓存管理与init的函数设置有关联,所以简单介绍下init中的部分函数
「embedding_func」,文本转换为向量,用于后续的相似搜索,示例中是主要是为了进行测试,所以向量是随机生成的8维向量
d = 8
def mock_embeddings(data, **kwargs):
return np.random.random((d, )).astype('float32')
「similarity_positive」,设置为True(默认值)表示越大越相似,配合阈值,也就是最终相似评估得到的值需要大于阈值,结果才符合要求,即:值越大越相似。如果设置为False,也就是相似评估得到的值应该是越小越好,注意判断0以下的值
注:默认情况下faiss相似搜索得到的距离,越小表示越相似,所以例子中,similarity_positive需要设置为False
「evaluation_func」,相似评估函数,即对搜索结果进行处理,得出一个数值,用于与相似阈值进行比较,绝对这个缓存结果是否有效
「pair_evaluation」,相似评估函数实现,得到的数值为相似搜索的距离,也就是搜索输入向量与搜索结果向量的距离
标量数据库+向量数据库
-
标量数据库,与上一小节一致,目前支持sqlite,更多方式正在开发 -
向量数据库,目前支持Milvus,Zilliz Cloud,更多方式正在开发
创建缓存管理器
data_manager = get_ss_data_manager("sqlite", "milvus", dimension=d)
ss表示:「scalar」 store and vector 「store」
同上一章节一样,dimension必须被设置,其具体值取决于embedding函数。
与上一章节相同的参数:
-
max_size:缓存的最大数量,默认1000 -
clean_size:缓存达上限清除数据数量,默认为最大数量的20% -
sqlite_path:sqlite文件路径 -
eviction_strategy:数据过期策略,默认为最少访问(least_accessed_data),也可设置为:最早创建(oldest_created_data) -
top_k:每次搜索获得多少结果,默认为1
milvus相关参数(对于milvus不太了解,可以参考:milvus使用文档):
-
host:地址,默认为localhost -
port:端口,默认为19530 -
user/password:如果开启了用户名密码校验,可以通过进行参数传递 -
is_https:是否开启https,用于连接Zilli Cloud -
collection_name:集合名称 -
create_new:是否新创建collection,默认为False,如果设置的collection名词已经存在,则会被删除
对于gptcache使用有什么疑问和建议,欢迎留言。
项目地址:https://github.com/zilliztech/gptcache
如果觉得项目不错,帮忙点个star🙏
作者介绍
SimFg
期待你的关注 Github: SimFG