为什么大模型需要向量数据库?

AIGC 时代万物都可以向量化,向量化是 LLM 大模型以及 Agent 应用的基础。

比如:爆火的 Google 大模型 Gemini 1.0 原生支持的多模态,在预训练的时候就是把文本、图片、音频、视频等多模态先进行 token 化,然后构建一维的“语言”序列,再进行向量化,实现了原生多模态的支持。

向量技术是向量数据库的核心,一个企业级的向量数据库,在功能维度需要具备 Embedding 嵌入生成向量数据、向量数据存储、向量数据相似度检索、提供 "CRUD” API 接口等,在性能维度需要提供分布式架构提供无缝的弹性伸缩功能以支持用户访问请求的高吞吐量和低延迟。在可观性维度需要提供自动化部署、立体监控、业务调试、业务测试、业务评估等功能。

向量数据库的优势

向量数据库相对于传统数据库具有几项重要的优势,特别是在处理大规模高维度向量数据时:

  1. 高效的相似度搜索: 向量数据库设计旨在快速执行相似度搜索,这意味着它们能够有效地处理大规模的向量数据集,并且能够在其中快速找到最相似的向量。这对于许多应用场景,如推荐系统、图像识别、自然语言处理等是至关重要的。

  2. 针对向量的优化存储和索引结构: 传统数据库通常使用 B 树或者哈希索引来支持数据检索,但这些索引结构不太适合高维度向量数据的相似度搜索。向量数据库采用了更适合向量数据的存储和索引结构,如向量树、局部敏感哈希(LSH)等,这些结构可以更有效地支持向量数据的相似度搜索。

  3. 内置向量运算支持: 一些向量数据库提供了内置的向量运算功能,如向量加法、减法、乘法、点积等,这些功能可以直接在数据库中进行向量计算,而无需将数据提取到应用程序中进行处理,从而提高了处理效率并降低了网络通信成本。

  4. 实时更新和查询: 向量数据库通常能够支持实时更新和查询,这意味着它们能够快速响应数据的变化,并且能够在实时环境下进行相似度搜索和数据分析。

  5. 容易扩展和部署: 高性能的向量数据库通常支持水平扩展,可以轻松地在集群中添加新节点来处理更多的数据和请求,同时还能保持较高的性能。

总体而言,向量数据库在处理高维度向量数据和执行相似度搜索方面具有明显的优势,能够更好地满足现代数据应用的需求。

向量数据库如何选型

如果你需要快速构建原型系统并对性能有一定要求,Faiss 可能是一个好选择。

Faiss 是 Meta 开源的一个库,用于高效相似性搜索和密集向量聚类。它能处理任意大小的向量集合,甚至是无法全部装入内存的集合。Faiss 还包含了用于评估和参数调优的工具。Faiss 是用 C++ 编写的,但提供了完整的 Python/NumPy 接口。

Faiss 足够简单,性能似乎也足够快,也能够应付小规模的生产场景。当然,还可以通过量化、降维、使用 GPU 等方案进一步提升查询性能。

然而,尽管向量搜索库,比如 Faiss 提供了强大和高效的向量搜索功能,但在实际生产环境中,它们存在一些限制。Faiss 并没有提供处理数据的实时增删、缺乏多语言的支持,无法提供远程调用、不支持标量过滤、也不提供数据的持久化,可扩展性和容灾等问题的解决方案。

正是因为这些原因,向量数据库应运而生,为我们提供了一种更完整、更适合实际应用场景的解决方案。

向量数据库战场目前主要分为四个类别:

  • 基于 PG、Clickhouse 等进行魔改或者插件化实现的向量数据库。这类解决方案以现有的关系数据库或列存数据库作为基础,通过修改或插件扩展的方式添加向量搜索功能,PG Vector是这类解决方案的代表产品。

  • 基于传统倒排搜索添加稠密向量索引支持的向量数据库。这类解决方案以倒排索引搜索引擎作为基础,通过扩展索引机制以支持向量搜索,ElasticSearch是这类解决方案的代表产品。

  • 基于向量检索库实现的轻量级向量数据库。这类解决方案以向量搜索库(如 Faiss)为核心,围绕其构建数据库功能。这些产品通常具有较小的体积和较高的运行效率,Chroma 是这类解决方案的代表产品。

  • 基于原生向量设计的分布式向量云原生数据数据库。这类解决方案从零开始设计和实现向量数据库,整个系统从底层到顶层都针对向量搜索进行了优化,通常提供了更完整和高级的功能,包括分布式计算、容灾备份、数据持久化等,Zilliz Cloud/Milvus 是这类解决方案的代表产品。

