升级RAG应用程序与Redis向量库
Redis Vector Library (RedisVL) 简化AI应用开发
几个月前,Redis推出了Redis向量库(RedisVL),以简化人工智能(AI)应用的开发。自那时起,我们引入了强大的新功能,支持大规模的语言模型(LLMs)。RedisVL是专为使用Redis进行AI操作而设计的Python客户端库。从redisvl版本0.3.0开始,它提供了:- 优化工具用于构建生成式AI应用,基于我们领先的向量数据库。- 存储和检索聊天历史记录的大型语言模型内存(LLM memory)。- 语义缓存,以节省LLM成本并加速响应。- 语义路由,将用户请求发送到最佳工具、模型或知识库。对于构建生成式AI应用的开发者来说,RedisVL旨在抽象并简化许多构建现代AI应用所需的组件。Redis以其速度和简易性著称,我们在GenAI时代继续发扬这一优势。我们的向量数据库是我们测试过的最快之一,但我们同样致力于使其易于构建。我们知道,开发者必须处理许多AI工具,并编写自定义代码以使这些工具协同工作。借助RedisVL,我们提供了一套有倾向性的命令集,使您能够专注于您的应用,从而更快地构建。### 使用LLM内存记住聊天上下文#### 问题LLMs本质上是无状态的,它们不会记住之前的互动。这意味着即使是最新的提示也会被立即遗忘。大多数在线聊天机器人可以回答后续问题,例如“告诉我更多关于那个”,或者“你能详细说明吗?”这是因为解决方案是在每次后续查询时提供完整的聊天历史记录。这确保了LLM有足够的上下文来回应。当您自己构建LLM应用时,这种会话管理成为您需要处理的责任。#### 解决方案解决方案是使用带有语义相关的聊天历史记录的部分内容。通过利用语义相似性,我们可以确定对话中哪些部分最相关于当前的查询。这种方法减少了令牌数量,节省了成本和时间,并可能因为只包含相关上下文而得到更好的答案。我们可以通过利用文本嵌入模型将文本编码成向量,然后使用Redis向量相似性搜索来找到与最新提示最相似的向量,从而量化用户查询和对话历史记录部分之间的语义相似性。在代码示例中,SemanticSessionManager
类允许设置距离阈值,添加消息以及获取与新提示语义相关的上下文。当调用get_relevant
方法时,它返回与提示语义相关的消息列表。pythonfrom redisvl.extensions.session_manager import StandardSessionManagerchat_session = SemanticSessionManager(name='student tutor')chat_session.set_distance_threshold(0.35)# 添加系统角色信息和一系列对话消息chat_session.add_message({"role": "system", "content": "你是一位地理导师,简短回答有关欧洲国家的问题。"})chat_session.add_messages([ {"role": "user", "content": "法国的首都是什么?"}, {"role": "llm", "content": "首都是巴黎。"}, # 更多对话...])prompt = "我学到了英格兰的大小是什么?"context = chat_session.get_relevant(prompt)for message in context: print(message)
### 使用语义缓存减少LLM成本和延迟#### 问题许多应用程序用户可能会反复问同样的问题。在这种情况下,如果LLM每次都计算相同的响应,显然是浪费资源。#### 解决方案为了提高LLM系统的性能,我们可以应用缓存技术。对于重复的问题,直接返回缓存的响应而不是每次都调用昂贵的模型来提供相同的答案是有意义的。然而,并非所有提示都是完全相同的,我们需要一种方法来比较那些以略微不同方式提问但含义相同的问题。这就是语义缓存的作用。语义缓存利用文本嵌入模型将每个查询转换成高维向量,这个向量是查询的数值表示,可以用来比较句子的语义含义。使用Redis的向量数据库,我们将用户查询和LLM响应对存储起来,并在每次新查询时执行向量相似性搜索,以找到我们已经有答案的语义相似问题。对于像“谁是英国的国王?”和“谁是联合王国的君主?”这样的语义相同的问题,可以直接返回缓存的响应。下面是一个简单的聊天循环例子,展示了如何在LLM工作流中加入Redis语义缓存。在实际应用中,首次接收到新响应后,不要忘记将其添加到缓存中以便下次使用。pythonfrom openai import AzureOpenAIfrom redisvl.extensions.llmcache import SemanticCacheclient = AzureOpenAI()cache = SemanticCache()while True: prompt = input("请输入您的问题:") if cache_hit := cache.check(prompt): print(cache_hit[0]["response"]) continue response = client.chat.completions.create( model='gpt-35-turbo', messages=[{"role": "user", "content": prompt}], ).choices[0].message.content cache.store(prompt=prompt, response=response) print(response)
超快的内存数据库可以在几分之一的时间内提供响应,相比LLM所需的时间大幅减少。它们还可以显著降低托管和调用LLM的财务成本。语义缓存的好处是巨大的。每次缓存命中都意味着少了一次对LLM的调用,这不仅节省了成本,也节省了时间,因为LLM响应时间通常以秒计,而缓存查找可以在毫秒内完成。研究已经表明,超过30%的用户问题是语义上相似的,可以由缓存提供服务。
相关文章:
升级RAG应用程序与Redis向量库
Redis Vector Library (RedisVL) 简化AI应用开发 几个月前,Redis推出了Redis向量库(RedisVL),以简化人工智能(AI)应用的开发。自那时起,我们引入了强大的新功能,支持大规模的语言模…...
【starrocks学习】之将starrocks表同步到hive
目录 方法 1:通过HDFS导出数据 1. 将StarRocks表数据导出到HDFS 2. 在Hive中创建外部表 3. 验证数据 方法 2:使用Apache Spark同步 1. 添加StarRocks和Hive的依赖 2. 使用Spark读取StarRocks数据并写入Hive 3. 验证数据 方法 3:通过…...

