向量数据库weaviate使用指南和weaviate客户端

Weaviate向量数据库入门指南

weaviate能做什么

人工智能时代来临,大语言模型逐渐成为程序组成的一部分,但是大语言模型使用上下文的记忆能力有限,需要一个数据库用于储存上下文关系,所以向量数据库应运而生.向量数据库是一种专门存储、管理和搜索高维向量嵌入(数字形式的非结构化数据表示,如文本、图像、音频)的数据库,核心在于通过向量的语义相似性实现高效检索,而非传统数据库的精确关键词匹配,主要应用在大型语言模型(LLM)问答、推荐系统、图像/语音识别等AI领域,通过ANN算法加速搜索,支持“检索增强生成”(RAG)以提高AI的准确性.

向量数据库如何工作的

嵌入模型会将各种数据 (例如文本、图像、图表和视频) 转换为数值向量,以便捕捉其在多维向量空间中的含义和细微差别。
使用相似性搜索 (也称为向量搜索、向量相似性搜索或语义搜索) 是指人工智能应用程序根据指定的相似性度量标准,从数据库中高效地检索与给定查询的向量嵌入在语义上相似的向量.

现在的向量数据库有哪些选择

Weaviate: weaviate 是一个开源的矢量数据库,具有健壮、可拓展、云原生以及快速等特性
Redis: redis 通过RedisSearch 模块,也原生支持向量检索。
Qdrant: Qdrant 是面向下一代的生成式AI向量数据库,同时也具备云原生的特性。
Milvus: 面向下一代的生成式AI向量数据库,支持云原生。
Chroma: 一个开源的向量数据库。 可以快速基于Python和JavaScript构建内存级LLM应用
Elasticsearch:大名鼎鼎的搜索引擎,同样支持向量搜索

Weaviate客户端:

weaviate官方没有提供一个本地的客户端,所以本人开发了一个初步可用的版本,地址在下方.
https://github.com/bleuesprit/Weaviate-Admin
这个版本实现了基础的collection管理和object管理,欢迎大家下载使用

本篇文档的作用

本篇文档只介绍最最基本的概念,可以作为weaviate的概念扫盲使用,让大家有能力去阅读weaviate的文档.不会涉及到很多深入的原理性东西

Weaviate的基本概念

collection: 类比成mysql的表
object:类比成mysql表的一条记录
uuid: 记录的id
vector: 用于进行嵌入查询的向量,可以理解成一个特殊的字段
property:记录的字段

Collection的设置

官方文档

collection名字

类比mysql的数据表名

property

collection的字段,weaviate可以预先定义每个property的字段和数据类型

weaviate支持自动property, 和es一样,对没有事先定义的property会自动创建
这个特性可以关闭

property可以指定是否参与 关键字搜索.

property分词方式

可以是定propery的分词器,这个分词器用在关键字查询

vector

用于存储一条记录的嵌入向量.当然一个记录的vector可以有好几个,叫做named Vector,在搜索的时候,可以指定要搜索哪个vector,这样一个向量可以被不同的场景使用.

vector产生方有几种

  1. collection可以使用一个内在支持的emding模型把记录的property
  2. weaviate可以自动使用api调用外部模型进行嵌入
  3. 插入collection的时候直接把vector也传入

vector的底层实现方法:

有两种实现方法

  1. HNSW : 可以理解成高维的跳表,这种方法适合大量数据,
  2. flat:最暴力的匹配方式,适合小数据,并且结果一定准确
  3. 动态:先使用flat匹配,等数据量大了weaviate自动切换成HNSW

vector量化

默认的嵌入向量都是小数表示,并且很长.这种实现方式当记录条数多的时候,存储量会爆炸.所以需要采用一定的方法进行量化.(可以联想一下llm模型的量化)主要就是通过降低一个数字的精度来节省存储资源
官方文档
weaviate支持4中量化方式:
Rotational Quantization (RQ) 这种是weaviate推荐的方式,查资料得知这中方式还可能是weaviate独创的.
Product Quantization (PQ)
Binary Quantization (BQ) 最差的量化方式
Scalar Quantization (SQ)

这四种量化方式各有利弊.且实现原理很复杂.有的量化需要根据现有数据进行聚类一番才能使用(如 PQ),所以消耗资源会非常大,有的不需要基于数据学习.

倒排索引

weaviate不仅支持嵌入向量的语义查询,还支持传统搜索引擎的搜索查询和关键字匹配的查询.

可以在collection创建的时候,指定一个property是否参与倒排索引和关键字匹配.

Object管理

官方文档
weaviate支持api进行数据的增删改查.
需要注意的是UUID,可以理解成数据库的主键,如果插入的时候不提供uuid,weaviate会自动生成一个.
weaviate有一个最佳实践,即根据object的property算出一个uuid.这样使得相同属性的记录uuid相同,避免重复插入.

批量导入

支持批量导入数据

查询和搜索

向量搜索

官方文档

向量搜索可是使用官方的SDK,有python,java,js,go,c# 如果使用api搜索,需要使用Graphql语言查询.每个object和查询有一个距离结果.

查询的入参可以是字符串,也可以直接输入向量.
可以指定查询过滤器:对某个property进行精确匹配
并且可以指使用那个vector查询,可以匹配的最大距离,结果返回最大条数

返回的结果可以使用属性做groupby处理,可以指定最多返回多少个分组,和每个分组最多有多少个记录

关键词搜索(BM25 search)

官方文档
类似搜索引擎,使用倒排索引进行查找
每个文档会通过算法得出一个相关性分数scores 然后通过排序给出最佳匹配结果

可以指定查询那些property,并且可以指定每个property的权重,用于改变scores的记录方式

混合搜索

官方文档
把向量搜索和关键词搜索结合起来的方式,并且可以通过参数alpha 设置更加看中哪种搜索方式产生的结果

数据

数据分片

weaviate支持自动数据分片,目前只能使用uuid进行分片,使用64bit Murmur-3 hash
[水平扩展](https://docs.weaviate.io/weaviate/concepts/cluster)

数据副本

weaviate 在collection定义的时候,可以指定这个collection需要多少个副本.

数据一致性

集群基础信息

集群基本信息使用raft算法达成一致

集合

集合信息读取一致性:
LeaderOnly (default):只考虑leader数据
LocalOnly:只使用本地缓存
LeaderOnMismatch:检查本地缓存是否过期,过期就从远程读取.

ojbect

读写一致性:
ONE - 一副本成功即可
QUORUM - 超过半数副本成功
ALL -所有副本成功

默认情况下,增,删,改,weaviate会等待所有副本返回.

高可用

官方文档
weaviate支持集群方式搭建

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值