向量数据库查询#
Vector DB Lookup 是一个向量搜索工具,允许用户从向量数据库中搜索前 k 个相似向量。该工具是多个第三方向量数据库的封装。当前支持的数据库列表如下。
名称 |
描述 |
|---|---|
Azure Cognitive Search |
微软的云搜索服务,内置AI功能,能够丰富各种类型的信息,帮助大规模识别和探索相关内容。 |
Qdrant |
Qdrant 是一个向量相似性搜索引擎,它提供了一个生产就绪的服务,具有方便的 API 来存储、搜索和管理带有附加有效载荷的点(即向量)。 |
Weaviate |
Weaviate 是一个开源的向量数据库,可以存储对象和向量。这使得可以将向量搜索与结构化过滤结合起来。 |
该工具将支持更多的向量数据库。
需求#
对于AzureML用户,该工具已安装在默认镜像中,您无需额外安装即可使用该工具。
对于本地用户,
pip install promptflow-vectordb
先决条件#
该工具从第三方向量数据库中搜索数据。要使用它,您应提前创建资源,并在工具与资源之间建立连接。
Azure 认知搜索:
创建资源 Azure 认知搜索。
添加“认知搜索”连接。在“API 密钥”字段中填写从创建资源的“密钥”部分获取的“主管理密钥”,并在“API 基础”字段中填写 URL,URL 格式为
https://{your_serive_name}.search.windows.net。
Qdrant:
按照安装指南将Qdrant部署到自维护的云服务器上。
添加“Qdrant”连接。在“API base”中填写自维护的云服务器地址,并在“API key”字段中填写API密钥。
Weaviate:
按照安装指南将Weaviate部署到自维护的实例。
添加“Weaviate”连接。在“API base”中填写自维护实例的地址,并在“API key”字段中填写API密钥。
输入#
该工具接受以下输入:
Azure 认知搜索:
名称
类型
描述
是否必需
connection
CognitiveSearchConnection
创建的连接,用于访问认知搜索端点。
是
index_name
string
在认知搜索资源中创建的索引名称。
是
text_field
string
文本字段名称。返回的文本字段将填充输出的文本。
否
vector_field
string
向量字段名称。目标向量在此向量字段中搜索。
是
search_params
dict
搜索参数。它是键值对。除了上述工具输入列表中提到的参数外,其他搜索参数可以形成JSON对象作为search_params。例如,使用
{"select": ""}作为search_params来选择返回的字段,使用{"search": ""}来执行混合搜索。否
search_filters
dict
搜索过滤器。它是键值对,输入格式类似于
{"filter": ""}否
vector
list
要查询的目标向量,可以由Embedding工具生成。
是
top_k
int
返回的得分最高的实体的数量。默认值为3
否
Qdrant:
名称
类型
描述
是否必需
connection
QdrantConnection
创建的连接用于访问Qdrant服务器。
是
collection_name
string
在自维护云服务器中创建的集合名称。
是
text_field
string
文本字段名称。返回的文本字段将填充输出的文本。
否
search_params
dict
搜索参数可以形成JSON对象作为search_params。例如,使用
{"params": {"hnsw_ef": 0, "exact": false, "quantization": null}}来设置search_params。否
search_filters
dict
搜索过滤器。它是键值对,输入格式类似于
{"filter": {"should": [{"key": "", "match": {"value": ""}}]}}否
vector
list
要查询的目标向量,可以通过Embedding工具生成。
是
top_k
int
返回的得分最高的实体数量。默认值为3
否
Weaviate:
名称
类型
描述
是否必需
connection
WeaviateConnection
用于访问Weaviate的已创建连接。
是
class_name
string
类名。
是
text_field
string
文本字段名称。返回的文本字段将填充输出的文本。
否
vector
list
要查询的目标向量,可以通过Embedding工具生成。
是
top_k
int
要返回的得分最高的实体的数量。默认值为3。
否
输出#
以下是工具返回的示例JSON格式响应,其中包括得分最高的前k个实体。该实体遵循由promptflow-vectordb SDK提供的向量搜索结果的通用模式。
Azure 认知搜索:
对于 Azure 认知搜索,以下字段被填充:
字段名称
类型
描述
original_entity
字典
来自搜索 REST API 的原始响应 JSON
score
浮点数
来自原始实体的 @search.score,用于评估实体与查询向量之间的相似性
text
字符串
实体的文本
vector
列表
实体的向量
输出
[ { "metadata": null, "original_entity": { "@search.score": 0.5099789, "id": "", "your_text_filed_name": "sample text1", "your_vector_filed_name": [-0.40517663431890405, 0.5856996257406859, -0.1593078462266455, -0.9776269170785785, -0.6145604369828972], "your_additional_field_name": "" }, "score": 0.5099789, "text": "sample text1", "vector": [-0.40517663431890405, 0.5856996257406859, -0.1593078462266455, -0.9776269170785785, -0.6145604369828972] } ]
Qdrant:
对于 Qdrant,填充了以下字段:
字段名称
类型
描述
original_entity
dict
来自搜索 REST API 的原始响应 json
metadata
dict
来自原始实体的有效载荷
score
float
来自原始实体的分数,用于评估实体与查询向量之间的相似性
text
string
有效载荷的文本
vector
list
实体的向量
输出
[ { "metadata": { "text": "sample text1" }, "original_entity": { "id": 1, "payload": { "text": "sample text1" }, "score": 1, "vector": [0.18257418, 0.36514837, 0.5477226, 0.73029673], "version": 0 }, "score": 1, "text": "sample text1", "vector": [0.18257418, 0.36514837, 0.5477226, 0.73029673] } ]
Weaviate:
对于 Weaviate,以下字段被填充:
字段名称
类型
描述
original_entity
dict
来自搜索 REST API 的原始响应 json
score
float
来自原始实体的确定性,用于评估实体与查询向量之间的相似性
text
string
原始实体中的文本
vector
list
实体的向量
输出
[ { "metadata": null, "original_entity": { "_additional": { "certainty": 1, "distance": 0, "vector": [ 0.58, 0.59, 0.6, 0.61, 0.62 ] }, "text": "sample text1." }, "score": 1, "text": "sample text1.", "vector": [ 0.58, 0.59, 0.6, 0.61, 0.62 ] } ]