作者 | 李冬梅
各行业的公司越来越认识到,制定数据驱动的决策是现在、未来 5 年、未来 20 年甚至更长时间内竞争的必要条件。数据增长(尤其是非结构化数据增长)达到了前所未有的水平,数据泛滥和人工智能时代已经来临。
这一现实隐含的是,人工智能可以对海量数据进行有意义的分类和处理——不仅对 Alphabet、Meta 和微软等拥有庞大研发业务和定制人工智能工具的科技巨头是这样,对普通企业甚至中小型企业而言也是如此。
精心设计的基于人工智能的应用程序可以极快地筛选极其庞大的数据集,以产生新的见解并最终推动新的收入来源,从而为企业创造真正的价值。但是,如果没有新出现的新事物——向量数据库,任何数据增长都无法真正实现可操作性和民主化。
随着大语言模型的爆火,向量数据库也成为了热门话题。只需几行简单的 Python 代码,向量数据库就可以充当大语言模型廉价但高效的“外部大脑”。但我们真的需要一个专门的向量数据库吗?向量数据库究竟是炒作还是刚需?
近期,在北京 QCon 大会之际,InfoQ 有幸采访到了 Redis 高级架构师史磊,听他聊一聊 Redis 向量数据库技术实践。
在 9 月 3-5 日即将召开的 QCon 北京 2023 上,Redis 高级架构师史磊将带来以《搜索、探索、求索:Redis 向量数据库》为主题的演讲分享。会前,InfoQ 对史磊老师进行了专访,听他聊一聊 Redis 向量数据库技术实践。
以下为访谈实录,经编辑。
InfoQ:史磊老师您好,能先做下自我介绍吗?
史磊:我目前在 Redis 工作,担任高级产品架构师,负责管理 Redis 在亚太区的技术事务。我的主要职责是协助 Redis 客户优化他们的 Redis 实例,指导他们在使用 Redis 的新功能时能够得到最佳体验;以及帮助 Redis 在中国的服务商取得成功。
作为 Redis 原厂,我们维护着开源社区版,并且提供了企业版(Redis Enterprise)的软件。在亚太区,越来越多的客户开始了解 Redis 企业版的价值。然而,目前大多数人对 Redis 的理解还停留在开源版本或者一些经过修改的第三方版本上,对于 Redis 的核心功能和应用场景可能了解有限。因此,我主要的使命是帮助客户更好地利用 Redis 提供的工具,解决实际问题,满足业务需求。
我在去年加入 Redis,之前我在新加坡从事科研工作,后来在一家金融科技创业公司负责开发 AI 产品。在那个公司,我已经使用 Redis 大约七八年时间,但主要限于开源版。加入 Redis 原厂后,我更深入地了解了 Redis 企业版,掌握了更多强大的功能。我希望借助自己的经验,帮助客户充分发挥 Redis 的潜力。
InfoQ:您是什么时候开始关注向量数据库这个领域的?
史磊:在加入 Redis 之前,我主要从事 AI 和大数据方面的产品开发。我涉猎过特征生成、存取方式以及实时 AI 处理等领域,并使用了许多工具。然而,直到我加入 Redis 原厂,我才真正了解到 Redis 也在向量数据库方向提供支持。Redis 的这种布局实际上已经有一段时间了。
我们最初是通过一个搜索模块来支持搜索功能,这个模块从大约 2018 年开始就存在了。Redis 2.0 的搜索功能将其提升到了一个新的水平,使其更加容易和方便。从 Redis 2.4 开始,也就是去年 3 月份开始,我们正式支持向量搜索。在大型语言模型引起轰动之前,Redis 就已经开始在向量数据库领域布局。由于 Redis 在各行业广泛应用,一经推出向量搜索功能,全球范围内的许多客户就开始使用了。
随着大型语言模型的兴起,向量数据库的应用进入了新的阶段。起初,人们可能只是用向量查询来处理简单的图片、视频、音频或文档等内容,提取和搜索一些基本的向量特征。但随着大型模型的普及,人们开始探索如何更好地使用向量数据库,将其应用到更高的维度、更广泛的范围以及更快的请求速度上。对于一个向量数据库而言,以前大家的认识更多是小众、性能要求不高,而现在这些观念正在被快速转变。在这个过程中,Redis 经历了很多考验。作为一个向量数据库,随着大型模型的兴起,许多核心企业应用,比如像 ChatGPT、OpenAI 这样的应用,开始在后台使用 Redis。这使得 Redis 在满足客户需求方面有了更多的合作机会。
同时,Redis 的搜索模块也在不断发展壮大。我们通过收集来自客户的第一手资料,产品团队将客户在实际应用中遇到的需求以及在 AI 和大数据环境下的新需求,迅速转化为产品,更好地为客户提供服务。
InfoQ:我注意到您提到了 ChatGPT 和 OpenAI,他们已经在使用 Redis。那他们是否将 Redis 作为唯一的向量数据库使用?这方面有哪些信息可以分享吗?
史磊:根据我了解,ChatGPT 和 OpenAI 并不仅仅使用 Redis 作为唯一的向量数据库,他们也在与其他向量数据库合作。因为技术的更新和迭代非常迅速,Redis 已经成立了专门的团队来负责向量数据库的研究和开发,并与多个不同的企业合作。
在 Redis 的官网上,我们已经展示了与许多 AI 大模型领域的合作案例,包括与 ChatGPT 等的合作。然而,具体细节和哪些实际用例正在使用 Redis,以及它们的具体情况,因为这些领域变化迅速,所以我目前没有最新的相关信息。
InfoQ:您之前提到的是在 2018 年,Redis 引入了向量搜索的模块。当时具体是什么情况?我们是基于客户需求开发这个功能的吗?还是我们自己看到了这个大的趋势?
史磊:从 2018 年开始,Redis 引入了一个搜索模块。当时,这个搜索模块主要支持标量搜索,而不是向量搜索。在那时,Redis 使用中的一个痛点是,尽管它是一个内存中的键值存储系统,查询时如果不逐个扫描每个键,就没有很好的方法来根据查询条件检索数据。
因此,2018 年的版本主要是为了解决搜索这一痛点。它允许用户在 Redis 中存储大量的键,而且这些键的检索速度非常快。但是,如何在这些键中快速找到满足特定条件的数据呢?通过内部迭代和升级,从 1.0 版本到 2.0 版本,我们收集了许多客户的需求。这些需求主要集中在如何快速创建索引、如何快速执行查询,以及如何让应用程序自动完成这些操作。2020 年我们推出的 2.0 版本中就着重于这些方面。随后,在 2.4 版本中(从去年 3 月开始,在 ChatGPT 等大模型流行之前),我们正式引入了向量搜索功能。在这个过程中,我们收到了许多客户的请求,他们问是否可以将 Redis 的快速标量搜索扩展到向量化数据的搜索。我们的产品团队听取了这些客户的需求,在初期支持了基本的向量相似性搜索功能。
随着时间的推移,我们不断地加入各种主流搜索模式和算法,逐步完善这个功能,使其变得更加成熟。现在,Redis 在 7.2 版本中进行了重大更新,带来了许多新功能。值得注意的是,我们不再将搜索作为一个模块进行推广,而是将其视为 Redis 提供的主要功能之一。这意味着 Redis 不仅可以用作缓存和主数据库,还可以用作向量数据库。
InfoQ:随着功能的增加,Redis 的定位也发生了一些变化?
史磊:是的。最初,Redis 的产品定位确实是作为一种内存数据库,专注于提供内存存储,并通过模块来扩展其功能。然而,随着时间的推移,我们对 Redis 进行了重新定位。现在,我们提供了 Redis 企业版软件,将所有功能集成在其中。只要使用 Redis 企业版,就能够获得全部功能,无需额外购买或部署特定组件,即可直接使用。
对于客户而言,如果他们已经在使用 Redis 作为缓存,他们现在只需将向量存储到 Redis 中,便可以直接进行向量搜索。这对客户来说非常直观且易用,同时也不会增加额外的系统复杂性,无需引入其他产品或功能。
InfoQ:我想了解一下关于这个模组研发历程的情况,以及它在研发过程中所经历的一些迭代。此外,当它与 Redis 数据库结合时,是否遇到了什么问题?如果有技术上的难题,您是如何解决的?能介绍一下相关的技术实践过程吗。
史磊:Redis 在不同领域的广泛应用促使我们从各个领域收集了对 Redis 搜索的需求。起初,有客户提出了希望在内存中进行向量搜索的需求。我们认真倾听了这些客户的意见,并着手实现这个功能。
在实现过程中,从初始的 POC(Proof of Concept)项目开始,我们将这个功能作为一个附加组件添加到 Redis 中。随着时间的推移,我们将它演变成了 Redis 的主推功能。在这个过程中,Redis 的主产品与我们的模组功能相互协同进化。举个例子来说,Redis 企业版在解决日常应用中的痛点方面拥有许多特性,比如内建的强大代理(proxy)。这个代理能够自动将请求导向相应的分片,不管是单一分片还是集群模式,从而保证了 Redis 的存储和吞吐量能够自动调整,无需额外干预。对客户而言,借助内建的代理,可以简化业务逻辑,无需关心是单一模式还是集群模式。这同时也解决了搜索的难题,因为 Redis 每个分片是单线程模式,如果请求集中在一个分片上,性能会受到影响。但如果使用集群模式,客户端需要维护连接并了解每个分片上的数据,这会使得业务逻辑变得复杂。
企业版解决了这些困难,同时也使得搜索更加容易。在 Redis 集群版中,由于已经内置了代理,搜索请求能够自动分配到各个分片上执行,并以最低的成本整合结果。这确保了 Redis 在搜索中不再受制于单一分片的性能,同时提供更大量、更快速的搜索。这种搜索的扩展性和速度得益于 Redis 企业版内置的代理。
在开发 Redis 搜索过程中,由于需要维护额外的数据结构,如索引,我们的产品团队进行了优化,确保快速的分配和查询这些结构,使得 Redis 企业版性能比开源版有了显著提升。
此外,我们正在推出的企业版本中,包括最新的 7.2 版本,已经引入了预览版的功能。在搜索方面,我们解决了每个分片上搜索仍然受限于单线程限制的问题。通过多线程方式,我们实现了同时搜索,这在测试中已经实现了超过 10 倍甚至 16 倍的性能提升。这也说明了搜索有许多方法可以进一步优化性能,这是一个不断进化和不断完善的过程。
InfoQ:把上述功能融入到 Redis ,赋能 Redis 数据库,时间上花了多久呢?
史磊:这项技术的演进过程从最初的讨论到研究,再到研发,以及现在的预览版功能,经历了相当长的时间。根据我了解,这个功能的实际测试时间至少超过一年,从最初的讨论到实际测试的过程确实需要一段时间。而在规划和实施这些功能之前,所花费的时间绝对不止一年。
Redis 的产品团队投入了大量的时间和精力,甚至设立了一个专门的团队,负责确定 Redis 作为向量数据库需要实现的功能。这个团队需要思考有哪些核心组件可以完成这些功能,还需要与其他团队合作。整个过程需要跨足多个团队的合作,因此这是一个长期发展的过程。
InfoQ:鉴于大模型如此受欢迎,以及数据库的重要性,您是否认为在这个人工智能与大数据的时代,数据库变得尤为重要?是否必须要研发新的数据库,以满足不断增长的需求?
史磊:我认为现在的向量数据库已经成为刚需,因为它解决了传统数据库无法解决的几个核心问题。传统数据库主要基于关键词进行精确搜索,即存在或不存在的模式。而向量数据库提供的是近似搜索,当我提供一张图片、一段文字或者一个语音时,它能够找到相似的匹配项,而不仅仅是 0 和 1 的结果。它通过打分机制给出近似值,这是传统数据库无法实现的。
同时,传统的关系型数据库的索引方法也无法直接适用于现在的向量数据库。因为在底层,包括计算、数据存储以及应用层面,向量数据库与传统数据库完全不同。起初,向量数据库可能只是作为关系数据库的一个补充。然而,随着大数据、大模型和人工智能的发展,对于向量的存储和查询以及快速性能都提出了更高的要求,只有向量数据库才能够满足这些要求。
InfoQ:未来向量数据库的需求会持续上升吗?
史磊:我认为这是一个持续上升的过程。随着大模型的兴起,对向量数据库的需求不断增加。许多传统的向量数据库也在不断进行迭代和更新,一些以前不支持向量数据库的产品也在声称自己支持,不断地添加这一功能。因此,这种需求将持续存在,这是一个不断洗牌、淘汰不足的过程。
InfoQ:目前有一些人认为未来的每个数据库都会自然而然地、本地支持向量嵌入和向量搜索。您对这种观点有何看法?如果这种趋势确实出现,它会对向量数据库行业产生什么影响,可能会有哪些积极的方面,或者可能会带来哪些挑战?
史磊:从技术角度来看,几乎任何存储系统或查询系统都可以通过添加功能来支持向量搜索、查询或存储。从这个角度来说,技术上并没有问题。然而,在实际应用中,我们可能会逐渐趋向于一种或两种常用的类型,其他的方式可能会逐渐淘汰。尽管它们都是数据存储或数据库系统,但它们通过不同的方法来满足索引和查询的需求。传统的数据库很难直接支持向量查询,因为在底层设计上缺乏对向量查询的有效支持。尽管可以通过添加功能来实现,但这可能变得笨拙且不够便捷。
新兴的向量数据库可能更适应当前的需求,但它们可能会引入系统的复杂性。例如,客户可能需要同时使用传统数据库、关系数据库和向量数据库,这会增加维护、成本和开销。因此,我们需要找到一个良好的平衡点,一个系统既能满足向量数据库的要求,同时也能满足传统查询功能的需求。找到这样的组合是关键。作为客户,如果能够使用一个系统来高效地完成不同类型的功能,而不是选择传统系统再另外添加功能,维护成本和各种成本都会降低。
在这种情况下,我认为 Redis 可以很好地实现这种平衡。Redis 不仅是广泛使用的应用,作为企业版,它还提供了完整的企业级应用生态系统,可以帮助客户满足各种需求。无论是向量搜索还是标量搜索,在 Redis 中都是以 key-value 的方式存储在内存中,查询效率都很高。此外,Redis 还具有强大的混合查询功能,允许同时查询向量和其他类型的数据,如文本、数值或 GPS 信息。这种原生的混合查询功能使得 Redis 在向量数据库领域具有显著优势,同时保持高性能。
InfoQ:作为一个在数据库领域有多年经验的老师,您认为现在程序员如果希望在 AI 和向量数据库领域发展,需要掌握哪些关键技能呢?
史磊:当前技术的迭代速度极快,去年使用的产品和经验可能在今年已经变得过时,或者新的技术已经涌现。在这种情况下,我认为首先我们需要更深入地了解现有系统。以 Redis 为例,大多数人可能知道它在缓存方面表现出色,但除此之外,Redis 在其他领域的应用可能并不为人所知。作为技术从业者,了解主流产品的底层架构和功能,以及它们能够实现的功能非常重要。
我们需要不断地更新知识,尤其是在向量数据库和大模型等新兴技术兴起之后。作为技术人员,要积极拥抱新技术,深入了解它们的工作原理和应用场景。不是从已有技术跳跃到崭新的技术,而是要利用自身积累的经验,将新技术应用于现有的工作中。虽然这种技术转换是存在成本的,但我们需要找到最有效的方法来将转换成本降至最低,让技术为我们服务,而不是成为技术的奴隶。这需要经验、技术洞察力和不断的探索精神来实现。
InfoQ:老师的话确实给了我们很有价值的启示。最后,我们可以探讨一个广泛受关注的话题,即向量数据库未来的发展。当前,向量数据库已经进入了热门阶段,许多相关技术也变得非常成熟,包括向量索引和传统数据库技术。然而,人们普遍关心的是,未来的发展将会走向何方,以及我们应该关注哪些趋势?
史磊:根据我的个人观点,结合我多年来在 AI 和大数据领域的经验,以及对传统数据库的了解,我要说,几年前我无法预料到数据库领域能够如此迅速地发展至今的程度。
在向量数据库方面,我认为它的出现受到了强烈的驱动力,这种驱动力能够快速淘汰那些不合适的技术,同时也会促使新技术的不断涌现,这是一个逐步筛选的过程。从长远来看,我坚信向量数据库将不断成熟,同时也会为不同的应用场景提供更加精准的向量搜索结果。
以一个简单的例子来说明,我们可能需要实时、快速的搜索,也可能需要大规模特征搜索。在未来,这些需求可能会逐渐演变成不同的维度。我相信会有一些特定领域的向量数据库逐渐崭露头角,可能会涌现出一两个或者更多的适应特定场景的数据库类型。每个类型可能会在特定的领域得到优化,这将是一个整合与优化的过程。
InfoQ:未来向量数据库会不像传统数据库那样,在国内涌现 200 多家出来?
史磊:我认为数据库市场的持续扩张是不可避免的,这主要是因为技术的迭代速度非常快,同时技术门槛也在逐渐降低。当前存在着大量的需求,这将吸引越来越多的数据库甚至向量数据库加入竞争。然而,从业界角度看,这种市场扩张是有利的。它可以促使更多的技术和业务参与,尽管市场在一定范围内会有限制,但这将在一场竞争中筛选出更优秀的技术和解决方案,以更好地满足需求。
我希望看到更多竞争者涌现在这个领域,同时也期待看到哪些技术能够经受住应用的考验,证明自己在实践中的可行性。对我而言,这种市场扩张应当是良性的。我们不希望看到恶性竞争,也不应该是通过贬低其他应用来凸显自身的优越性。我认为这对于行业的生态是不利的。相反,我期待一种良性竞争,让人们有更多优质的选择,从而推动整个领域的进步。
史磊,现担任 Redis 高级架构师 (Senior Solution Architect),致力于使用 Redis 企业版为客户提供产品架构方案咨询及设计、性能优化、Redis 技术的应用及推广等服务。他拥有超过十年的软件架构设计开发、大数据系统调度及优化、计算机视觉、金融科技人工智能等方面的产品及技术研发经验,拥有八年多的 Redis 开发、运维及使用经验。在加入 Redis 之前,他曾任新加坡某金融科技创新公司的人工智能架构负责人(Head, AI Architect)、新加坡国立大学数据科学研究所 (Institute of Data Science, NUS) 首席架构师等职位。