Redis 最近宣布了 向量集的添加,这是一种用于向量相似性和新 AI 应用选项的数据类型。这种新的数据类型标志着 Redis 的创建者 Salvatore Sanfilippo(又称'antirez')自 重新加入公司以来的第一个重大贡献。
摘要
Redis 8 版本引入了名为向量集的新数据类型,旨在优化 AI 应用中的向量相似性搜索。向量集与有序集合类似,但它使用向量代替分数来关联字符串元素,支持根据指定的向量查找相似的条目子集,并支持过滤搜索。该功能由 Redis 创始人 Salvatore Sanfilippo 主导开发。它基于 HNSW 算法,并进行了多线程优化。向量集适用于多种 AI 场景,如 RAG、语义缓存、推荐系统和人脸识别。此外,Redis 还推出了 LangCache,用于减少 LLM 的调用延迟和成本。向量集在 Redis 8 RC1 中以预览版提供,采用 RSALv2 或 SSPLv1 许可。
主要内容
-
- 向量集是 Redis 8 中的新型数据结构,它使用向量代替分数,优化了 AI 应用中的向量相似性搜索。
向量集通过基于向量的相似性搜索,为 AI 应用提供高效的数据检索能力,降低了开发复杂性。
-
- 向量集基于 HNSW 算法,并进行了多线程优化。
通过对 HNSW 算法的优化和多线程技术的应用,向量集实现了高性能的向量相似性搜索能力。
-
- Redis 还推出了 LangCache,用于减少 LLM 的调用延迟和成本。
LangCache 通过缓存 LLM 的响应,降低了 AI 应用的延迟和成本,提升了整体性能和效率。
向量集是一种新的数据类型,类似于 Sorted Sets,但其元素与向量而不是分数相关联,使得可以添加项目并检索与指定向量最相似的项目子集。还支持过滤搜索功能,允许同时进行向量相似性和标量过滤。Sanfilippo 在他的博客中解释:
新数据结构的目标简而言之,是创建一种新的"类似集合"的数据类型,类似于 Sorted Sets,其中不再是具有标量作为分数,而是具有向量,并且可以以 Redis 的方式添加和删除元素,无需关心任何其他内容,只需关心 Redis 实现的数据结构的属性,请求与给定查询向量(或集合中某些元素关联的向量)相似的元素,等等。
向量集基于 hnsw.c
实现的 HNSW 数据结构,具有加速和功能扩展。Redis 的 CEO Rowan Trollope 对 Sanfilippo 的贡献表示赞赏:
他的专业知识导致创建了一个既简单又直观的 API,这体现了 Redis 以提供高性能解决方案同时保持简单性的理念。
向量数据库对于由 GenAI 支撑的应用程序至关重要,用于检索语义相关的信息以丰富 LLMs(RAG)的上下文。其他用例包括聊天机器人的语义缓存、推荐系统和人脸识别。Redis 的产品经理 Mirko Ortensi 在另一篇文章中解释了如何 使用向量集进行人脸识别。Ortensi 写道:
人脸识别的关键在于向量。它涉及使用专门的嵌入模型对已知人脸进行建模,存储在 Redis 中,并通过在数据库中存储的向量上运行向量搜索来进行人脸识别。

来源: 米可·奥尔森蒂
Sanfilippo 补充说:
我决定实现向量相似性的基本要求之一是对 HNSWs 进行从头开始的重新实现(您可以在 hnsw.c 中看到我的实现),因为这将是我的核心数据结构,我不想从 GitHub 上随便找一些代码并满意于它。
以高性能为重点,Sanfilippo 不仅对 HNSW 进行了修改,还为所有向量相似性请求引入了多线程,并支持 8 位和二进制量化。他强调了自己实现的主要区别在于:
向量集最有趣的部分是其数据模型和 API。许多数据库将向量相似性作为一种索引提出,但这是 Redis,Redis 中的东西都是数据结构:这次也不例外。
向量集并不是 Redis 的新功能唯一一项:LangCache,一个为 AI 应用程序和代理设计的语义缓存服务,旨在通过缓存其响应来减少成本高昂且延迟的LLMs调用。
向量集在预览版中可用,可在 Redis 8 RC1 下使用 RSALv2 或 SSPLv1 许可。