为什么您的大脑比GPT -4高300万倍 - 介绍矢量数据库及其比较
#python #ai #llm #vectordatabase

最近,我必须继续前往矢量数据库世界,并为一个特定项目选择一个。哦,男孩,是骑车。最近,由于LLM的兴起,向量数据库获得了新发现的吸引力和聚光灯。这种情况既是一种祝福,又是一个诅咒,将LLM归因于矢量数据库的一些事物也将其归因于矢量数据库 - 他们的感知是“新事物”,未经测试的技术或对基于LLM的东西的好处。所有这些都是错误的。

矢量数据库与我们在一起的时间比大多数人所知道的要长。在多年的时间里,大多数人都有合法的工程,科学和严格的测试。而且其中很多,他们都有自己的怪癖,只是像RDBMSE一样,除了情况很明显,至少对我而言,在大多数情况下,在Postgres ftw中,我的意思是不再是2005年了,我们不会选择MySQL或Lamp stack,对吗?你们中的大多数人甚至还记得它是什么还是我夸大了事物?

,如果我曾经并且仍然是完全绿色的,那么我曾经并且仍然是AM。因此,我不得不四处走动,收集事实,查看内容并就每个特定数据库的意见形成我的意见,以便为我的特定用例选择一个。

我们开始之前,让我在这里放一个免责声明。我不会将自己称为AI专家。我只有我所有的个人杂音,意见,肯定有偏见。用一粒盐来拿走您阅读的所有内容,然后做自己的傻瓜。

媒介,相似性和我们惊人的大脑简介

在我们真正开始之前,我认为我们应该更深入地研究我们在周围的玩法。如果您不感兴趣地了解所有这些都在详细范围内以及它与生成AI的关系中如何工作,请随时跳过此部分并转到下一节。

首先,我们必须放置某些公理(我们都同意并接受为真实的常识/基本规则的智能词)。

这样的事实之一就是当前计算机并不真正理解单词。它们以所谓的二进制语言运行,因此是0s和1s的字符串。这与电荷,电子和原子的工作方式有关。物理学。 CS和电子产品的基础知识。

so:

  1. 计算机不了解单词,它们以二进制语言运行,即1和0,所以数字。计算机只能了解数字。

知道这很明显,我们可能会遇到一些问题。首先,如果全部只是1或0,我们如何表达不同的数字?好吧,这部分很容易,因为得益于十进制计数系统。长话短说,我们有10位数字可以表达东西,在二进制中,您有2个。这意味着您仍然可以用基本2表示其他数字,结果数将更长一些,并且以不同的方式计算。我不会在这里介绍太多的细节,您可以自己查找 - >二进制系统,十进制系统以及如何从一个转换到另一个系统。或向chatgpt询问解释。它做得很好。只需知道任何自然数字都可以轻松地从基本十到二进制,例如二进制中的小数为“ 100”中的“ 4”。它们具有等效价值,但表达方式有所不同。对于浮点数来说,这种情况更为复杂,但现在不要进入。

因此,抽象的第一层降低了。我们有计算机。电的。电子。高电流/低电流,电流/无电流。 1和0。

现在,我们的这1和0s可以神奇地成为数字。这就是我们的计算机运行的 - 在每种情况下。当您深入挖掘时,您在虚拟世界中与之互动的所有内容实际上都是一个数字,因此,这些小小的计算机中的特殊配置要么在计算机中具有电力,要么没有它们,否则将其解释为一个数字。想象3个灯泡。第一个是第2和第三名。 1-0-0。我们神奇地同意这意味着4。现在使大小尺寸缩小大概一千次,一百万次之类的东西,您会知道您的那个闪亮的Macbook中发生了什么。回到主题。

数字。是的,那时我们已经并且能够以某种方式解释您的计算机的当前状态,或者是特定号码的一部分。

