Redis for AI

ops/2025/1/23 10:04:40/

Redis存储和索引语义上表示非结构化数据(包括文本通道、图像、视频或音频)的向量嵌入。将向量和关联的元数据存储在哈希或JSON文档中,用于索引和查询。

Redis包括一个高性能向量数据库,允许您对向量嵌入执行语义搜索。可以通过过滤文本、数字、地理空间和标记元数据来增强这些搜索。

  • 创建向量索引:Redis使用定义的模式(包括向量字段和元数据)维护数据的二级索引。Redis支持FLAT和HNSW向量索引类型。
  • 存储和更新向量:Redis将向量和元数据存储在哈希或JSON对象中。
  • 使用向量搜索:Redis支持几种具有向量字段的高级查询策略,包括k-最近邻(KNN)、向量范围查询和元数据过滤器。
  • 在运行时配置向量查询。
  • 向量搜索示例:探索几个涵盖不同用例和技术的向量搜索示例。

一、创建向量索引

 定义索引的模式时,可以包括一个或多个向量字段,如下所示:

Syntax

FT.CREATE <index_name>ON <storage_type>PREFIX 1 <key_prefix>SCHEMA ... <field_name> VECTOR <algorithm> <index_attribute_count> <index_attribute_name> <index_attribute_value>[<index_attribute_name> <index_attribute_value> ...]

Parameters

ParameterDescription
index_nameName of the index.
storage_typeStorage option (HASH or JSON).
prefix (optional)Key prefix used to select which keys should be indexed. Defaults to all keys if omitted.
field_nameName of the vector field.
algorithmVector index algorithm (FLAT or HNSW).
index_attribute_countNumber of vector field attributes.
index_attribute_nameVector field attribute name.
index_attribute_valueVector field attribute value.

 二、FLAT index

当数据集较小(<1M向量)或完美的搜索精度比搜索延迟更重要时,请选择FLAT索引。

1、必需的属性

AttributeDescription
TYPEVector type (BFLOAT16FLOAT16FLOAT32FLOAT64). BFLOAT16 and FLOAT16 require v2.10 or later.
DIM存储在此字段中的向量嵌入的宽度或维数。换句话说,组成向量的浮点元素的数量。DIM必须是正整数。用于查询该字段的向量必须具有与字段本身相同的维度。
DISTANCE_METRICDistance metric (L2IPCOSINE).
FT.CREATE documentsON HASHPREFIX 1 docs:SCHEMA doc_embedding VECTOR FLAT 6TYPE FLOAT32DIM 1536DISTANCE_METRIC COSINE

 在上面的示例中,通过哈希创建名为documents的索引,关键字前缀为docs:,名为doc_embedding的FLAT向量字段具有三个索引属性:TYPE、DIM和DISTANCE_METRIC。

三、HNSW index

HNSW或分层可导航小世界(hierarchical navigable small world)是一种近似最近邻算法,它使用多层图使向量搜索更具可扩展性。

  • 最底层包含所有数据点,每个更高层包含一个子集,形成层次结构。
  • 在运行时,搜索从上到下遍历每个层上的图,在放到下一层之前找到局部极小值。

 当您有更大的数据集(>1M个文档)时,或者当搜索性能和可扩展性比完美的搜索准确性更重要时,请选择HNSW索引类型。

1、必需的属性

AttributeDescription
TYPEVector type (BFLOAT16FLOAT16FLOAT32FLOAT64). BFLOAT16 and FLOAT16 require v2.10 or later.
DIM存储在此字段中的向量嵌入的宽度或维数。换句话说,组成向量的浮点元素的数量。DIM必须是正整数。用于查询该字段的向量必须具有与字段本身相同的维度。
DISTANCE_METRICDistance metric (L2IPCOSINE).

2、可选属性 

​​​​​​​HNSW支持许多额外的参数来调整查询的准确性,同时权衡性能。

