如何使用DashVector的多向量检索

本文介绍如何使用DashVector的多向量检索功能。

在某些AI检索的场景,会涉及一个实体对应多个向量,在检索时希望通过多个向量检索来找到最可能的实体,例如:

  • 在自然语言处理中,标题和文档分别抽取为不同的向量特征,需要根据标题向量和文档向量同时做检索。

  • 在商品检索时,商品的图片和文字分别抽取为不同的向量特征,需要根据图片向量和文字向量同时做检索。

为了满足这些需求,DashVector支持了多向量检索。

使用示例

前提条件

创建多向量集合

说明

需要使用您的api-key替换示例中的 YOUR_API_KEY、您的Cluster Endpoint替换示例中的YOUR_CLUSTER_ENDPOINT,代码才能正常运行。

复制代码
import dashvector
import numpy as np
from dashvector import VectorParam, Doc, WeightedRanker, VectorQuery, RrfRanker

client = dashvector.Client(
    api_key='YOUR_API_KEY',
    endpoint='YOUR_CLUSTER_ENDPOINT'
)
ret = client.create(
    'multi_vector_demo',
    vectors={
        "title": VectorParam(4),
        "content": VectorParam(6, metric="euclidean"),
    },
    fields_schema={
        'author': str,
    }
)
assert ret

插入数据

说明

insert/upsert要求至少一个向量字段有值。

复制代码
collection = client.get(name='multi_vector_demo')
docs = []
for i in range(10):
    docs.append(Doc(id=str(i),
                    vectors={"title": np.random.random(4),
                             "content": np.random.random(6)
                            },
                    )
                )
ret = collection.insert(docs)
print(ret)

执行检索

说明

  1. 检索时采用的策略为多个向量分别执行检索后融合排序。当前融合排序支持两种策略:RrfRankerWeightedRanker。不指定时,默认为RrfRanker(rank_constant=100)。

  2. VectorQuery 支持的其他参数见 向量检索高级参数

    title_vector = [0.1, 0.2, 0.3, 0.4]
    content_vector = [0.1, 0.2, 0.3, 0.4, 0.5, 0.6]
    vectors = {
    "title": VectorQuery(vector=title_vector, num_candidates=10),
    "content": VectorQuery(vector=content_vector),
    }
    ret = collection.query(
    vector=vectors,
    include_vector=False,
    # 使用RRF融合排序
    # rerank=RrfRanker(rank_constant=100)
    # 使用加权融合排序
    rerank=WeightedRanker(weights={"title": 1.0, "content": 1.0}),
    topk=20
    )
    assert ret
    print(ret.output)

    使用单个向量执行检索

    ret = collection.query(vector={"title": VectorQuery(vector=title_vector)})
    assert ret
    print(ret.output)

    使用单个向量执行分组向量检索

    ret = collection.query_group_by(title_vector, group_by_field='author', vector_field='title')
    assert ret
    print(ret)

限制说明

重要

  1. 当前单个集合最多支持4个向量字段。

  2. 多向量集合暂不支持插入sparse特征。

  3. 随向量字段的个数增加,Cluster中可插入的Doc条数会减少,插入和检索的性能会下降。

  4. 检索时允许只对部分向量做检索,集合中包含n个向量字段时,允许使用1-n个向量字段做向量检索,允许使用其中的任意一个向量字段做分组向量检索

相关推荐
码界筑梦坊1 天前
164-基于Python的甜点销售数据可视化分析系统
开发语言·python·信息可视化·数据分析·毕业设计
特立独行的猫a1 天前
Rust+ Tauri实现漂亮小巧的Mqtt客户端工具--AtomMQTT Client 实现详解
开发语言·后端·mqtt·rust
财经资讯数据_灵砚智能1 天前
基于全球经济类多源新闻的NLP情感分析与数据可视化(夜间-次晨)2026年5月27日
大数据·人工智能·python·信息可视化·自然语言处理·ai编程·灵砚智能
lly2024061 天前
建造者模式
开发语言
之歆1 天前
Day20_PC 端电商商品详情页前端实战:从布局到放大镜与选项卡
开发语言·前端·javascript·css·less
图特摩斯科技1 天前
原生本体数据库AbutionGraph,世界模型/本体智能应用 底座
数据库·人工智能·知识图谱·本体论·palantir·ontology
Agent手记1 天前
跨境电商从选品到售后全流程自动化可能吗?基于实在Agent与LLM+RPA的端到端落地实战指南
运维·人工智能·ai·自动化·rpa
Black蜡笔小新1 天前
自动化AI算法训练服务器DLTM零代码私有化构建企业自主可控AI智能体系
人工智能·算法·自动化
潇湘秦1 天前
Oracle 数据库SQL优化指南
数据库·sql·oracle