不过,“Not All Vector Database are born equal”(并非所有向量数据库都生来平等)。在各类向量数据库中,每种解决方案都有其独特的优点和限制,并且它们各自适合于不同的应用场景。

在所有的向量数据库方案中,我个人对基于 PG、Clickhouse等进行魔改或者插件化实现的向量数据库(如 PG Vector)以及基于原生向量设计的分布式向量云原生数据数据库(例如 Zilliz Cloud/Milvus)这两种截然不同的解决方案特别看好。

还有更多选型落地场景,今晚20点直播中详细剖析,请同学们点击免费预约

总之,掌握好向量数据库的选型和落地实现,对于 IT 人来说是一项非常重要的技能。

基于向量数据库完成 RAG 业务实际工作

第一、基于向量数据库实现 RAG(Retrieval Augmented Generation)应用

RAG 是一种使用企业级私有和实时的数据用来增强 LLM 大模型能力的一种技术,由两个步骤构成:建立向量索引(Indexing)和检索生成(Retrieval and Generation)。

建立向量索引(Indexing)由加载外部知识(Load)、切分大文本为小的单元块(Split)、向量存储(Store)三步组成。

图片

检索生成(Retrieval and Generation)由向量知识库检索最相似的 TopK 记录(Retrieve)和 LLM 大模型生成结果(Generate)两步构成。

图片

总体来讲,分为离线建立向量数据部分和在线相似度增强和检索部分,如下图所示。

图片

第二、使用 OpenAI Assistants 实现 RAG 应用

乍一看,OpenAI Assistants 自带的检索功能十分强大,但如果对行业足够了解,便会发现其仍存在诸多限制。OpenAI Assistants 检索严格限制了数据规模,且缺乏定制化的能力。因此,搭建高效的应用还需要使用自定义的检索器。

所幸,OpenAI 的函数调用能力允许开发者无缝接入自定义的检索器,从而打破对于知识库数据量的限制,更好地适应多样化的用例。

我们可以使用 Milvus 实现 OpenAI Assistants 检索定制化。

Milvus 是一款高度灵活、可扩展的开源向量数据库,毫秒内即可实现十亿级别向量的存储和检索。由于优秀的扩展性和超低的查询延时,Milvus 是定制 OpenAI Assistants 检索的首选,下图为 OpenAI Assistant 函数调用通用的工作原理。

图片

总之,掌握好基于向量数据库的 RAG 业务应用落地实现,对于 IT 人来说是一项非常重要的技能

技术交流&资料

技术要学会分享、交流,不建议闭门造车。一个人可以走的很快、一堆人可以走的更远。

成立了大模型技术交流群,本文完整代码、相关资料、技术交流&答疑,均可加我们的交流群获取,群友已超过2000人,添加时最好的备注方式为:来源+兴趣方向,方便找到志同道合的朋友。

方式①、微信搜索公众号:机器学习社区,后台回复:加群
方式②、添加微信号:mlc2060,备注:来自CSDN + 技术交流

通俗易懂讲解大模型系列

  • 做大模型也有1年多了,聊聊这段时间的感悟!

  • 用通俗易懂的方式讲解:大模型算法工程师最全面试题汇总

  • 用通俗易懂的方式讲解:不要再苦苦寻觅了!AI 大模型面试指南(含答案)的最全总结来了!

  • 用通俗易懂的方式讲解:我的大模型岗位面试总结:共24家,9个offer

  • 用通俗易懂的方式讲解:大模型 RAG 在 LangChain 中的应用实战

  • 用通俗易懂的方式讲解:一文讲清大模型 RAG 技术全流程

  • 用通俗易懂的方式讲解:如何提升大模型 Agent 的能力?

  • 用通俗易懂的方式讲解:ChatGPT 开放的多模态的DALL-E 3功能,好玩到停不下来!

  • 用通俗易懂的方式讲解:基于扩散模型(Diffusion),文生图 AnyText 的效果太棒了

  • 用通俗易懂的方式讲解:在 CPU 服务器上部署 ChatGLM3-6B 模型

  • 用通俗易懂的方式讲解:使用 LangChain 和大模型生成海报文案

  • 用通俗易懂的方式讲解:ChatGLM3-6B 部署指南

  • 用通俗易懂的方式讲解:使用 LangChain 封装自定义的 LLM,太棒了

  • 用通俗易懂的方式讲解:基于 Langchain 和 ChatChat 部署本地知识库问答系统

  • 用通俗易懂的方式讲解:在 Ubuntu 22 上安装 CUDA、Nvidia 显卡驱动、PyTorch等大模型基础环境

  • 用通俗易懂的方式讲解:Llama2 部署讲解及试用方式

  • 用通俗易懂的方式讲解:基于 LangChain 和 ChatGLM2 打造自有知识库问答系统

  • 用通俗易懂的方式讲解:一份保姆级的 Stable Diffusion 部署教程,开启你的炼丹之路

  • 用通俗易懂的方式讲解:对 embedding 模型进行微调,我的大模型召回效果提升了太多了

  • 用通俗易懂的方式讲解:LlamaIndex 官方发布高清大图,纵览高级 RAG技术

  • 用通俗易懂的方式讲解:为什么大模型 Advanced RAG 方法对于AI的未来至关重要?

  • 用通俗易懂的方式讲解:使用 LlamaIndex 和 Eleasticsearch 进行大模型 RAG 检索增强生成

  • 用通俗易懂的方式讲解:基于 Langchain 框架,利用 MongoDB 矢量搜索实现大模型 RAG 高级检索方法

  • 用通俗易懂的方式讲解:使用Llama-2、PgVector和LlamaIndex,构建大模型 RAG 全流程

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Powershell Install 一键部署Openssl+certificate证书创建