现在这不是很有用,对吗?我们,人类主要在文本和语言上运作,对吗?是的。想象一个您必须解码数字的世界。在某个单词的魔术词典中。现在,计算机不会那么有用,他们会吗?但这就是背景中的外观。很久以前,一些聪明的家伙聚集在一起,从现在开始,如果我们知道我们正在处理文本,我们应该将数字65解释为“ A”,“ B”为66,等等。当然,它改变了,不同的人有不同的标准和协议,但是谁在乎,让我们简化。我们开始理解第二个公理:

  1. 作为社会,我们已将某些角色/含义分配给特定数字,在这种情况下是字母。

现在我们拥有计算机,可以理解数字,并且我们知道哪些数字在哪些字母中,我们可以开始形成单词。如果您有单词,则可以有句子,代码,什么。这更有用。您的所有软件都建立在这个基本真理之上。

现在,我们知道所有单词实际上不过是您的计算机的数字,我们可以走得更远。

对于计算机,一个给定的单词,无论上下文,基于上述上下文,都具有相同的“含义”或“值”。因此,即使您可以说“家具灰尘”,例如干净或“家具上的灰尘”,就像一团糟一样,计算机的代表(以及含义)也将保持不变,即使有两种完全不同的东西,即使有两种完全不同的东西。因此,即使我们可以为计算机的一个独特数字转换一个单词,因此它“知道”,怎么了,有遗漏的“上下文”来判断含义。

  1. 单词仅表示为二进制数字缺乏上下文。

好吧,人类可以在做邪恶的事情的方式方面巧妙,但也可以以伟大的方式做事。这里的一个示例将是上下文化的单词嵌入。这代表什么?好吧,让我告诉你。

因此,我们现在有一个简单的情况,即将一系列的1s和0s变成数字,数字为字母,然后将单词变成字母。您已经理解了,对吗?我们有点解释了这个问题 - 缺乏背景。出色地。我们开发了使我们能够根据其上下文或语义含义生成不同单词的不同和唯一的数字。因此,如果我们在上面的示例中使用了上下文化的单词嵌入,那么“灰尘”家具的“灰尘”将获得与“地板上的灰尘”一词完全不同的数字。现在,计算机知道这两个含义不同!这是如何工作的?这是一件工作,让我告诉你,但是我们不会在本文中介绍它。首先,我必须了解自己哈哈。

长话短说,我们有一个神奇的功能可以做到这一点:

number_representation_of_a_word_and_meaning("dust", context="dust on the floor") == 42
number_representation_of_a_word_and_meaning("dust", context="dust the floor") == 24

这些值不是随机的 - 在某些上下文中具有不同含义的单词可能具有分配给它们的数字非常不同。一个与另一个相距甚远的数字。如果含义相似,但根据上下文略有不同,我们将拥有彼此接近的数字。

number_representation_of_a_word_and_meaning("bark", context="bark is a noun") == 12
number_representation_of_a_word_and_meaning("bark", context="bark is a verb") == 19

为什么? “树皮”和“树皮”都与外在保护或覆盖的事物有关。如果狗吠叫通常是危险的标志,这与安全性,保护有关。这棵树有树皮,以保护自己免受环境的侵害。还是不同的,但是这次我们至少在某种意义上分享了某个共同的主题,因此我们得到的数字比以前的情况更近,因为它们更相似。

  1. 在特定上下文中转换为数字的单词的相似含义比根本不同的含义更接近彼此。

顺便说一句,您可能想知道什么嵌入?为什么我没有早些时候描述它?因为我们需要了解上述内容才能理解嵌入。或多或少,这是我们描述的,因此,即使在原始价值不相似的原始价值方面,基于特定标准集(在我们的情况下是语义含义)的数字的方式也是如此。因此,在嵌入世界中,“灰尘”是一个数字,比“灰尘”更接近“干净”。至少这就是我的理解方式。和“灰尘”如“灰尘”中的地板都远离“地板上的灰尘”或“污垢”。

好吧,这有点棘手,但是我们最终到达了那里。

