使用 attu 创建向量数据库
AI 大模型开发

使用 attu 创建向量数据库

JACIN··12 分钟阅读

创建 collection image|690x496

建立索引:

image|637x500

使用稀疏向量

image|690x425

image|690x170

表结构度量标准算法参数三个维度。

字段属性 (Schema Fields)#

在向量数据库中,每一行数据不再只是简单的文本,而是由以下核心字段组成:

  • FloatVector(1024):
    • 概念: 这是一个高维向量字段。
    • 1024 (维度): 这必须与你的 Embedding 模型(如 BGE-M3)输出的维度完全一致。它代表了将一段文字转化为了 1024 个浮点数组成的数组。
  • VarChar (text):
    • 概念: 存储原始文本。
    • 作用: 虽然向量负责“搜索”,但最终喂给 LLM 的是这段原始文字。
  • JSON (metadata):
    • 概念: 存储“身份证”信息。
    • 作用: 用于标量过滤(例如:只搜某个特定文档、某个日期范围内的数据)。

Metric Type: COSINE (余弦相似度)#

决定“怎么算两个向量像不像”的数学公式。 • COSINE (余弦相似度): ◦ 原理: 它计算的是两个向量在方向上的夹角余弦值,而忽略向量的绝对长度。 ◦ 适用场景: 文本检索的首选。因为一段话的长短(向量模长)不应影响它和问题的语义相关性。 ◦ 数值范围: 结果在 [-1, 1] 之间,越接近 1 表示越相似。

距离和相似度#

核心矛盾:距离 vs. 相似度#

在向量空间中,我们有两种衡量两个点(向量)关系的方式:

  • 距离 (Distance/Radius):衡量两个点在空间里离得有多“远”。
    • 逻辑:离得越近,距离数值越
    • 极端情况:两个完全重合的点,距离为 0
  • 相似度 (Similarity):衡量两个向量的“一致性”有多强。
    • 逻辑:一致性越高,数值越
    • 极端情况:在余弦相似度中,完全一致的向量,结果为 1

在 Milvus 的底层逻辑里,它为了统一接口,有时候会将所有的指标都转化为一种“距离”感: • 对于余弦相似度:Milvus 内部可能会用 1余弦相似度1 - \text{余弦相似度} 来表示“余弦距离”。 ◦ 如果相似度是 0.90.9,距离就是 0.10.1。 ◦ 如果相似度是 0.70.7,距离就是 0.30.3。 • 所以:当你设置 radius 时,你是告诉数据库:“请帮我找半径 0.30.3 以内的点”。在这个逻辑下,半径越,要求就越苛刻,搜出来的东西也就越相似

Index Type: HNSW (分层导航小世界)#

这是你选择的索引算法,也是目前向量数据库中最流行的。它将搜索复杂度从逐个比对的 O(N)O(N) 降到了 O(log N)。 核心参数解读:M: 16 (最大度数): ◦ 概念: 在构建索引时,每个数据点最多能连接的“邻居”数量。 ◦ 影响: ▪ 数值越大: 检索准确率更高,但索引占用的内存(RAM)会更多。 ▪ 16 是一个经过平衡的工业级经验值。 • efConstruction: 128 (构建搜索范围): ◦ 概念: 在创建索引的过程中,算法在每一层寻找邻居时考虑的候选数量。 ◦ 影响: ▪ 数值越大: 索引构建得越精细(准确率高),但入库速度越慢。 ▪ 由于你使用的是 128,这表示你在入库时愿意花费一定的时间来换取之后极高的查询准确率。

Collection (集合)#

Collection 是 Milvus 中最大的逻辑数据单元。

  • 对应关系:它相当于关系型数据库(如 MySQL)中的 Table(表)
  • 作用:它定义了数据的结构(Schema),即这个表里有哪些字段、哪个是主键、哪个是向量、向量的维度是多少。
  • 设计原则:通常你会为不同的业务场景创建不同的 Collection。例如,你的 rag_demo_1 就是一个 Collection。所有的索引构建(HNSW 等)和搜索操作都是基于 Collection 展开的。

Partition (分区)#

Partition 是 Collection 内部的一个物理切分单元。

  • 对应关系:它相当于 MySQL 中的 表分区,或者你电脑硬盘里的子文件夹
  • 作用:它允许你将一个 Collection 里的海量数据划分成更小的部分。
  • 核心优势:性能优化
    • 缩小搜索范围:在 RAG 场景中,如果你有 100 万条数据,但你知道答案肯定在“2024年”的文档里。如果你在插入时指定了 partition_name="year_2024",查询时也指定这个分区,Milvus 就只会去扫描这部分数据,而不是全表扫描。
    • 内存管理:你可以选择只加载(Load)某个特定的 Partition 到内存中,从而节省昂贵的 RAM 资源。
特性Collection (集合)Partition (分区)
级别第一级(父级)第二级(子级)
Schema (表结构)同一个 Collection 强制共享一套结构必须遵循所属 Collection 的结构
默认状态每个数据库必须至少有一个默认会创建一个名为 _default 的分区
查询粒度全局查询,速度相对慢一些指定分区查询,速度极快
场景示例“公司所有文档知识库”“财务部文档”、“技术部文档”

一致性等级 (Consistency Level)#

“刚存进去的数据能不能立马搜到”。

  • Strong(强一致性):写进去立刻就能搜到,但并发压力大时速度变慢。
  • Bounded(有界一致性):你配置中使用的等级。允许极短的时间差(比如 1 秒内),在吞吐量和时效性之间取平衡。
  • Session(会话一致性):保证同一个用户刚才写的数据他自己能搜到。

多向量支持#

它不仅有稠密向量(Dense),还有:

  • 稀疏向量 (Sparse Vector):类似关键词权重(BM25)。
  • 混合检索 (Hybrid Search):Milvus 支持在一个 Collection 里存两种向量。
    • 语义搜(Dense)+ 关键词搜(Sparse) = 极高的召回率

评论

还没有评论,来发第一个吧