AI 时代的向量数据库、关系型数据库与 Serverless 技术丨TiDB Hackathon 2023 随想

news2024/9/28 1:22:24

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_k=3,
  include_values=True
)
​
# 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 ) 作为例子给大家展示一下,在一个真实的项目中,分别是怎么使用这两种类型的数据库的。

日常生活中,当我们使用的电子产品出现故障的时候,通常需要翻阅复杂的使用手册才能获取到相关的解决方案,并且需要花费大量的时间学习。这个项目完成了以下事情:

  1. 把所有产品手册导入到向量数据库里面
  2. 把遇到的问题用自然语言描述,通过语义搜索,在向量数据库中找到最相关的上下文
  3. 把上下文打包成 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 领域一枝独秀,其他的传统技术,其实也在为开发者们提供越来越方便的使用体验,也在随着浪潮不断递进迭代。

只要关注回到开发者本身,大家都有光明的未来。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/984977.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

监听Helm release资源

监听Helm release资源 基于helm做部署管理工具时,可能想要管理用户已有环境,这时需要将已有环境中的release信息上报到业务系统中。当用户在环境中部署新的release时,也需要实时监听并上报回来。下面将讲解如何去监听release资源 helm rele…

天津web前端培训班 前端是否适合零基础学?

随着HTML 5和ECMAScript 6的正式发布,大量的前端业务逻辑,极大地增加了前端的代码量,前端代码的模块化、按需加载和依赖管理势在必行,因此Web前端越来越被人们重视。 Web前端的就业前景 Web前端开发工程师薪资持续走高&#xff…

LoadRunner参数化详解

安装打开loadrunner时,发现虽然自己的思想还在,但已经非常生疏了,好多设置都找不到了具体的位置。下面说参数化参数化是性能测试中时最常用的一种技巧吧!这里需要说明的是,不是只有loadrunner才可以设置参数化&#xf…

《热题100》字符串、双指针、贪心算法篇

思路:对于输入的的字符串,只有三种可能,ipv4,ipv6,和neither ipv4:四位,十进制,无前导0,小于256 ipv6:八位,十六进制,无多余0(00情况不允许),不…

JAVA设计模式第十讲:SPI - 业务差异解决方案