前言 Openssl 是一个方便的实用程序,用于创建自签名证书。您可以在所有操作系统(如 Windows、MAC 和 Linux 版本)上使用 OpenSSL。 Windows openssl 下载 前提条件 开启wmi,配置网卡,参考 自签名证书 创建我们自己的根 CA 证书和 CA 私钥(我们自己充当 CA)创建服务器…

数据结构第九天(堆排序)

目录 前言 概述 源码: 主函数: 运行结果: 其他 前言 哈哈,这个堆排序算法很久之前就已经敲过一遍了,时间一久,思路有点淡忘。今天重新看过一遍之后,又亲自撸代码,幸运的是&am…

【RL】Bellman Equation (贝尔曼等式)

Lecture2: Bellman Equation State value 考虑grid-world的单步过程: S t → A t R t 1 , S t 1 S_t \xrightarrow[]{A_t} R_{t 1}, S_{t 1} St​At​ ​Rt1​,St1​ t t t, t 1 t 1 t1:时间戳 S t S_t St​:时间 t t t时所处的sta…

C++ | vector二维数组的初始化与行、列数的获取

如果直接使用vector<int,vector<int> > v;创建二维数组&#xff0c;那么就会得到一个空的容器&#xff0c;这样再通过push_back赋值是非常麻烦的。 初始化二维数组 在此介绍二维数组初始化的一般操作。 首先看一维数组的初始化示例&#xff1a; 定义一个长度为n&a…

拿捏循环链表

目录&#xff1a; 一&#xff1a;单链表&#xff08;不带头单向不循环&#xff09;与循环链表&#xff08;带头双向循环&#xff09;区别 二&#xff1a;循环链表初始化 三&#xff1a;循环链表头插 四&#xff1a;循环链表尾插 五&#xff1a;循环链表头删 六&#xff1…

MessageBox好用吗?

MessageBox作为一种能够对接多系统平台的工具&#xff0c;在数字营销领域具有很大的实用性和价值。它提供了实时的数据同步、个性化的营销策略、用户互动功能等多种功能&#xff0c;可以帮助企业实现更精准、高效的营销活动。具体来说&#xff0c;MessageBox的优点包括&#xf…

Laykefu客服系统后台登录绕过

【产品介绍】 Laykefu 是一款基于workermangatawayworkerthinkphp5搭建的全功能webim客服系统&#xff0c;旨在帮助企业有效管理和提供优质的客户服务 【漏洞介绍】 请求头中Cookie中的”user_name“不为空时即可绕过登录系统后台&#xff0c;恶意攻击者可利用此漏洞获得后台…

基于摄像头的虹膜识别技术

随着苹果公司的指纹识别TouchID的推广流行&#xff0c;三星等公司的积极跟进&#xff0c;生物识别技术正被移动设备厂商所重视。 虹膜是什么&#xff1f; 人的眼睛由巩膜、虹膜、瞳孔三部分构成。巩膜即眼球外围的白色部分&#xff0c;约占总面积的30%&#xff1b;眼睛中心为瞳…

【React】如何使antd禁用状态的表单输入组件响应点击事件?

最近遇到一个需求&#xff0c;需要在<Input.textarea>组件中&#xff0c;设置属性disabled为true&#xff0c;使textarea响应点击事件&#xff0c;但直接绑定onClick并不会在禁用状态下被响应。 解决方法1 之后尝试了很多方法&#xff0c;比如设置csspointer-events:no…

