徐州免费建站,建设网站了还能消除吗,宝德科技专业嘉兴网站建设,枣庄网站建设哪家强TiDB Hackathon 2023 刚刚结束#xff0c;我仔细地审阅了所有的项目。 在并未强调项目必须使用人工智能#xff08;AI#xff09;相关技术的情况下#xff0c;引人注目的项目几乎一致地都使用了 AI 来构建自己的应用。 大规模语言模型#xff08;LLM#xff09;的问世使得…TiDB Hackathon 2023 刚刚结束我仔细地审阅了所有的项目。 在并未强调项目必须使用人工智能AI相关技术的情况下引人注目的项目几乎一致地都使用了 AI 来构建自己的应用。 大规模语言模型LLM的问世使得个人开发者能够在短短 5 分钟内为程序赋予推理能力而这在以往几乎只有超大型团队才能胜任。 从应用开发者的角度来看AI 时代也已经到来了。
在这些 AI 应用中向量数据库的身影是无处不在的。尽管这些项目大多仍在使用关系型数据库但它们似乎不再发挥一个显而易见的作用。关系型数据库究竟还值不值得获得应用开发者们的关注呢
为了解答清楚这个问题我们需要了解一下向量数据库到底跟传统的关系型数据库有什么不同。
什么是向量数据库?
为了搞清楚这个问题我花了一些时间研究了一下向量数据库。接下来我讲用最简单的语言来解释什么是向量数据库。
这个世界上的大多数事情都是多特征的比如你描述一个人可以用身高、体重、性格、性别、穿衣风格、兴趣爱好等等多种不同类型的维度。通常如果你愿意的话你可以无限扩展这个维度或者特征去描述一个物体维度或者特征越多对于一个物体或者事件的描述就是越准确的。
现在假如开始用一个维度来表达 Emoji 表情的话0 代表快乐1 代表悲伤。从 0 - 1 的数字大小就可以表达对应表情的悲欢程度如下 x 轴所示 但是你会发现如果只有一个维度来描述情绪 Emoji 的话这是笼统的也是不够准确的。例如开心会有很多种类型的 Emoji 可以表达。那么这个时候我们通常是加入新的维度来更好地描述它。例如我们在这里加入 Y 轴通过 0 表示黄色1 表示白色。加入之后表达每个表情在坐标轴上的点变成了 (x, y) 的元组形式。 聪明的你一定发现了即使我们加入 Y 轴这个新的描述维度依然还有 Emoji 我们是没办法区分开的。比如 那么怎么办呢解决这个办法依然很简单再加一个维度。在坐标系中就是加入 z 轴。我们把新的维度简单设置为是否戴帽子注意这里每个维度的取值尽可能地简单是为了阐述不代表真实世界也如此简单。用 0 表示没戴1 表示戴了。所以我们现在就得到了一个 (x, y, z) 的三维坐标点来描述一个 Emoji 了。 当然在现实世界中一个事物的性质不会那么少所以我们需要通过增加很多个维度来描述它所以就出现了类似高维数组这样的描述 0.123, 0.295, 0.358, 0.222 ...。到这里我们已经非常接近向量数据库中的 “向量” 了其实向量数据库中存的就是这样的一些数组用以表示各种各样的数据包括图片、视频、文字等等。这些事物都是经过我们上述这种转换的方式把它们变成了一个个高维的数组然后保存下来。
可能说到这里你还不理解向量数据库有什么作用为什么我们要把事物变成这样的形式
简单来讲这是因为变成向量以后我们就有办法去量化世界上任意两种事物之间的关联性和相似性了。通过我们刚才的演示各个维度上越接近的事物就会在空间中越接近。通过计算两个点之间的距离就可以判断两者的相似度。 那么如果我们有一个之前从未出现过的一个 Emoji我们通过上面的方式可以把这个 Emoji 变成向量0.01, 1, 0。 通过计算跟库中的已经存储的向量就可以找出来最接近的 Emoji 是 次之距离接近的就是 作为佐证可以看看 PineCone Query Data ( https://docs.pinecone.io/docs/query-data#sending-a-query ) 获取数据的例子Score 可以简单被认为是相似度
index.query(vector[0.3, 0.3, 0.3, 0.3, 0.3, 0.3, 0.3, 0.3],top_k3,include_valuesTrue
)
# Returns:
# {matches: [{id: C,
# score: -1.76717265e-07,
# values: [0.3, 0.3, 0.3, 0.3, 0.3, 0.3, 0.3, 0.3]},
# {id: B,
# score: 0.080000028,
# values: [0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2]},
# {id: D,
# score: 0.0800001323,
# values: [0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4]}],
# namespace: }
Values 中就是找回来的向量在我们这个例子中可以被认为是对应的 Emoji。这意味着我们可以通过向量化所有的查询条件找到最 “接近” 我们要求的东西。如果把 Emoji 替换成文本的话我们就可以实现 “语义” 搜索。如果把 Emoji 替换成图片或者视频的话就可以实现图片或者视频相似性推荐。
为什么Al应用常常需要依赖于向量数据库?
通过一句话来解释的话就是“大模型” 能记住的事情有限。
这非常类似于我们的大脑。在交流的过程中我们不可能把自己所有的知识都在对话中交给对方通常我们只能通过有限的上下文来做一定的 “推理”。那么在现在的 AI 应用中推理能力是由 LLM 提供的而从你的大脑中把需要表达的最相关的上下文找出来。所以类比来看向量数据库类似于 LLM 的记忆或者知识库。所以完成一个 AI 相关的功能如果没有向量数据库的帮助通常 AI 大模型能完成的功能以及准确度就很有限。
沿着这个思路往下看除了一些不那么精确的模糊匹配以外其实在现实生活中也存在很多需要非常精确和确定性的搜索/索引。这个就类似于我们通常会把一些重要信息记录在笔记本里面需要的时候再通过索引把它精确找回来。
所以向量数据库和关系型数据库最大的不同是对于数据的存储方式和索引查询方式。而正是由于关系型数据库当中存在的精确索引所以它能在毫秒级别获取到对应的信息。对应于业务系统中需要高速访问的例如账号、商品和订单信息等等目前依然是需要由它来完成。 下面以这次 Hackathon 获奖的应用 Heuristic AI ( https://devpost.com/software/cx-8lh7ps ) 作为例子给大家展示一下在一个真实的项目中分别是怎么使用这两种类型的数据库的。
日常生活中当我们使用的电子产品出现故障的时候通常需要翻阅复杂的使用手册才能获取到相关的解决方案并且需要花费大量的时间学习。这个项目完成了以下事情
把所有产品手册导入到向量数据库里面把遇到的问题用自然语言描述通过语义搜索在向量数据库中找到最相关的上下文把上下文打包成 Prompt 发送给 OpenAI生成对应的解决方案 大致的技术实现如下 如果这个软件到此为止了那基本上也就是一个玩具。通常还需要为系统加入用户认证与管理系统另外通常在后台还需要加上对业务数据的分析系统比如多少在线用户使用了产品使用频率如何等等维度。而这些功能就需要使用传统的数据库来实现了 当然作为一个 Hackathon 项目这个软件其实已经相对比较完整了。但是如果它要进一步产品化需要考虑以下的方面
○ 用户数据量暴增系统的可扩展性和稳定性
○ 多数据中心和灾难情况下的数据备份和恢复
这些都不酷甚至有些痛苦但是这依然是我们需要慎重且认真对待的领域。好在从这次 Hackathon 中可以肉眼观察到的另一个趋势Serverless 在帮助开发者们不断减轻产品化一个应用的技术难度。
基础软件 Serverless 化带来的效率提升
可以观察到的独立开发者在项目开发中发挥的作用日益突出。独立开发者在项目开发中发挥的作用日益突出。相较于过去不再需要庞大的 3-4 人团队合作现在的优秀项目往往由 1-2 名开发者甚至是个别人单独完成。
这一趋势的背后Serverless 化的浪潮充当了重要的推动力。借助 Serverless开发者能够专注于业务逻辑而不必纠结于底层基础设施的细节。这次没有再看到有开发者会利用本地部署实现自己的应用了前端和业务代码部署使用 Vercel后端组件比如 Vector 数据库用 Qrdrant ( https://qdrant.tech/ )或者 Pinecone ( https://www.pinecone.io/ )关系型数据库使用 TiDB Cloud Serverless ( https://bit.ly/3PsYJle )用上这一套基本上一个工程师就能完成 Demo 级别的应用了。
这个时代下也并非只有 AI 领域一枝独秀其他的传统技术其实也在为开发者们提供越来越方便的使用体验也在随着浪潮不断递进迭代。
只要关注回到开发者本身大家都有光明的未来。