再次让我重申。我们有电子,然后是电力。由于电力(或更精确的高/低电流),我们有1和0,因此是二进制语言。接下来是数字,二进制数字,因此只有数字,但仅以1 s和0s表示基础2表示,它被转换为基础10,因此我们人类大多使用的十进制系统(不一定地,并不总是大声笑)。然后,这些数字被简单地映射到具有相同值的单词,而不论上下文,含义在基本情况下。

但是,如今,我们对此进行了迭代,并可以根据文本或句子的上下文(句子transformers听起来很熟悉?)及其语义含义分配不同的含义并分配不同的数字。有关变压器模型的开创性出版物。去看看。顺便说一下,看看它的出版年度,以及我们从理论上的东西变成了像GPT-4一样令人惊奇的东西。疯狂的。无论哪种方式。语义含义,嵌入和变压器模型。这就是LLM或Generative AI听起来如此令人信服的原因,好像它真的知道它产生的东西一样。不,不是。它只是处理数字,他们并没有内在地理解含义,他们知道1比24更接近24,这是42,这是所有事物的答案。看看我在那里做了什么?这并不意味着它“理解”人类意义上的含义,以及为什么我完全确定Agi(人工通用智能),因此“真正地”以最人性的方式思考的东西是如此遥远。当前的技术和模型,根本不像我们假设的那样工作。

好的冠军。我们将这些词映射到不同的数字,这些数字要么靠近或更远,具体取决于特定上下文中的语义含义。现在怎么办?

好吧,数学魔术进来了。我不是数学上的人,我确实喜欢思想练习或基本和真实地代表它可以提供的东西,如今我很难解决二次方程,这只是一个简单的高中辍学,但是让我与您分享我对这种绝对马里级现象的理解。

