SimFg

V1

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
V1

期待你的关注 Github: SimFG