别萧玉 发表于 2025-12-16 13:15:01

如何使用DashVector的多向量检索

本文介绍如何使用DashVector的多向量检索功能。
在某些AI检索的场景,会涉及一个实体对应多个向量,在检索时希望通过多个向量检索来找到最可能的实体,例如:

[*]在自然语言处理中,标题和文档分别抽取为不同的向量特征,需要根据标题向量和文档向量同时做检索。
[*]在商品检索时,商品的图片和文字分别抽取为不同的向量特征,需要根据图片向量和文字向量同时做检索。
为了满足这些需求,DashVector支持了多向量检索。
使用示例

前提条件


[*]已创建Cluster
[*]已获得API-KEY
[*]已安装最新版SDK
创建多向量集合

说明
需要使用您的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)执行检索

说明

[*]检索时采用的策略为多个向量分别执行检索后融合排序。
[*]VectorQuery 支持的其他参数见 向量检索高级参数。
title_vector =
content_vector =
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)限制说明

重要

[*]当前单个集合最多支持4个向量字段。
[*]随向量字段的个数增加,Cluster中可插入的Doc条数会减少,插入和检索的性能会下降。
[*]检索时允许只对部分向量做检索,集合中包含n个向量字段时,允许使用1-n个向量字段做向量检索,允许使用其中的任意一个向量字段做分组向量检索。

来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

煅汾付 发表于 2026-1-15 05:09:11

yyds。多谢分享

眩疝诺 发表于 2026-1-16 06:32:56

用心讨论,共获提升!

恶凝毛 发表于 2026-1-17 13:59:59

这个有用。

寨重 发表于 2026-1-17 16:27:27

懂技术并乐意极积无私分享的人越来越少。珍惜

况雪柳 发表于 2026-1-18 03:17:52

谢谢楼主提供!

荪俗 发表于 2026-1-21 01:17:16

yyds。多谢分享

马璞玉 发表于 2026-1-21 03:36:46

过来提前占个楼

狭踝仇 发表于 2026-1-23 12:09:15

感谢发布原创作品,程序园因你更精彩

汝雨竹 发表于 2026-1-24 07:51:37

热心回复!

抑卞枯 发表于 2026-1-24 08:16:37

收藏一下   不知道什么时候能用到

厂潺 发表于 2026-1-30 07:37:33

感谢分享

颜才 发表于 2026-1-30 15:02:33

谢谢分享,辛苦了

裴涛 发表于 2026-1-31 12:22:15

这个有用。

坪钗 发表于 2026-2-4 04:08:53

分享、互助 让互联网精神温暖你我

士沌 发表于 2026-2-9 19:38:31

热心回复!

卿搞笔 发表于 2026-2-9 22:29:06

用心讨论,共获提升!

尹心菱 发表于 2026-2-10 09:10:42

感谢分享,学习下。

后沛若 发表于 2026-2-10 14:28:54

热心回复!

佟棠华 发表于 2026-2-10 18:55:51

yyds。多谢分享
页: [1] 2
查看完整版本: 如何使用DashVector的多向量检索