JAVA设计模式第十讲:SPI - 业务差异解决方案 我们需要在不修改源代码的情况下,动态为程序提供一系列额外的特性。首先想到的是Spring的AOP技术来构建应用插件,但是在Java自带的插件中,就有完整的实现。SPI(Service Pro…

OJ练习第165题——修车的最少时间

修车的最少时间 力扣链接:2594. 修车的最少时间 题目描述 给你一个整数数组 ranks ,表示一些机械工的 能力值 。ranksi 是第 i 位机械工的能力值。能力值为 r 的机械工可以在 r * n2 分钟内修好 n 辆车。 同时给你一个整数 cars ,表示总…

pyspark 系统找不到指定的路径; \Java\jdk1.8.0_172\bin\java

使用用具PyCharm 2023.2.1 1:pyspark 系统找不到指定的路径, Java not found and JAVA_HOME environment variable is not set. Install Java and set JAVA_HOME to point to the Java installation directory. 解决方法:配置正确环境变量…

博物馆网上展厅有哪些用途,如何搭建数字时代的文化宝库

引言: 博物馆一直以来都是保存、展示和传承人类文化遗产的地方。然而,随着数字时代的来临,博物馆也逐渐迎来了创新的变革。博物馆网上展厅,作为一种新型的文化传播方式,正逐渐崭露头角。 一.什么是博物馆网上展厅&…

JAVA 比较两个区间是否存在交集

最近遇到一个开发问题,判断两个价格的大小,听着很简单,但其实价格是浮动的,也就是说价格是一个范围,比如物品A的价格是5~10,现在我们通过筛选条件,把价格符合在8~20之前的…

解锁无限的检索能力:谷歌的MEMORY-VQ以卓越的压缩力彻底改变了LLM

检索增强是一种常用且有效的方法,用于增强语言模型的事实知识,同时加快模型推理时间。尽管如此,这种方法带来了相当大的计算成本,这归因于存储预先计算的表示所需的大量存储需求。 为了解决这一相关问题,谷歌研究小组…

【漏洞复现】时空智友企业流程化管控系统文件上传

漏洞描述 通过时空智友该系统,可让企业实现流程的自动化、协同上提升、数据得洞察及决策得优化,来提高工作效率、管理水平及企业的竞争力。时空智友企业流程化 formservice接口处存有任意文件上传漏洞,未经认证得攻击者可利用此接口上传后门程序,可导致服务器失陷。 免责…

webrtc的FULL ICE和Lite ICE

1、ICE的模式 分为FULL ICE和Lite ICE: FULL ICE:是双方都要进行连通性检查,完成的走一遍流程。 Lite ICE: 在FULL ICE和Lite ICE互通时,只需要FULL ICE一方进行连通性检查, Lite一方只需回应response消息。这种模式对于部署在公网…

Qt应用开发(基础篇)——工具按钮类 QToolButton

一、前言 QToolButton类继承于QAbstractButton,该部件为命令或选项提供了一个快速访问按钮,通常用于QToolBar中。 按钮基类 QAbstractButton QToolButton是一个特殊的按钮,一般显示文本,只显示图标,结合toolBar使用。它…

《protobuf》入门

protobuf 初始protobuf简单上手编写protobuf编译 .proto 文件编写测试文件 testPB.cc 初始protobuf Protocol Buffers 是 Google 的一种语言无关、平台无关、可扩展的序列化结构数据的 方法,它可用于(数据) 通信协议、数据存储等。 Protocol …

蚂蚁集团正式开源万亿规模图学习系统AGL

9月7日下午,上海外滩大会“融合机器学习与运筹优化”论坛上,蚂蚁集团正式开源图学习系统Ant Graph Learning (AGL),这是行业首个通用的工业图学习系统。 图片说明:论坛上,蚂蚁集团正式开源了图学…

【Git】01-Git基础

文章目录 Git基础1. 简述1.1 版本管理演变1.2 Git的特点 2. Git安装2.1 安装文档2.1 配置user信息 3. 创建仓库3.1 场景3.2 暂存区和工作区 4. 重命名5. 常用git log版本历史5.1 查看当前分支日志5.2 简洁查看日志5.3 查看最近指定条数的日志 6. 通过图形界面工具查看版本7. 探…

docker-compose安装Nacos2

文章目录 一. Mac1.1 数据库nacos_dev1.2 docker-compose.yaml1.3 部署1.4 卸载1.5 查看 一. Mac 1.1 数据库nacos_dev sql文件地址 /** Copyright 1999-2018 Alibaba Group Holding Ltd.** Licensed under the Apache License, Version 2.0 (the "License");* yo…

Android常用的工具“小插件”——Widget机制

Widget俗称“小插件”,是Android系统中一个很常用的工具。比如我们可以在Launcher中添加一个音乐播放器的Widget。 在Launcher上可以添加插件,那么是不是说只有Launcher才具备这个功能呢? Android系统并没有具体规定谁才能充当“Widget容器…

一文巩固Spring MVC的Bean加载机制

目录 一、什么是Spring MVC的Bean 二、Spring MVC的Bean加载机制 三、Spring MVC如何动态装载Bean 一、什么是Spring MVC的Bean 在Spring MVC中,Bean指的是在Spring IoC容器中创建和管理的对象。这些对象可以是普通的Java类,也可以是服务层组件、数据…

微信“刷掌支付”上线!出门带手就可以了~

从2023年9月5日起,微信支付联合广东7-Eleven便利店正式发布了刷掌支付服务。用户可以在收银台结账时选择刷掌支付作为支付方式。这是全国首批支持微信刷掌支付的便利店,也是刷掌支付在广州地区的首次社会面应用。 目前,广东地区已经有超过150…