日本失去的三十年:去杠杆用了14年

去年以来&#xff0c;日股在日本央行转鹰预期、基本面改善和一系列监管新规的催化下高歌猛进&#xff0c;日经指数已经逼近90年代资产泡沫时期的高位。今年迄今累计上涨8.51%&#xff0c;领跑全球&#xff0c;“失落的三十年”似乎已经远去。 日本因何走向衰退&#xff1f;“失…

MPLS VPN功能组件(2)

MP-BGP 采用地址族(Address Family)来区分不同的网络层协议,以便正确处理VPN-IPv4路由 传统的BGP-4(RFC1771)只能管理IPv4的路由信息,无法正确处理地址空间重叠的VPN的路由。 为了正确处理VPN路由,VPN使用RFC2858(Multiprotocol Extensions for BGP-4)中规定的MP-BG…

云计算 - 弹性计算技术全解与实践

一、引言 在过去的十年里&#xff0c;云计算从一个前沿概念发展为企业和开发者的必备工具。传统的计算模型通常局限于单一的、物理的位置和有限的资源&#xff0c;而云计算则通过分布式的资源和服务&#xff0c;为计算能力带来了前所未有的"弹性"。 弹性&#xff1a;…

TryHackMe-Vulnerability Capstone练习

本文相关的TryHackMe实验房间链接&#xff1a;TryHackMe | Vulnerability Capstone 先nmap扫一下 接下来我们访问一下 接下来我们searchsploit找一下漏洞 searchsploit Fuel CMS 执行漏洞exp&#xff08;此处使用TryHackMe中的box&#xff09; 如果使用本地机需要下载exp&am…

算法练习-删除二叉搜索树中的节点(思路+流程图+代码)

难度参考 难度&#xff1a;中等 分类&#xff1a;二叉树 难度与分类由我所参与的培训课程提供&#xff0c;但需要注意的是&#xff0c;难度与分类仅供参考。且所在课程未提供测试平台&#xff0c;故实现代码主要为自行测试的那种&#xff0c;以下内容均为个人笔记&#xff0c;旨…

制作离线版element ui文档

链接&#xff1a;https://pan.baidu.com/s/1k5bsCK9WUlZobhFBLItw1g?pwdgeyk 提取码&#xff1a;geyk --来自百度网盘超级会员V4的分享 https://github.com/ElemeFE/element 克隆官方代码 使用nvm切换node版本&#xff0c;推荐使用14.0.0 http://doc.xutongbao.top/doc/#/zh…

Prompt Engineering实战-构建“哄哄模拟器”

目录 一 背景 二 “哄哄模拟器”的Prompt Prompt 的典型构成 三 操作步骤 3.1 创建对话 3.2 游戏测试 一 背景 前几天《AI 大模型全栈工程师》第二节课讲了“Prompt Engineering&#xff0c;提示工程”&#xff0c;里面提到一些prompt相关的技巧&#xff0c;原则&#xf…

浅谈分布式CAP定律、BASE理论

第一节 分布式架构设计理论与Zookeeper环境搭建 1. 分布式架构设计理论 学习Zookeeper之前,我们需要掌握一些分布式系统基础知识&#xff1a;了解分布式系统的概念、原理。 配置管理 域名服务 分布式同步 发布订阅 1. 分布式架构介绍 1.1 什么是分布式 《分布式系统原理和…

构建异步高并发服务器:Netty与Spring Boot的完美结合

前言 「作者主页」&#xff1a;雪碧有白泡泡 「个人网站」&#xff1a;雪碧的个人网站 ChatGPT体验地址 文章目录 前言IONetty1. 引入依赖2. 服务端4. 客户端结果 总结引导类-Bootstarp和ServerBootstrap连接-NioSocketChannel事件组-EventLoopGroup和NioEventLoopGroup 送书…

COMSOL接触(高度非线性)仿真常见报错及解决方法总结

前言 由于COMSOL采用隐式求解器&#xff0c;相较于使用显式求解器的Dyna、Abaqus等软件。要在COMSOL中实现结构接触这一高度非线性问题难度较大&#xff0c;报错时有发生。究其原因&#xff0c;是当物体之间相互接触时&#xff0c;物体受到的应力、运动路径会发生突变&#xff…

LabVIEW高精度微小电容测量

LabVIEW高精度微小电容测量 在电子工程和科研领域&#xff0c;精确测量微小电容值是一项有一定要求的任务&#xff0c;尤其在涉及到高精度和低成本时。设计了一种基于LabVIEW高精度微小电容测量系统&#xff0c;旨在提供一个既经济又高效的解决方案。 该系统的核心在于使用FD…