所以,数字。在数学中,我们有这个叫做代数的东西。这是对随着时间变化的事物之间关系的研究,这些关系随着时间的流逝而变化,这些关系通常由符号(通常也可以代表事物)表示,通常是数字。什么? ... 是的。那也是我对这一说法的反应,至少是过去。让我们更容易消化。简而言之,对于我们来说,数字是使我们能够衡量现实,计算事物的事物,它们是您可以说的现实的基础。几乎所有内容(或者正如某些人会争论的那样 - 给定适当的公式,都可以表示为一个数字。无论是身体的长度,厨房中的苹果数量,还是像人类语言一样抽象的东西,甚至是单词的含义,我们上面已经证明了这一点。但是,这与数学和“真实”内容的特定分支有关。在这里数字是内在的,简单的,自然的,最好的。在一组规则集的情况下运行的数学分支又如何呢?不同的宇宙?好吧,数字可能不是最佳的基本操作单位,在不同的宇宙中,我们可能需要不同的基本构建块,或者我们可能想接受数字并将其扩展一点,以使生活更轻松。

这样一个例子是线性代数的研究。线性代数具有“向量”(实际上是具有某些其他内容以抽象思想并使生活更轻松的数字)与基本代数具有数字/符号/变量相同的方式。我不会在这里介绍太多细节,因为我的理解也不是那么完美,也许我会吐一些gibberish,但我希望您能得到类比。

因此,在线性代数中,我们有矢量空间,这些矢量空间与矢量有关,这些矢量与“空间”一般有关。空间听起来可能很熟悉,因为我们谈论了它。还记得在特定上下文中给定单词含义的数字之间的“距离”吗?是的,同样的东西也要说。

空间可以具有许多“维度”,与向量类似。如果您有一个维度,那只是[1]。如果我们有两个,例如X&y轴,我们可以通过每个维度有两个数字来定位一个点,例如[1,1],如果您记得中等学院数学课上的任何东西,这应该会敲响铃铛。

如果我们有3D空间怎么办?好吧,类似的东西。请注意,每个额外维度如何乘以所有可能的向量的数量。因此,假设我们正在研究有限的自然数量,即10。在1D情况下,我们有10个选择。在2D空间中,我们有10可能的第一个可能性,第二个可能性为10个,总计为10 * 10 = 100个可能的不同组合。如果3D?你明白了。

现在,想象一下,如果我们的工作范围更大(例如65536或256)而不是3个维度,而是1536!那太疯狂了。绝对疯狂,但也使我们的LLM似乎在单词的含义和什么not中看上去似乎有很多细微差别。

我知道这是一段漫长的题外话,但请忍受我。再次。我们有电子,然后是电力。是的,我将再次重复。基于语义含义的单词的数字表示。因此,在给定上下文中,我们有一个含义的数字。然后,这个数字变成了生活在向量空间内的向量。为了适应许多含义和上下文以及我们的行动,言语和语音的上下文如何,该向量空间应具有适当数量的维度。它不会太多,因为它会变得太大无法处理。 Openai定居1536个维度。请记住,每个“维度”可以分配一个不同的“值”,因此可能的含义总数是the_max_number_we_operate_on至1536的功率。

我们从1s和0s到1536个维度或“含义”中评估我们的单词。对特定含义越真实是这个词,它将在该维度中获得的值越高。

您可以看到我们现在有问题。我们如何实际处理如此庞大的数据?传统方法实际上不是很好,或者在计算或经济上的昂贵。这就是我们所说的“维度诅咒”。处理这些内容,例如显示出大约最近的邻居搜索问题。含义:如何在非常高维空间中找到类似的向量(数字)?

为了解决这个难题,我们提出了层次的通航小世界或HNSW。那是什么?长话短说,即使空间是如此巨大,通常在大型网络中,例如。尽管大小规模,但大多数节点都可以从网络中的任何地方达到大多数节点,但步骤令人惊讶。它通常被视为“六台电话规则”,其中指出您最多可以从世界上任何人打来六个电话。您认识一个认识某人的人,然后繁荣。您的信息传递给了奥巴马。实际上,这很有趣。重要的是要注意的是,并非网络中的所有节点都平均连接。这些东西称为超声连接器,它们连接到许多节点,相反,节点有点寂寞。我认为您明白了一个想法,并看到了生活中的榜样 - 几乎每个人都知道一个似乎在各地都认识每个人的人。无论哪种方式,当我离题时。如果我们采用这个小世界的事情,并在其中添加了更多东西 - 层次结构,即使管理如此大量的数据也可以可行。它是什么样子的?简单的。用企业组织图来思考。好像,您是您是首席执行官,想知道您公司是否确实像人类一样在Python中使用类型提示。在HNSW中,该方法将首先选择一个候选人,谁可能知道公司中很少有选择的人(MBY HyperConnectors应该位于顶部?;))。假设是首席/导演水平的人。因此,您例如拥有PeopleOps总监,产品总监,工程总监等。在这些内容中,工程总监的语义价值将与“我们使用python中的类型暗示”最相似。所以我们去找他,然后在那里重复这一过程。但是,无论出于何种原因,我们的家伙都很懒惰。他不想检查或写答案,所以他委派。 - >导演知道谁,在层次结构中是谁是他下方的级别(这些是他最了解的人,他不太了解那些人太少了,因为他经常与他们不经常互动)应该知道答案吗?因此,他重复了这一过程:前端团队的工程经理,EM在Devops,EM在后端团队中。后端团队是。

现在,这个过程被重复了,直到我们达到了层次结构的最底层,有多少人可以决定。

以这种方式而不是首席执行官在最坏情况下要求最多的n人数,假设只有最后一个人知道,则只提出了最多n次的问题,而n是我们拥有的层次结构中的n层数。或类似的东西。

当然,如果他向所有人问这个问题,他将拥有更好的数据,并可以选择最佳答案。在使用HNSW的情况下,他将获得的那个足够好(我们想要的良好需要我们定义某个指标,但是答案所需的准确性越准确,计算上的欺骗性越多),但要获得的成本要少得多。认为STH像推出一项功能,该功能涵盖了2周内80%的需求,而将其完善到2年内达到99.99%。当您加重利弊,成本/收益时,80%(或50或95)通常足够好。

