Faiss 索引查找#

Faiss 索引查找是一个工具,专为查询用户提供的基于 Faiss 的向量存储而设计。结合我们的大型语言模型 (LLM) 工具,它使用户能够从领域知识库中提取上下文相关的N信息。

要求#

  • 对于 AzureML 用户,该工具已安装在默认映像中,无需额外安装即可使用。

  • 对于本地用户,如果您的索引存储在本地路径中,

    pip install promptflow-vectordb

    如果您的索引存储在 Azure 存储中,

    pip install promptflow-vectordb[azure]

先决条件#

对于 AzureML 用户,#

  • 步骤 1. 准备 Azure Blob 存储上的可访问路径。如果需要创建新的存储帐户,请参阅此指南:Azure 存储帐户

  • 步骤 2. 在 Azure Blob 存储上创建相关的基于 Faiss 的索引文件。我们支持 LangChain 格式(index.faiss + index.pkl)的索引文件,这些文件可以通过使用我们的 promptflow-vectordb SDK 或按照LangChain 文档中的快速指南进行准备。请参阅创建 Faiss 索引的示例代码中的说明,以使用 promptflow-vectordb SDK 构建索引。

  • 步骤 3. 根据您放置索引文件的位置,应向 promptflow 运行时使用的标识授予某些角色。请参阅分配 Azure 角色的步骤

    位置

    角色

    工作区数据存储或工作区默认 Blob

    AzureML 数据科学家

    其他 Blob

    存储 Blob 数据读取器

对于本地用户,#

  • 仅通过执行上述步骤 2 在本地路径中创建基于 Faiss 的索引文件。

输入#

该工具接受以下输入

名称

类型

描述

必填

路径

字符串

向量存储的 URL 或路径。

本地路径(适用于本地用户)
<local_path_to_the_index_folder>

Azure blob URL 格式(已安装 [azure] 额外功能)
https://<account_name>.blob.core.windows.net/<container_name>/<path_and_folder_name>

AML 数据存储 URL 格式(已安装 [azure] 额外功能)
azureml://subscriptions/<your_subscription>/resourcegroups/<your_resource_group>/workspaces/<your_workspace>/data/<data_path>

公共 http/https URL(用于公开演示)
http(s)://<path_and_folder_name>

向量

list[float]

要查询的目标向量,可通过 LLM 工具生成。

top_k

整数

要返回的得分最高实体的数量。默认值为 3。

No

输出#

以下是该工具返回的 JSON 格式响应示例,其中包含得分最高的 k 个实体。该实体遵循我们的 promptflow-vectordb SDK 提供的向量搜索结果的通用架构。对于 Faiss 索引搜索,将填充以下字段:

字段名称

类型

描述

text

字符串

实体的文本

得分

float

实体与查询向量之间的距离

metadata

dict

用户在创建索引时提供的自定义键值对

输出
[
  {
    "metadata": {
      "link": "http://sample_link_0",
      "title": "title0"
    },
    "original_entity": null,
    "score": 0,
    "text": "sample text #0",
    "vector": null
  },
  {
    "metadata": {
      "link": "http://sample_link_1",
      "title": "title1"
    },
    "original_entity": null,
    "score": 0.05000000447034836,
    "text": "sample text #1",
    "vector": null
  },
  {
    "metadata": {
      "link": "http://sample_link_2",
      "title": "title2"
    },
    "original_entity": null,
    "score": 0.20000001788139343,
    "text": "sample text #2",
    "vector": null
  }
]