升级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%的用户问题是语义上相似的,可以由缓存提供服务。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/966256.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

私有化部署DeepSeek并SpringBoot集成使用(附UI界面使用教程-支持语音、图片)

私有化部署DeepSeek并SpringBoot集成使用(附UI界面使用教程-支持语音、图片) windows部署ollama Ollama 是一个开源框架,专为在本地机器上便捷部署和运行大型语言模型(LLM)而设计 下载ollama 下载地址(…

半导体制造工艺讲解

目录 一、半导体制造工艺的概述 二、单晶硅片的制造 1.单晶硅的制造 2.晶棒的切割、研磨 3.晶棒的切片、倒角和打磨 4.晶圆的检测和清洗 三、晶圆制造 1.氧化与涂胶 2.光刻与显影 3.刻蚀与脱胶 4.掺杂与退火 5.薄膜沉积、金属化和晶圆减薄 6.MOSFET在晶圆表面的形…

正则表达式的简单介绍 + regex_match使用

正则表达式 正则表达式(Regular Expression,简称 regex)是一种用于匹配字符串的模式。它由一系列字符和特殊符号组成,用于描述、匹配一系列符合某个句法规则的字符串。正则表达式广泛应用于文本搜索、替换、验证等场景。 它的主…

AnythingLLM开发者接口API测试

《Win10OllamaAnythingLLMDeepSeek构建本地多人访问知识库》见上一篇文章,本文在上篇基础上进行。 1.生成本地API 密钥 2.打开API测试页面(http://localhost:3001/api/docs/) 就可以在页面测试API了 2.测试获取用户接口(/v1/admin/users) 3…

TypeScript 中的类:面向对象编程的基础

🤍 前端开发工程师、技术日更博主、已过CET6 🍨 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 🕠 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 🍚 蓝桥云课签约作者、上架课程《Vue.js 和 E…

二级C语言题解:矩阵主、反对角线元素之和,二分法求方程根,处理字符串中 * 号

目录 一、程序填空📝 --- 矩阵主、反对角线元素之和 题目📃 分析🧐 二、程序修改🛠️ --- 二分法求方程根 题目📃 分析🧐 三、程序设计💻 --- 处理字符串中 * 号 题目&#x1f…

Qt 支持的动画格式对比,Lottie/APNG/GIF/WEBP

Qt版本:6.7.2 , QML 一,Lottie 在qml中使用LottieAnimation即可,但有三个问题: 1.动画加载中报错: 如果图片(.json)本身存在不支持的effect 或shape type等,效果并不好&#xff1a…

SpringCloud - Nacos注册/配置中心

前言 该博客为Nacos学习笔记,主要目的是为了帮助后期快速复习使用 学习视频:7小快速通关SpringCloud 辅助文档:SpringCloud快速通关 一、简介 Nacos官网:https://nacos.io/docs/next/quickstart/quick-start/ Nacos /nɑ:kəʊ…

老游戏回顾:TL2

TL2是一部ARPG游戏,是TL的续作游戏,由位于美国西雅图的Runic Games开发,游戏于2012年9月20日上市,简体中文版于2013年4月10日在国内上市。 2有非常独特的艺术风格,这些在1中就已经形成,经过升级将使这款游…

DeepSeek-R1 云环境搭建部署流程

DeepSeek横空出世,在国际AI圈备受关注,作为个人开发者,AI的应用可以有效地提高个人开发效率。除此之外,DeepSeek的思考过程、思考能力是开放的,这对我们对结果调优有很好的帮助效果。 DeepSeek是一个基于人工智能技术…

利用ETL工具进行数据挖掘

ETL的基本概念 数据抽取(Extraction):从不同源头系统中获取所需数据的步骤。比如从mysql中拿取数据就是一种简单的抽取动作,从API接口拿取数据也是。 数据转换(Transformation):清洗、整合和转…

k8s网络插件及基础命令

一、k8s的cni网络插件 1.k8s的内部网络模式 pod内的容器与容器之间的通信。一个节点上的pod之间的通信,docker0网桥直接通信。不同节点上的pod之间的通信:通过物理网卡的ip地址和其他节点上的物理网卡的设备进行通信,然后把流量转发到指定的…

保姆级教程Docker部署KRaft模式的Kafka官方镜像

目录 一、安装Docker及可视化工具 二、单节点部署 1、创建挂载目录 2、运行Kafka容器 3、Compose运行Kafka容器 4、查看Kafka运行状态 三、集群部署 四、部署可视化工具 1、创建挂载目录 2、运行Kafka-ui容器 3、Compose运行Kafka-ui容器 4、查看Kafka-ui运行状态 …

【C语言】传值调用与传址调用详解

博客主页: [小ᶻ☡꙳ᵃⁱᵍᶜ꙳] 本文专栏: C语言 文章目录 💯前言💯传值调用1. 什么是传值调用?2. 示例代码:传值调用失败的情况执行结果: 3. 为什么传值调用无法修改外部变量? &#x1f4…

HarmonyOS 5.0应用开发——ContentSlot的使用

【高心星出品】 文章目录 ContentSlot的使用使用方法案例运行结果 完整代码 ContentSlot的使用 用于渲染并管理Native层使用C-API创建的组件同时也支持ArkTS创建的NodeContent对象。 支持混合模式开发,当容器是ArkTS组件,子组件在Native侧创建时&#…

Golang:Go 1.23 版本新特性介绍

流行的编程语言Go已经发布了1.23版本,带来了许多改进、优化和新特性。在Go 1.22发布六个月后,这次更新增强了工具链、运行时和库,同时保持了向后兼容性。 Go 1.23 的新增特性主要包括语言特性、工具链改进、标准库更新等方面,以下…

11.PPT:世界动物日【25】

目录 NO12​ NO34 NO56​ NO789视频音频​ NO10/11/12​ NO12 设计→幻灯片大小→ →全屏显示(16:9)确定调整标题占位符置于图片右侧:内容占位符与标题占位符左对齐单击右键“世界动物日1”→复制版式→大小→对齐 幻灯片大小…

力扣.623. 在二叉树中增加一行(链式结构的插入操作)

Problem: 623. 在二叉树中增加一行 文章目录 题目描述思路复杂度Code 题目描述 思路 1.首先要说明,对于数据结构无非两大类结构:顺序结构、链式结构,而二叉树实质上就可以等效看作为一个二叉链表,而对于链表插入一个节点的操作是应…

Office/WPS接入DS等多个AI工具,开启办公新模式!

在现代职场中,Office办公套件已成为工作和学习的必备工具,其功能强大但复杂,熟练掌握需要系统的学习。为了简化操作,使每个人都能轻松使用各种功能,市场上涌现出各类办公插件。这些插件不仅提升了用户体验,…

yolov11模型在Android设备上运行【踩坑记录】

0) 参考资料: https://github.com/Tencent/ncnn?tabreadme-ov-file https://github.com/pnnx/pnnx https://github.com/nihui/ncnn-android-yolov5 https://github.com/Tencent/ncnn?tabreadme-ov-file 1) :将xxx.pt模型转化成 xxx.onnx ONNX(Ope…