哇。长话很长,这就是使我们能够处理如此庞大的数据的尺寸如此之高,可以容纳各种环境,细微差别和含义,例如人类的言语或思维过程。

现在可以想象我们的大脑在比这更高,更富裕的水平上这样做,他们一直在不断地做到这一点,它们都适合像我们的头骨这样的小东西,并以每小时24瓦的功率运行。相比之下,GPT-4硬件需要大量数据中心空间,估计每小时7.5兆瓦。因此,在 312 500X 上少了,而做一些成熟的东西的工作要千万倍。飞行的FK。我们是自然的奇迹。令人惊叹的,令人奇怪的奇迹,但仍然是一个奇迹。另外,请记住,我们的大脑不会将100%的马力献给有意识的思维过程。根据我发现的Auburn Unviersity论文,认知神经科学家认为,只有5%的认知活动是有意识的。因此,将这个数字乘以20到100。让我们保守并出于某种原因说10。这仍然是GPT-4的效率的300万倍以上,同时至少具有更大的复杂性(或至少n)。我惊讶地被带走了。

tldr:
电子 - >电 - >二进制 - >二进制数 - >“人类”或基本10个数字 - >字母 - >字 - >单词 - >嵌入 - >(语义上)上下文单词嵌入 - >向量 - >向量空间 - >高维矢量空间 - >大约是近距离邻居搜索或仅仅是最近的邻居搜索(ANNS/NNS) - > ANNS/NNS) -

吸收所有这些术语并写下来。

从这里开始,我们几乎完成了。如果您一直在密切关注,则可能会开始将难题拼凑在一起。

llms实际上只是算法,非常复杂的算法,它们已经索引或摄入了许多数据/单词,对它们及其含义及其在特定上下文中的含义。然后,基于这些数据,他们只是基于上下文“猜测”,如果我们在语义上下文中具有这种特殊的事物或含义,因此嵌入了嵌入,因此在高维空间中的nubmers或向量,就在这里,就在这里,我们可能会想到这种特定的响应,这是其他嵌入的一组。

通常,当我们谈论嵌入时,我们会处理令牌,这通常不是整个单词,而是英语中的4个字符。

因此,如果基于上下文和近似值,我们知道此特定查询似乎是将与此特定令牌介绍的内容,我们将使用它。然后,如果我们有一个令牌,我们可以重复该过程,直到开始触及较低的降低,这又意味着我们可能会在答案完成时停止生成。

所以...是的。没有想法发生。只是掩盖数字和猜测。你读了正确的。 GPT-4根本没有“思考”。与普京成为好人一样,它与人类意识相距甚远。这根本无法接近。因此,这就是我晚上不用担心的原因(至少至少)Agi会来代替我或进行反对人类的意识。

牢记,我对这些东西的理解非常有限,我都是新手。我不仅为读者而且对我自己简化了很多。如果这是不公正的,请告诉我。一路上我已经搜索了大多数东西。

哇。该死的很长。

让我们回答最初的问题。那矢量数据库如何工作?好吧,他们接受了文字。对其进行矢量化。嵌入在高维空间中,然后如果查询它,他们会搜索大约类似的令牌/件/文本。简单,对吗?

现在结束了,让我们在开始文章时想到的东西,因此比较向量数据库和使用一些更受欢迎的数据库。

起点-Chromadb

我的起点是chromaDB。它使我能够快速而无缝地跑步。它很简单,完成了工作。但是,这不是最好的方法。用于POC?是的,它确实完成了工作。但是,对于更严肃的,潜在的生产级东西?没有给出我的实施方式。

