使用类型化多维向量构建更智能的AI管道

2025-08-06T05:33:20.000ZHackernoon

CocoIndex已引入对类型化向量数据的全面支持,涵盖从基本的数值数组到复杂的、深度嵌套的多维向量。此项增强旨在促进与Qdrant等高性能向量数据库的无缝集成,从而在各种数据模态中实现高级索引、嵌入和检索工作流。

该平台现在支持一系列具有强大类型保证的向量类型。虽然CocoIndex可以自动推断大多数数据流的类型,但对于自定义函数,可以进行显式类型指定,从而提供更大的控制权。

支持的向量类型

  1. 一维向量: 这些表示简单的数字序列。CocoIndex支持动态维度,其中向量长度可以变化,或固定维度,例如Vector[Float32, Literal[384]],用于始终包含384个元素的向量。在内部,这些可以对应于NumPy数组(numpy.typing.NDArray[np.float32])或Python列表(list[float])。支持的数字类型包括原生的Python floatint、CocoIndex类型别名(Float32Float64Int64用于精确的位大小控制)和NumPy类型(numpy.float32numpy.float64numpy.int64)。

  2. 二维向量(多向量): 表示为Vector[Vector[Float32, Literal[3]], Literal[2]],这些表示由其他向量组成的向量——例如,两个向量,每个向量有三个元素。这种结构非常适合每个数据点需要多个嵌入、多视图表示或批处理编码的场景。它们的底层Python表示通常是嵌套列表(list[list[float]])或多维NumPy数组(numpy.typing.NDArray)。

理解多维向量

多维向量本质上是其元素本身也是向量的向量,类似于矩阵或嵌套列表。CocoIndex使用嵌套的Vector类型表示这种结构,例如Vector[Vector[T, N], M],其中M表示内部向量的数量,每个向量的维度为N。虽然MN在CocoIndex中可以是动态的,但某些目标系统(如Qdrant)可能需要固定的内部维度(N)。这个概念在深度学习和多模态应用中至关重要,允许更丰富的数据表示,例如将图像表示为补丁级嵌入的集合、将文档表示为段落级向量,或将用户会话表示为行为向量序列。CocoIndex原生支持这些复杂的表示,避免了扁平化的需要。

多向量嵌入的应用

多向量嵌入在以下几个高级用例中特别有益:

  • 视觉:补丁嵌入: 在计算机视觉中,视觉Transformer(ViT)可能会为图像输出多个向量,每个补丁一个(例如,196个补丁,每个补丁具有768维嵌入)。这使得局部特征匹配和区域感知检索成为可能,表示为Vector[Vector[Float32, Literal[768]]]
  • 文本:带有段落的文档: 对于长文档,将其拆分为段落或句子级向量(例如,10个段落向量,每个384维)比平均所有向量能更好地保留上下文和结构。这允许在文档的子部分内进行搜索,根据单个相关段落检索文档,以及实现分层搜索。这可以类型化为Vector[Vector[Float32, Literal[384]]]
  • 用户行为:会话或时间序列: 用户会话可以建模为一系列动作或状态,其中每个步骤都是一个向量(例如,20个步骤,每个都是16维向量)。这在电子商务点击序列、金融时间序列或UX分析中对于多步骤交互非常有用,表示为Vector[Vector[Float32, Literal[16]]]
  • 科学与生物医学:多视图嵌入: 复杂的实体(如分子或蛋白质)可能具有多种构象或测量模态。将这些表示为多个向量(例如,5个不同的视图,每个128维)可以对其潜在空间进行全面比较,类型化为Vector[Vector[Float32, Literal[128]]]

优于扁平向量的优势

虽然可以将多向量扁平化(例如,将[[1,2,3],[4,5,6]]转换为[1,2,3,4,5,6]),但这样做会导致语义边界的丢失。真正的多向量保留了每个子向量的含义,从而能够在子向量级别进行匹配和查询。Qdrant等向量数据库可以利用这一点,通过跨多个嵌入进行评分,从一组相关向量中识别最佳匹配(例如,最接近的图像补丁或相关段落)。至关重要的是,即使外部维度可变,内部向量也可以保持固定维度,这是大多数数据库中高效向量索引的常见要求。

CocoIndex到Qdrant的类型映射

Qdrant作为广泛使用的向量数据库,支持密集向量和多向量。CocoIndex智能地将其向量类型映射到Qdrant兼容的格式:

  • CocoIndex Vector[Float32, Literal[N]]被映射到Qdrant密集向量。
  • CocoIndex Vector[Vector[Float32, Literal[N]]]被映射到Qdrant多向量。
  • 任何其他向量类型,或Qdrant不支持的动态维度向量,都作为Qdrant JSON负载的一部分存储。

Qdrant特别要求向量具有固定维度才能进行索引。CocoIndex自动检测向量形状并管理此映射,确保兼容性。

CocoIndex数据模型概述

在CocoIndex中,数据被组织成行和字段。每行对应一个Qdrant点。如果字段符合Qdrant的向量约束,则它可以是命名向量;否则,它可以作为不符合类型的数据负载的一部分。这种混合方法提供了结构化元数据的灵活性与向量搜索能力的结合。

通过支持深度类型化的向量和多维嵌入,CocoIndex为向量数据管道提供了结构和语义清晰度。其类型系统确保了在大规模处理图像、文本、音频或抽象图表示时的兼容性、可调试性和正确性。

使用类型化多维向量构建更智能的AI管道 - OmegaNext AI 新闻