HTML应用指南:利用GET请求获取全国盒马门店位置信息
随着新零售业态的发展,门店位置信息的获取变得至关重要。作为新零售领域的先锋,盒马鲜生不仅在商业模式创新上持续领先,还积极构建广泛的门店网络,以支持其不断增长的用户群体。本篇文章,我们将继续探究GET请求的实际应用,我们使用Python的requests库通过GET请求,从盒马…...
openEuler部署 sysstat工具
查看环境 [rootlocalhost lxm]# cat /etc/os-release NAME"openEuler" VERSION"23.09" ID"openEuler" VERSION_ID"23.09" PRETTY_NAME"openEuler 23.09" ANSI_COLOR"0;31"查看 yum 源 [rootlocalhost lxm]# he…...
使用 Three.js 实现炫酷的除夕烟花特效
1,前言 在除夕夜,璀璨的烟花点亮夜空,为节日增添了浓厚的喜庆氛围。在 Web 端,我们可以使用 Three.js 来模拟这种美轮美奂的烟花特效,让网页也能展现绚丽的节日气息。本文将介绍如何利用 Three.js 及其着色器技术&…...

LMM-3DP:集成 LMM 规划器和 3D 技能策略实现可泛化操作
25年1月来自UCSD的论文“Integrating LMM Planners and 3D Skill Policies for Generalizable Manipulation”。 大型多模态模型 (LMM) 的视觉推理能力和 3D 特征场语义丰富性的最新进展,拓展了机器人能力的范围。这些发展对于弥合 LMM 高级推理与利用 3D 特征场低…...

Linux——基础命令3
1、关机重启命令 reboot指令 作用:重启计算机 语法:reboot shutdown指令 作用:关机 语法:shutdown -h 时间 时间常见的值: now (立即关机) m(m表示minutes数字)eg&…...

ChatGPT提问技巧:行业热门应用提示词案例-文案写作
ChatGPT 作为强大的 AI 语言模型,已经成为文案写作的得力助手。但要让它写出真正符合你需求的文案,关键在于如何与它“沟通”,也就是如何设计提示词(Prompt)。以下是一些实用的提示词案例,帮助你解锁 ChatG…...
python - 封装moondream(备份)
目录 一、 moondream封装成类 二、moondream封装成http api 一、 moondream封装成类 # moondream_model.py #https://github.com/vikhyat/moondream?tab=readme-ov-fileimport moondream as md from PIL import Imageclass MoondreamModel:def __init__(self, model_path):…...

响应式编程库(三) -r2dbc
r2dbc整合 什么是r2dbc版本选择简单试用整合springbootDatabaseClient 进行查询使用Repository接口(对应mapper)实体类复杂查询(一对一)实体类转换器测试代码一对多关系 什么是r2dbc 反应式关系数据库连接(R2DBC)项目为关系数据库…...
嵌入式AI革命:DeepSeek开源如何终结GPU霸权,开启单片机智能新时代?
2025年,全球AI领域最震撼的突破并非来自算力堆叠的超级模型,而是中国团队DeepSeek通过开源策略,推动大模型向微型化、低功耗场景的跨越。相对于当人们还在讨论千亿参数模型的训练成本被压缩到600万美金而言,被称作“核弹级别”的操…...