长话短说,对于POC,我通过刮擦的知识中心应用程序创建了这个问答。我需要一个vectordb diseprart。 Pinecone的出于理想的原因,我在文章中列出了纪录,即使我说的是最容易实施的。有诸如faiss之类的东西,没有什么,但是在初步探索的选择中,选择的选择落在了Chromadb上。

我使用了一种非常肮脏的方法,在该方法中,我将其包装在一个具有应用程序的API后端部分的容器中。 Chromadb在我的项目存储库中的某个目录中以某个目录的内部格式持续了矢量。我只是简单地将其授予回购。我知道不是最好的。

现在,整个VDB(向量数据库)是我们存储库的一部分。我本地摄入了我在VDB中需要的数据,然后将VDB的状态致力于回购。

Chromadb被添加为项目依赖性(安装它非常微不足道 - 只是一个Python软件包),以pyproject.toml和boom。在应用程序启动和繁荣期间,在代码中的某个地方将其初始化,您完成了。同样,这是非常肮脏的方法。

API与DB相同的容器包装。在此设置中,VDB的设置更改并不能真正持续,除非您将其归于存储库,否则仅将其提交为国家事务(因此仅阅读应用程序或回家冠军)。他们共享资源。如果一个失败,另一个也是如此。鉴于我们有只读应用程序,这是可以扩展的,所以它是独立的,但是...

Git Repo变得很大,很快。 Docker Image构建时间的时间很长,我的标准很长。我的意思是想象一个简单的FastApi应用程序为25-30m的时间。并非完全理想。这是因为Chromadb在容器内部,并且每次代码更改时都必须重建以下事实,您可以想象,重建DB软件包可能很耗时(看您,Psycopg)。

我们无法长期继续使用这种方法。 OFC您可以将Chromadb作为一个独立的容器,自托管,但是当时我不需要POC的开销。当时,据我所记得的,也没有选择进行适当的聚类,这可以使您获得产品级的可扩展性,survavibality等。 TLDR:您可以使用一个实例运行,仅此而已。我还没有看到Helm/K8S OOB支持,这使得可以轻松在某个地方的集群中部署。最重要的是,其他项目还在进行中,那又如何?他们每个人都应该有自己的实例吗?我们将如何共享数据?所有这些都意味着它必须消失。

,但它使我能够下台,快速整合,学习很多,依此类推。为此,它做得很棒。

此外,需要说的是,当时我在创建该项目的某些功能不支持几个月前 。从那时起, Chroma已关闭了1800万美元的种子回合,开发了一个坚实的路线图,并开始解决此处提到的一些问题。我们与Chromadb的创始人Jeff Huber进行了很好的谈话。我真的很喜欢他的谦虚和乐于助人,足以承认,考虑到项目和生产的先决条件 ,Chroma 当时 并不是最好的选择,而为我们的需求选择其他东西是一个明智的举动!他是一个非常聪明,热情和聪明的人,,所以我非常渴望看到他们的发展,,但是直到我们看到发货的功能,在我们想到的用例中,这是不做的。但是,要开始,请在内部使用DB的单身应用程序,并在4H而不是4天(我知道我都会出现)?当然,为什么不。如果我要与人们更熟悉的东西进行比较,RDMBSES,我会说目前的色度就像SQLite。现在更容易理解它可以发光的地方,而不会在哪里?伟大的。还请记住,我的方法很简单。如果正确执行此操作,设置所有适当的东西,很好地配置它,遵守最佳实践,那么您可能不会遇到任何问题。我没有这样做,缺乏时间和专业知识。

这里需要进行简短的编辑。我已经与Jeff(感谢)一起对此进行了审查,他阐明了其中大多数问题在v0.4中的增加。

他们在设计上进行了建筑转移,更改了存储引擎,现在的构建速度至少要快20倍(现在使我的观点无效),需要更少的内存(不过,这不是问题,但可以看到它是好的),并且表现力和耐用性和耐用性(即使在4月,我都没有遇到任何耐用性问题)。总体而言,正如我在从杰夫(Jeff)那里获得信息之前所预料的那样,这是很短的时间,但他们取得了惊人的进步。这使我稍微改组了提议的一部分,这是 +即将来临的变化,使Chroma成为有力评估的候选人。我仍然需要更多地参与其中才能看到确切的进步,但似乎很有希望。

