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

升级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 就像是一个超级 “快递箱”&#xff0c…...

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 这个操作可以保留之前的提交和当前的修改。最近一次的提交到本地的修改的提交会回到…...

利用最小二乘法找圆心和半径

#include <iostream> #include <vector> #include <cmath> #include <Eigen/Dense> // 需安装Eigen库用于矩阵运算 // 定义点结构 struct Point { double x, y; Point(double x_, double y_) : x(x_), y(y_) {} }; // 最小二乘法求圆心和半径 …...

FastAPI 教程:从入门到实践

FastAPI 是一个现代、快速&#xff08;高性能&#xff09;的 Web 框架&#xff0c;用于构建 API&#xff0c;支持 Python 3.6。它基于标准 Python 类型提示&#xff0c;易于学习且功能强大。以下是一个完整的 FastAPI 入门教程&#xff0c;涵盖从环境搭建到创建并运行一个简单的…...

UDP(Echoserver)

网络命令 Ping 命令 检测网络是否连通 使用方法: ping -c 次数 网址ping -c 3 www.baidu.comnetstat 命令 netstat 是一个用来查看网络状态的重要工具. 语法&#xff1a;netstat [选项] 功能&#xff1a;查看网络状态 常用选项&#xff1a; n 拒绝显示别名&#…...

大数据零基础学习day1之环境准备和大数据初步理解

学习大数据会使用到多台Linux服务器。 一、环境准备 1、VMware 基于VMware构建Linux虚拟机 是大数据从业者或者IT从业者的必备技能之一也是成本低廉的方案 所以VMware虚拟机方案是必须要学习的。 &#xff08;1&#xff09;设置网关 打开VMware虚拟机&#xff0c;点击编辑…...

HTML 列表、表格、表单

1 列表标签 作用&#xff1a;布局内容排列整齐的区域 列表分类&#xff1a;无序列表、有序列表、定义列表。 例如&#xff1a; 1.1 无序列表 标签&#xff1a;ul 嵌套 li&#xff0c;ul是无序列表&#xff0c;li是列表条目。 注意事项&#xff1a; ul 标签里面只能包裹 li…...

全球首个30米分辨率湿地数据集(2000—2022)

数据简介 今天我们分享的数据是全球30米分辨率湿地数据集&#xff0c;包含8种湿地亚类&#xff0c;该数据以0.5X0.5的瓦片存储&#xff0c;我们整理了所有属于中国的瓦片名称与其对应省份&#xff0c;方便大家研究使用。 该数据集作为全球首个30米分辨率、覆盖2000–2022年时间…...

质量体系的重要

质量体系是为确保产品、服务或过程质量满足规定要求&#xff0c;由相互关联的要素构成的有机整体。其核心内容可归纳为以下五个方面&#xff1a; &#x1f3db;️ 一、组织架构与职责 质量体系明确组织内各部门、岗位的职责与权限&#xff0c;形成层级清晰的管理网络&#xf…...

2021-03-15 iview一些问题

1.iview 在使用tree组件时&#xff0c;发现没有set类的方法&#xff0c;只有get&#xff0c;那么要改变tree值&#xff0c;只能遍历treeData&#xff0c;递归修改treeData的checked&#xff0c;发现无法更改&#xff0c;原因在于check模式下&#xff0c;子元素的勾选状态跟父节…...

蓝桥杯3498 01串的熵

问题描述 对于一个长度为 23333333的 01 串, 如果其信息熵为 11625907.5798&#xff0c; 且 0 出现次数比 1 少, 那么这个 01 串中 0 出现了多少次? #include<iostream> #include<cmath> using namespace std;int n 23333333;int main() {//枚举 0 出现的次数//因…...

华为OD机考-机房布局

import java.util.*;public class DemoTest5 {public static void main(String[] args) {Scanner in new Scanner(System.in);// 注意 hasNext 和 hasNextLine 的区别while (in.hasNextLine()) { // 注意 while 处理多个 caseSystem.out.println(solve(in.nextLine()));}}priv…...