基于遗传算法的64QAM星座图的最优概率整形matlab仿真,对比优化前后整形星座图和误码率
目录 1.算法仿真效果 2.算法涉及理论知识概要 3.MATLAB核心程序 4.完整算法代码文件获得 1.算法仿真效果 matlab2022a仿真结果如下(完整代码运行后无水印): GA优化过程: 优化前后星座图对比: (优化后…...

从零开始玩转Docker:轻松开启容器化之旅
一、什么是 Docker Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。简单来说,Docker 就像是一个超级 “快递箱”,…...

kafka生产端之架构及工作原理
文章目录 整体架构元数据更新 整体架构 消息在真正发往Kafka之前,有可能需要经历拦截器(Interceptor)、序列化器(Serializer)和分区器(Partitioner)等一系列的作用,那么在此之后又会…...

38、【OS】【Nuttx】OSTest分析(3):参数传递
背景 接之前 blog 36、【OS】【Nuttx】OSTest分析(2):环境变量测试 37、【OS】【Nuttx】OSTest分析(2):任务创建 分析完环境变量测试,和任务创建的一些关键要素,OSTest 进入下一阶段…...

存储异常导致的Oracle重大生产故障
📢📢📢📣📣📣 作者:IT邦德 中国DBA联盟(ACDU)成员,10余年DBA工作经验 Oracle、PostgreSQL ACE CSDN博客专家及B站知名UP主,全网粉丝10万 擅长主流Oracle、MySQL、PG、高斯…...
C语言时间相关宏定义
在C语言中,预处理器提供了一些与时间相关的宏定义,用于在编译时获取日期、时间等信息。除了 __TIMESTAMP__ 和 __DATE__,还有以下相关的宏定义: __DATE__ 当前编译日期的字符串,格式为 "Mmm dd yyyy"&#x…...
Android Studio:Application 和 Activity的区别
Application 和 Activity 是 Android 中非常重要的两个组件,它们分别负责不同的生命周期管理和应用的不同层次的操作。 Application 是应用级别的生命周期管理,它在整个应用运行时只有一个实例,负责应用的全局初始化和资源管理。Activity 是…...
如何优化爬虫以提高搜索效率
在数据采集和网络爬虫领域,优化爬虫性能是提升数据采集效率的关键。随着网页结构的日益复杂和数据量的不断增长,高效的爬虫能够显著降低运行时间和资源成本。本文将详细介绍如何优化爬虫以提高搜索效率,包括选择合适的工具、优化代码逻辑、使…...
git撤销上一次的提交
1、撤销提交 如果需要撤销上一次的提交,只是提交到了本地,可以通过命令: // 撤销最近的提交(保留修改) git reset --soft HEAD~1 这个操作可以保留之前的提交和当前的修改。最近一次的提交到本地的修改的提交会回到…...

多模态2025:技术路线“神仙打架”,视频生成冲上云霄
文|魏琳华 编|王一粟 一场大会,聚集了中国多模态大模型的“半壁江山”。 智源大会2025为期两天的论坛中,汇集了学界、创业公司和大厂等三方的热门选手,关于多模态的集中讨论达到了前所未有的热度。其中,…...
DockerHub与私有镜像仓库在容器化中的应用与管理
哈喽,大家好,我是左手python! Docker Hub的应用与管理 Docker Hub的基本概念与使用方法 Docker Hub是Docker官方提供的一个公共镜像仓库,用户可以在其中找到各种操作系统、软件和应用的镜像。开发者可以通过Docker Hub轻松获取所…...

Redis相关知识总结(缓存雪崩,缓存穿透,缓存击穿,Redis实现分布式锁,如何保持数据库和缓存一致)
文章目录 1.什么是Redis?2.为什么要使用redis作为mysql的缓存?3.什么是缓存雪崩、缓存穿透、缓存击穿?3.1缓存雪崩3.1.1 大量缓存同时过期3.1.2 Redis宕机 3.2 缓存击穿3.3 缓存穿透3.4 总结 4. 数据库和缓存如何保持一致性5. Redis实现分布式…...
QMC5883L的驱动
简介 本篇文章的代码已经上传到了github上面,开源代码 作为一个电子罗盘模块,我们可以通过I2C从中获取偏航角yaw,相对于六轴陀螺仪的yaw,qmc5883l几乎不会零飘并且成本较低。 参考资料 QMC5883L磁场传感器驱动 QMC5883L磁力计…...
解锁数据库简洁之道:FastAPI与SQLModel实战指南
在构建现代Web应用程序时,与数据库的交互无疑是核心环节。虽然传统的数据库操作方式(如直接编写SQL语句与psycopg2交互)赋予了我们精细的控制权,但在面对日益复杂的业务逻辑和快速迭代的需求时,这种方式的开发效率和可…...
质量体系的重要
质量体系是为确保产品、服务或过程质量满足规定要求,由相互关联的要素构成的有机整体。其核心内容可归纳为以下五个方面: 🏛️ 一、组织架构与职责 质量体系明确组织内各部门、岗位的职责与权限,形成层级清晰的管理网络…...
Spring Boot面试题精选汇总
🤟致敬读者 🟩感谢阅读🟦笑口常开🟪生日快乐⬛早点睡觉 📘博主相关 🟧博主信息🟨博客首页🟫专栏推荐🟥活动信息 文章目录 Spring Boot面试题精选汇总⚙️ **一、核心概…...
Robots.txt 文件
什么是robots.txt? robots.txt 是一个位于网站根目录下的文本文件(如:https://example.com/robots.txt),它用于指导网络爬虫(如搜索引擎的蜘蛛程序)如何抓取该网站的内容。这个文件遵循 Robots…...

push [特殊字符] present
push 🆚 present 前言present和dismiss特点代码演示 push和pop特点代码演示 前言 在 iOS 开发中,push 和 present 是两种不同的视图控制器切换方式,它们有着显著的区别。 present和dismiss 特点 在当前控制器上方新建视图层级需要手动调用…...

【堆垛策略】设计方法
堆垛策略的设计是积木堆叠系统的核心,直接影响堆叠的稳定性、效率和容错能力。以下是分层次的堆垛策略设计方法,涵盖基础规则、优化算法和容错机制: 1. 基础堆垛规则 (1) 物理稳定性优先 重心原则: 大尺寸/重量积木在下…...