所以,现在,我在做出选择时所提到的大多数内容 - 四月,现在不关心。请记住这一点。

下一步

因此,如果Chromadb不在图片中。接下来是什么?让我们看看那里有什么。

让我们从很快失败的东西开始。

松果

长话短说。这是一个黑匣子,在某个地方,VDB作为服务。所有权。没有。我想控制我的数据库的部署,居住等的数据。对不起。隐私和合规性不会与我自己一样幸福。

faiss

这只是一个库。没有一个完整的VDB。与色度相比,这将是一步一步,所以没有。但是对于微小的POC?可能的。评估它。我没有详细地做。

风筝

这似乎很有希望。最初,我以为我们会和他们一起滚动。答应了所有新的闪亮的好东西,但后来我实际上开始使用它。有麻烦甚至索引数据。开始遇到错误(或文档解释不够愚蠢的东西以至于我可以得到它或根本没有解释),我不适合的怪异边缘案例和并发症。如果我刚刚将其插入,则运行了基于Langchain的数据启动服务,我就完成了。这里?忘了它。然而,在Docker本地跑步却很不错,而且在K8中少了一点,但仍然可以通过。操作系统,自托管版本和本地 +云的奖励积分。如果我要在Chromadb的情况下进行类似的Comaprison,我会说Milvus是Vector Database World的旧Oracle DB。另外,我听到了一些类似的观点和关于Ceratin可疑的起源/实践和政策的未经证实的谣言。确实有前途,但最终成为了最后一分钟的失败。

最终我确实成功地摄入了数据等等,但是结果并不令人满意。表现还可以,但我感到沮丧。

PGVECTOR

这个人极大地失望了。

表现不佳。不寻常的基础算法选择。准确性的一些问题,尤其是当并发发挥作用时。仔细考虑集成的便利性值得。在我看来,这 +表现不是。看看基准。至少可以说是不满意的。

还发现,对于Postgres标准,它的扩展相对较新,因此不受任何支持。

是我这么说的是,这是邮政团队的家伙。但是Postgres是一个很棒的RDBM。同样,它不专门研究向量。

这里的好处是,它是标准的基础架构,将您的数据放在一个地方,所有其他好处Postgres都带来了。它仍然是有用的软件。

牢记,在AWS世界中,Aurora尚不支持它。这意味着如果您在Aurora世界中,则需要使用启用PGVECTOR的单独的基本邮政实例。这消除了主要好处。

但是,如果您不在乎,您正在运行自己的PGVECTOR实例,只是想开始?嗯,也许。因此,可能有一些相关且有效的用例,但在我的情况下没有。

也不存在性能,尤其是当考虑并发并吞吐量时。我们无法将其部署到Aurora群集中,我们需要去单独的RDS。我想我会通过,但是由于Postgres品牌,它确实很诱人,它是如此可靠和普遍,但是让我们考虑一下borader的图片 - 这是第二次迭代,我期望以适当的未来的方式来完成事情。

对于rdbms,只需邮政。对于VDB?三思而后行。

Redis

redis是一个可能的候选人。很好的表现。标准基础设施。每个人都知道Redis,对吗?虽然在薄的一侧。我不确定是否有一段时间就足够了。但是我把它保留在适当的位置。它或多或少地工作了。然而,在我看来,Redis并不专门从事矢量。这是关键价值存储。这不是他们业务的核心。当然,只能部署redis并完成它会很高兴。每个人都知道Redis。但是,我的脑海中浮现出来,这是正确的,例如。鉴于他们最近的Redis图日落。

但是,如果您已经在某个地方运行了REDIS群集,则可能就足够了。

