search_by_multi_modal 用于多模态数据检索。多模态数据检索是指向量数据库支持直接通过图文等多模态数据类型进行检索,且支持模态的组合,如文搜图,图搜图,图搜文+图等。
说明
请求参数是 SearchByMultiModalRequest,其字段如下表所示。
名称 | 类型 | 必选 | 描述 |
|---|---|---|---|
text | Optional[str] | 至少选 1 | 检索的输入文本。 |
image | Optional[Any] | 检索的输入图片,支持:
| |
video | Optional[Any] | JSON 结构,如: | |
filter | Optional[Dict[str, Any]] | 否 | 标量过滤条件,详见标量过滤。
|
output_fields | Optional[List[str]] | 否 | 要返回的标量字段列表。
|
limit | Optional[int] | 否 | 限制返回条数,最大 5000。 |
offset | Optional[int] | 否 | 分页偏移量,默认 0,过大时会出现深分页性能开销。 |
partition | Optional[str] | 否 | 指定检索的分区名称。 |
advance | Optional[SearchAdvance] | 否 | 高级参数集合(post_process_ops、ids_in 等),详见检索公共参数 |
need_instruction | Optional[bool] | 否 | 控制是否让模型自动补全 instruction,豆包系列默认 True,其他模型默认 False。 |
名称 | 类型 | 描述 |
|---|---|---|
request_id | Optional[str] | 请求链路 ID。 |
code | Optional[str] | 服务返回码,Success 表示成功。 |
message | Optional[str] | 错误或提示信息。 |
api | Optional[str] | 具体调用的 API 名称。 |
result | Optional[SearchResult] | 检索结果主体,结构见下。 |
名称 | 类型 | 描述 |
|---|---|---|
data | List[SearchItemResult] | 召回到的结果列表,结构见下。 |
filter_matched_count | Optional[int] | 满足过滤条件的文档总数。 |
total_return_count | Optional[int] | 本次返回的结果数量。 |
real_text_query | Optional[str] | 模型可能修正后的真实查询串。 |
token_usage | Dict[str, Any] | token 计量信息。 |
名称 | 类型 | 描述 |
|---|---|---|
id | Any | 主键值。 |
fields | Dict[str, Any] | 返回的标量字段内容。 |
score | Optional[float] | 最终相似度得分。 |
ann_score | Optional[float] | ANN 粗排得分。 |
import os from vikingdb import IAM from vikingdb.vector import SearchByMultiModalRequest, VikingVector auth = IAM( ak=os.environ["VIKINGDB_AK"], sk=os.environ["VIKINGDB_SK"], ) client = VikingVector( host=os.environ["VIKINGDB_HOST"], region=os.environ["VIKINGDB_REGION"], auth=auth, scheme="https", ) index_client = client.index( collection_name=os.environ["VIKINGDB_COLLECTION"], index_name=os.environ["VIKINGDB_INDEX"], ) request = SearchByMultiModalRequest( text="找下类似品种", need_instruction=True, # need instruction improves prompt image="tos://zayn-viking/kind_dog.png", # upload to tos first limit=3, ) response = index_client.search_by_multi_modal(request) if response.result: for item in response.result.data: print(item.id, item.fields.get("image"), item.score)