盘古大模型 PANGULARGEMODELS-Cache
时间:2024-09-05 14:59:04
Cache
Cache缓存是一种临时存储数据的方法,它可以把常用的数据保存在内存或者其他设备中,这样当需要访问这些数据时,就不用再去原始的数据源查找,而是直接从缓存中获取,从而节省时间和资源。
- 对LLM使用缓存:
LLM llm = LLMs.of(LLMs.PANGU, llmConfig); llm.setCache(Caches.of(Caches.IN_MEMORY)); llm.ask("你能讲一个笑话吗?")
此时,再次使用同样的问题,则不会再调用大模型,而是直接从内存返回:llm.ask("你能讲一个笑话吗?")
Cache缓存有以下几个操作:
- 初始化:指定缓存使用哪种存储方式。例如,使用内存型缓存可以设置为Cache cache = Caches.of(Caches.IN_MEMORY);。
import com.huaweicloud.pangu.dev.sdk.api.memory.cache.Cache; import com.huaweicloud.pangu.dev.sdk.api.memory.cache.Caches; // 内存型 Cache cache = Caches.of(Caches.IN_MEMORY); // Redis Cache cache = Caches.of(Caches.REDIS); // mysql Cache cache = Caches.of(Caches.SQL);
- 更新数据:指向缓存中添加或修改数据,需要指定数据的键值对和结果对象。例如,把1+1这个问题和对应的答案2保存到缓存中,可参考以下示例。
import com.huaweicloud.pangu.dev.sdk.api.llms.response.LLMResp; //更新数据 cache.update("1+1", LLMResp.builder().answer("2").build());
- 查询数据:从缓存中获取数据,需要指定数据的键值对。例如,查找1+1这个问题对应的答案,可参考以下示例。
import com.huaweicloud.pangu.dev.sdk.api.llms.response.LLMResp; // 查找数据 LLMResp cacheValue = cache.lookup("1+1");
- 清理数据:删除缓存中的数据。例如,删除对应的缓存数据,可参考以下示例。
// 清理 cache.clear()
- 配置过期策略:设置缓存有效期,支持基于时间和大小的限制。
// 设置缓存数据10s 后过期 Cache cache = Caches.of(Caches.IN_MEMORY, CacheStoreConfig.builder().expireAfterWrite(10).build());
- 参数解释:用于设置缓存对象的一些基本信息,如过期时间等。
/** * 会话标识,业务确定 */ @Builder.Default private String sessionTag = ""; /** * 访问后到期时间,单位为秒, 默认不设置过期 */ @Builder.Default private int expireAfterAccess = -1; /** * 写入后到期时间,单位为秒, 默认不设置过期 */ @Builder.Default private int expireAfterWrite = -1; /** * 最大个数, 默认不设置过期 */ @Builder.Default private int maximumSize = -1;
- 语义缓存:语义缓存是一种基于向量和相似度的缓存方法,它可以实现对数据的语义匹配和查询。语义缓存可以根据不同的向量存储、相似算法、评分规则和阈值进行配置,并且可以使用不同的词向量模型进行嵌入。
import com.huaweicloud.pangu.dev.sdk.api.embedings.Embeddings; import com.huaweicloud.pangu.dev.sdk.api.llms.response.LLMResp; import com.huaweicloud.pangu.dev.sdk.api.memory.cache.Cache; import com.huaweicloud.pangu.dev.sdk.api.memory.cache.Caches; import com.huaweicloud.pangu.dev.sdk.api.memory.config.CacheStoreConfig; import com.huaweicloud.pangu.dev.sdk.api.memory.config.ServerInfoRedis; import com.huaweicloud.pangu.dev.sdk.api.memory.vector.Vectors; import com.huaweicloud.pangu.dev.sdk.vectorstore.DistanceStrategy; import org.junit.jupiter.api.Assertions; //redis向量 // 不同的向量存储, 不同的相似算法;计算的评分规则不同; 可以同过scoreThreshold 设置相似性判断阈值 // 例如使用Redis向量、余弦相似度、 CSS 词向量模型,并且设置相似性判断阈值为0.1f,代码示例如下 Cache cache = Caches.of(CacheStoreConfig.builder() .storeName(Caches.SEMANTIC_REDIS) .vectorStoreName(Vectors.REDIS) .serverInfo(ServerInfoRedis.builder().build()) .distanceStrategy(DistanceStrategy.COSINE) .scoreThreshold(0.1f) .embedding(Embeddings.of(Embeddings. CS S)) .build()); //会话标识 String sessionTag="test-semantic-cache-vector-001"; cache.setSessionTag(sessionTag); cache.clear(); //数据已清空 Assertions.assertNull(cache.lookup("缓存是否存在?")); //更新数据 //指向语义缓存中添加或修改数据,需要指定数据的键值对和结果对象 //例如,把“把缓存是否存在?”这个问题和“test-semantic-cache-vector-001”这个会话标识对应的答案“存在”保存到语义缓存中,代码示例如下 cache.update("缓存是否存在?",LLMResp.builder().answer("存在。").build()); //校验,一致 //用于检查缓存中的数据是否与查询的数据是否一致,如果一致,就返回缓存中的结果对象 //例如,查询“缓存是否存在?”这个问题和“test-semantic-cache-vector-001”这个会话标识,就可以从缓存中获取到之前保存的答案“存在” String query="缓存是否存在?"; LLMResp cacheValueAfter=cache.lookup(query); Assertions.assertNotNull(cacheValueAfter); System.out.println(query+cacheValueAfter.getAnswer()); //校验,相似 //用于检查缓存中的数据是否与查询的数据语义相似,如果相似,就返回缓存中的结果对象。这个操作需要使用向量和相似度的计算,以及设置的阈值来判断 //例如,查询“缓存存在?”这个问题和“test-semantic-cache-vector-001”这个会话标识,就可以从缓存中获取到之前保存的答案“存在”,因为这个问题和“缓存是否存在?”问题语义相似 String query_sim="缓存存在?"; LLMResp cacheValueSemantic=cache.lookup(query_sim); Assertions.assertNotNull(cacheValueSemantic); System.out.println(query_sim+cacheValueSemantic.getAnswer()); //校验,不一致 //用于检查缓存中的数据是否与查询的数据不一致,如果不一致,返回空值 //例如,查询“有没有数据?”这个问题和“test-semantic-cache-vector-001”这个会话标识,就无法从缓存中获取到任何答案,因为这个问题和之前保存的问题都不一致 String query_not="有没有数据?"; Assertions.assertNull(cache.lookup(query_not));
父主题: Memory(记忆)
support.huaweicloud.com/ugobs-obs-pangulm/zh-cn_topic_0000001666420090.html
看了此文的人还看了
CDN加速
GaussDB
文字转换成语音
免费的服务器
如何创建网站
域名网站购买
私有云桌面
云主机哪个好
域名怎么备案
手机云电脑
SSL证书申请
云点播服务器
免费OCR是什么
电脑云桌面
域名备案怎么弄
语音转文字
文字图片识别
云桌面是什么
网址安全检测
网站建设搭建
国外CDN加速
SSL免费证书申请
短信批量发送
图片OCR识别
云数据库MySQL
个人域名购买
录音转文字
扫描图片识别文字
OCR图片识别
行驶证识别
虚拟电话号码
电话呼叫中心软件
怎么制作一个网站
Email注册网站
华为VNC
图像文字识别
企业网站制作
个人网站搭建
华为云计算
免费租用云托管
云桌面云服务器
ocr文字识别免费版
HTTPS证书申请
图片文字识别转换
国外域名注册商
使用免费虚拟主机
云电脑主机多少钱
鲲鹏云手机
短信验证码平台
OCR图片文字识别
SSL证书是什么
申请企业邮箱步骤
免费的企业用邮箱
云免流搭建教程
域名价格
推荐文章