当然有一个完美的问题,但这是可以接受的。

所以,是的,可行的选择,但做出有意识的决定。

Oth

开源?查看。自主选择?查看。云,如果你懒吗?查看。 K8?查看。聚类?查看。生存?查看。表现?删除图表。社区?伟大的。与Langchain和其他Libs集成?是的。一行Docker,您很高兴在当地去吗?你敢打赌。我被卖了。

,但随后变得更好。在注册他们的云提供的几个小时内,创始人与创始人接触了我。继续做你在做的事情。之后我们举行了一次会议。巨大的知识。我真的很喜欢他们在某些博客文章中所强调的精神,尤其是与关闭种子有关的文章中的价值观。安德烈的写作很敏锐。 Snarky关于这篇文章没有由Chatgpt撰写的文章获得奖励积分(顺便说一句,会偷那个)。

他们提供了帮助(尽管我当时没有赚钱一毛钱,并指出一切都将是这种情况。满足我们的需求。如果出现问题,共享的松弛渠道?你去。您想了解更多吗?当然,这是资源。讲习班?可能。

此外,对@kacperÅUkawski的大枪击事件,这只是爱上了传播知识并帮助人们。他提供了许多见解,并提供了帮助以开始。真正的有益的东西。教程,博客文章,与最受欢迎的库集成。

在云中免费提供测试物品(实际上可以带您前进的东西?)提供给任何人。

QDRANT在我的经验上赢得了绩效,可伸缩性,耐用性,易用性,功能集,灵活性,最重要的是社区以及公司价值观。

最重要的是,您可以在几分钟之内开始。最佳性能,最容易使用和设置,有据可查,良好的社区。清晰获胜。

您可以看到我完全有偏见和出售,所以请用一粒盐来验证上面的所有内容。但是,我将保持看涨

编织

在这里听到了一些好东西,尤其是关于功能集。但是没有亲自尝试。与QDrant Tho相比,他们确实必须提高性能,但这可能是一个有效的潜在选择。再加上他们的社区看起来不错。或者我之所以受到偏见,是因为@philip Vollet,所以他们的开发成长负责人嘲笑我关于PGVECTOR的笑话,所以他似乎以与我自己相似的方式咸,这又暗示了好东西。嗯,奥拉夫和他的恶作剧。无论哪种方式。检查一下,应该可以。

概括

  1. QDRANT岩石和获胜。在所有类别中。这是VDB世界的邮政。
  2. 编织似乎也很不错,但不要在那引用我。功能看起来不错且丰富。
  3. Pinecone可以在几分钟之内开始,但是QDRANT也是如此,为什么您会将自己锁定在他们的生态系统中?再加上性能和价格,但对于某些人来说,可能是托管心态和便利性的有效选择。
  4. Chromadb缺乏某些功能,但是很快就会发展,但是对于我们需要真正的群集的较大项目或情况,它需要评估和观察。对于具有适当设置的较小较小的人,我会说这是一个有效的选择 +注意它们的开发和即将到来的功能。有点像VDB世界的Sqlite,但目前在类固醇上。
  5. redis是可以接受的,但不发光IMO。积极的惊喜性能明智。这不是他们业务的核心,而且他们似乎是在某些不属于Redisgraph的核心的日落。
  6. PGVECTOR令人失望,但在某些用例和场景中仍然可以有效,它列瓦拉奇(Postgres)品牌和收益也可以实现某些限制。不要指望出色的性能或并发。
  7. Milvus是我远离的。 VDB World的旧Oracle。
  8. 对于任何可能产生生产的东西,faiss都是不做的,只是一个自由。对于简单的游戏爱好项目?为什么不。

是的,这是由人类在4小时长的状态驱动的不间断创造力的动力行为中撰写的。这很有趣,我实际上学到了很多东西。
我几乎一头写了这句话,除了较小的东西,或者包括杰夫的反馈。我将其保留大部分未经编辑,并带有原始措辞和错别字。