AttributeDescription
M图形层中每个节点的最大传出边(连接)数。在层零上,最大连接数将为2*M。更高的值会增加准确性,但也会增加内存使用量和索引构建时间。默认值为16。
EF_CONSTRUCTION在图构建期间要考虑的最大连接邻居数。较高的值会增加准确性,但也会增加索引构建时间。默认值为200。
EF_RUNTIMEKNN搜索期间的最大热门候选。较高的值可以提高准确性,但也会增加搜索延迟。默认值为10。
EPSILON设置范围查询可以在其中搜索候选对象的边界的相对因子。也就是说,与查询向量的距离为radius*(1+EPSILON)的向量候选可能会被扫描,从而允许更广泛的搜索和更准确的结果,但代价是运行时。默认值为0.01。
FT.CREATE documentsON HASHPREFIX 1 docs:SCHEMA doc_embedding VECTOR HNSW 10TYPE FLOAT64DIM 1536DISTANCE_METRIC COSINEM 40EF_CONSTRUCTION 250

 在上面的示例中,通过哈希创建名为documents的索引,关键字前缀为docs:,名为doc_embedding的HNSW向量字段具有五个索引属性:TYPE、DIM、DISTANCE_METRIC、M和EF_CONSTRUCTION。


http://www.ppmy.cn/ops/152439.html

相关文章

《人工智能安全治理框架》的解读与思考

文章目录 前言一、《框架》的发布背景二、《框架》的重要意义三、《框架》的核心内容1、人工智能安全治理原则。2、人工智能安全风险分类。3、技术应对与综合治理措施。4、人工智能安全开发应用指引。四、以标准工作推动《框架》有效落地1、加快构建并持续完善人工智能安全标准…

【前端知识】简单易懂的vue前端页面元素权限控制

文章目录 设计思路代码实现1. **权限数据管理**2. **权限判断方法**3. **动态控制元素**4. **路由权限控制**5. **无权限页面** 总结相关文献 在前端实现基于 Vue 的权限控制&#xff0c;通常需要结合后端返回的用户权限数据&#xff0c;动态控制页面元素的显示与隐藏、按钮的可…

FPGA 开发工作需求明确:关键要点与实践方法

FPGA开发工作需求明确&#xff1a;关键要点与实践方法 一、需求明确的重要性 在FPGA开发领域&#xff0c;明确的需求是项目成功的基石。FPGA开发往往涉及复杂的硬件逻辑设计、高速信号处理以及与其他系统的协同工作。若需求不明确&#xff0c;可能导致开发过程中频繁变更设计…

通信协议—WebSocket

一、WebSocket编程概念 1.1 什么是WebSocket WebSocket 是一种全双工通信协议&#xff0c;允许在客户端&#xff08;通常是浏览器&#xff09;和服务器之间建立持久连接&#xff0c;以实现实时的双向通信。它是 HTML5 标准的一部分&#xff0c;相比传统的 HTTP 请求&#xff…

Hadoop 与 Spark:大数据处理的比较

&#x1f496; 欢迎来到我的博客&#xff01; 非常高兴能在这里与您相遇。在这里&#xff0c;您不仅能获得有趣的技术分享&#xff0c;还能感受到轻松愉快的氛围。无论您是编程新手&#xff0c;还是资深开发者&#xff0c;都能在这里找到属于您的知识宝藏&#xff0c;学习和成长…

初始JavaEE篇 —— 快速上手 SpringBoot

找往期文章包括但不限于本期文章中不懂的知识点&#xff1a; 个人主页&#xff1a;我要学编程程(ಥ_ಥ)-CSDN博客 所属专栏&#xff1a;JavaEE 目录 SpringBoot 相关介绍与解惑 SpringBoot 项目的创建 通过 官方提供的网页 来创建 通过 IDEA 来创建 SpringBoot 项目的介…

基于微信小程序的安心陪诊管理系统

作者&#xff1a;计算机学姐 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等&#xff0c;“文末源码”。 专栏推荐&#xff1a;前后端分离项目源码、SpringBoot项目源码、Vue项目源码、SSM项目源码、微信小程序源码 精品专栏&#xff1a;…

微服务与docker

准备工作 在课前资料中给大家提供了黑马商城项目的资料,我们需要先导入这个单体项目。不过需要注意的是,本篇及后续的微服务学习都是基于Centos7系统下的Docker部署,因此你必须做好一些准备: Centos7的环境及一个好用的SSH客户端装好Docker会使用Docker如果是学习过上面Doc…