当前位置: 首页 > news >正文

大模型应用技术系列(三): 深入理解大模型应用中的Cache:GPTCache

前言

        无论在什么技术栈中,缓存都是比较重要的一部分。在大模型技术栈中,缓存存在于技术栈中的不同层次。本文将主要聚焦于技术栈中应用层和底层基座之间中间件层的缓存(个人定位),以开源项目GPTCache(LLM的语义缓存)为例,深入讲解这部分缓存的结构和关键实现。

        完整技术栈详情参考之前文章《大模型应用技术系列(一):大模型应用整体技术栈浅析》

使用场景

        当用户流量比较大的C端应用试图接入大模型能力时,如果每次请求都访问LLM,通过LLM生成结果再返回给服务,那么对于LLM服务而言压力会比较大,整体服务的吞吐量和延迟通常都会有比较大的影响。如果这些请求之间有一些相似性(比如A用户提问:今天天气怎么样?B用户也提问:今儿天气如何?),那么这个时候就可以考虑在应用服务和LLM基座之间引入语义缓存来尝试提升服务性能。

常见用法

        先来介绍一些语义缓存GPTCache的一些常见用法,以下示例取自官网。

精确匹配

        精确匹配意味着对于见过的重复问题可以不需要再去请求背后的LLM,而是命中cache之后直接从cache中去寻找。这种做法下,代码不需要有比较大的变动,只需要添加以下4行即可:

import timedef response_text(openai_resp):return openai_resp['choices'][0]['message']['content']print("Cache loading.....")#------------------------------
from gptcache import cache
from gptcache.adapter import openai
cache.init()
cache.set_openai_key()
#------------------------------start_time = time.time()
response = openai.ChatCompletion.create(model='gpt-3.5-turbo',messages=[{'role': 'user','content': question}],
)
print(f'Question: {question}')
print("Time consuming: {:.2f}s".format(time.time() - start_time))
print(f'Answer: {response_text(response)}\n')

语义相似匹配

        精确匹配只能匹配完全相同的问题,这在大多数场景下不是特别有用(用户可能以不同的方式问出相似的问题)。在这种情况下,基于语义相似匹配的cache可能更有用。通过缓存相似语义问题的回答来解决当前的问题。这种方式在初始化cache的时候,需要加上一些其他的模块,这些模块后续会进行介绍。

import time
def response_text(openai_resp):return openai_resp['choices'][0]['message']['content']#--------------------------------------------------
from gptcache import cache
from gptcache.adapter import 
http://www.lryc.cn/news/510471.html

相关文章:

  • 『大模型笔记』评估大型语言模型的指标:ELO评分,BLEU,困惑度和交叉熵介绍以及举例解释
  • 深度解析:Maven 和 Gradle 的使用比较及常见仓库推荐
  • SQLite本地数据库的简介和适用场景——集成SpringBoot的图文说明
  • 管理面板Ajenti的在Windows10下Ubuntu24.04/Ubuntu22.04里的安装
  • 在Python如何用Type创建类
  • Android学习19 -- NDK4--共享内存(TODO)
  • 《Cocos Creator游戏实战》非固定摇杆实现原理
  • RabbitMQ工作模式(详解 工作模式:简单队列、工作队列、公平分发以及消息应答和消息持久化)
  • 【VScode】第三方GPT编程工具-CodeMoss安装教程
  • 在JavaScript中,let 和 const有什么不同
  • Mysq学习-Mysql查询(4)
  • 安装torch-geometric库
  • Java数组深入解析:定义、操作、常见问题与高频练习
  • Docker-构建自己的Web-Linux系统-镜像webtop:ubuntu-kde
  • 【C语言练习(17)—输出杨辉三角形】
  • SpringMVC学习(二)——RESTful API、拦截器、异常处理、数据类型转换
  • React 第二十节 useRef 用途使用技巧注意事项详解
  • VIVO Java开发面试题及参考答案
  • C# Winfrom chart图 实例练习
  • iOS从Matter的设备认证证书中获取VID和PID
  • 带着国标充电器出国怎么办? 适配器模式(Adapter Pattern)
  • 破解海外业务困局:新加坡服务器托管与跨境组网策略
  • Mybatis-Plus快速入门
  • Chrome被360导航篡改了怎么改回来?
  • Coding(Jenkinsfile)+ Docker 自动化部署 Springboot —— 图文细节和一些注意事项说明
  • docker django uwsgi 报错记录
  • 数据分析思维(五):分析方法——假设检验分析方法
  • 【ES6复习笔记】集合Set(13)
  • 基础爬虫案例实战
  • 深度学习工作:从追求 SoTA 到揭示新现象