盘古大模型 PANGULARGEMODELS-Cache
时间:2024-09-05 14:59:04
Cache
Cache缓存是一种临时存储数据的方法,它可以把常用的数据保存在内存或者其他设备中,当需要访问这些数据时,无需再去原始的数据源查找,而是直接从缓存中获取,从而节省时间和资源。
Cache缓存有以下几种操作:
- 初始化:指定缓存使用哪种存储方式,例如,使用内存型缓存可以设置为memory_cache = Caches.of("inMemory")。
from pangukitsappdev.api.memory.cache.factory import Caches # 内存型 memory_cache = Caches.of("inMemory") # Redis redis_cache = Caches.of("redis") # mysql sql_cache = Caches.of("sql")
- 更新数据:指向缓存中添加或修改数据,需要指定数据的键值对和结果对象。例如,把1+1这个问题和用户cache会话下对应的答案2保存到缓存中,参考示例如下:
from pangukitsappdev.api.schema import LLMResp cache = Caches.of("inMemory") # 更新数据 cache.update("1+1", LLMResp(answer=2))
- 查询数据:从缓存中获取数据,需要指定数据的键值对。例如,查找1+1这个问题对应的答案,参考示例如下:
# 查找数据 cache_value = cache.lookup("1+1")
- 清理数据:删除用户cache会话下缓存中的数据。例如,删除所有缓存数据,参考示例如下:
# 清理 cache.clear()
- 参数解释:用于设置缓存对象的一些基本信息,如过期时间、session_tag等。
expire_after_access: int # 缓存失效策略-基于访问后到期时间(支持inMemeory缓存) expire_after_write: int # 缓存失效策略-基于写入后到期时间(支持redis缓存) maximum_size: int # 缓存失效策略-基于个数大小(支持inMemory、sql缓存) session_tag: str # 用户指定cache会话标志
- 缓存失效策略。
from pangukitsappdev.api.memory.cache.cache_config import CacheStoreConfig # redis缓存配置写入2s后到期 redis_cache = Caches.of("redis", CacheStoreConfig(expire_after_write=2)) # inMemory缓存配置缓存窗口数量为3,访问后2s到期 memory_cache = Caches.of("inMemory", CacheStoreConfig(maximum_size=3, expire_after_access=2)) # sql缓存配置缓存窗口数量为3 sql_cache = Caches.of("sql", CacheStoreConfig(maximum_size=3))
- 语义缓存(同步适配langchain语义缓存暂时不支持expire_after_write)
语义缓存是一种基于向量和相似度的缓存方法,它可以实现对数据的语义匹配和查询。语义缓存可以根据不同的向量存储、相似算法、评分规则和阈值进行配置,并且可以使用不同的词向量模型进行嵌入。
from pangukitsappdev.api.memory.cache.cache_config import CacheStoreConfig, ServerInfoRedis from pangukitsappdev.api.embeddings.factory import Embeddings # redis向量 # 不同的向量存储, 不同的相似算法;计算的评分规则不同; 可以同过scoreThreshold 设置相似性判断阈值 # 例如使用Redis向量、余弦相似度、 CSS 词向量模型,并且设置相似性判断阈值为0.1f,代码示例如下 embedding_api = Embeddings.of("css") cache_config = CacheStoreConfig(store_name="semantic_redis", server_info=ServerInfoRedis(env_prefix="sdk.memory.dcs"), embedding=embedding_api, vector_store_name="redis", distance_strategy="cosine", score_threshold=0.1, session_tag="test-semantic-cache-vector-001") cache = Caches.of("semantic_redis", cache_config) # 更新数据 # 指向语义缓存中添加或修改数据,需要指定数据的键值对和结果对象 # 例如,把“把缓存是否存在?”这个问题和“test-semantic-cache-vector-001”这个会话标识对应的答案“存在”保存到语义缓存中,代码示例如下 cache.update("缓存是否存在?", LLMResp(answer="存在。")) # 校验,一致 # 用于检查缓存中的数据是否与查询的数据是否一致,如果一致,就返回缓存中的结果对象 # 例如,查询“缓存是否存在?”这个问题和“test-semantic-cache-vector-001”这个会话标识,就可以从缓存中获取到之前保存的答案“存在” query = "缓存是否存在?" cache_value_after = cache.lookup(query) assert cache_value_after is not None print(cache_value_after.answer) # 校验,相似 # 用于检查缓存中的数据是否与查询的数据语义相似,如果相似,就返回缓存中的结果对象。这个操作需要使用向量和相似度的计算,以及设置的阈值来判断 # 例如,查询“缓存存在?”这个问题和“test-semantic-cache-vector-001”这个会话标识,就可以从缓存中获取到之前保存的答案“存在”,因为这个问题和“缓存是否存在?”问题语义相似 query_sim = "缓存存在?" cache_value_semantic = cache.lookup(query_sim) assert cache_value_semantic is not None print(cache_value_semantic.answer) # 校验,不一致 # 用于检查缓存中的数据是否与查询的数据不一致,如果不一致,返回空值 # 例如,查询“有没有数据?”这个问题和“test-semantic-cache-vector-001”这个会话标识,就无法从缓存中获取到任何答案,因为这个问题和之前保存的问题都不一致 query_not = "有没有数据?" assert cache.lookup(query_not) is None
父主题: Memory(记忆)
support.huaweicloud.com/ugobs-obs-pangulm/zh-cn_topic_0000001668477920.html
看了此文的人还看了
CDN加速
GaussDB
文字转换成语音
免费的服务器
如何创建网站
域名网站购买
私有云桌面
云主机哪个好
域名怎么备案
手机云电脑
SSL证书申请
云点播服务器
免费OCR是什么
电脑云桌面
域名备案怎么弄
语音转文字
文字图片识别
云桌面是什么
网址安全检测
网站建设搭建
国外CDN加速
SSL免费证书申请
短信批量发送
图片OCR识别
云数据库MySQL
个人域名购买
录音转文字
扫描图片识别文字
OCR图片识别
行驶证识别
虚拟电话号码
电话呼叫中心软件
怎么制作一个网站
Email注册网站
华为VNC
图像文字识别
企业网站制作
个人网站搭建
华为云计算
免费租用云托管
云桌面云服务器
ocr文字识别免费版
HTTPS证书申请
图片文字识别转换
国外域名注册商
使用免费虚拟主机
云电脑主机多少钱
鲲鹏云手机
短信验证码平台
OCR图片文字识别
SSL证书是什么
申请企业邮箱步骤
免费的企业用邮箱
云免流搭建教程
域名价格
推荐文章