你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

快速入门:在 Azure 门户中向量化文本

在本快速入门中,你将在 Azure 门户中使用 导入和矢量化数据 向导开始使用 集成向量化。 向导将您的内容分块,并调用嵌入模型,在索引和查询时对这些区块进行向量化处理。

本快速入门使用 azure-search-sample-data 存储库中的基于文本的 PDF。 但是,你可以使用图像,这样仍然可以完成本快速入门。

先决条件

支持的数据源

导入和矢量化数据向导支持各种 Azure 数据源。 但是,本快速入门仅介绍处理整个文件的数据源,下表对此进行介绍。

支持的数据源 说明
Azure Blob 存储 此数据源适用于 Blob 和表。 必须使用标准性能(常规用途 v2)帐户。 访问层可以是热层、温层或冷层。
Azure Data Lake Storage (ADLS) Gen2 这是启用了分层命名空间的 Azure 存储帐户。 若要确认你有 Data Lake Storage,请检查“概述”页上的“属性”选项卡。

Azure 门户中 Azure Data Lake Storage 帐户的屏幕截图。
OneLake 此数据源目前为预览版。 有关限制和支持的快捷方式的信息,请参阅 OneLake 索引

支持的嵌入模型

对于集成向量化,必须在 Azure AI 平台上使用以下嵌入模型之一。 稍后部分提供了部署说明。

供应商 支持的模型
Azure AI Foundry 模型中的 Azure OpenAI1、2 text-embedding-ada-002
text-embedding-3-small
text-embedding-3-large
Azure AI 服务多服务资源3 对于文本和图像:Azure AI 多模态视觉4
Azure AI Foundry 模型目录 对于文本:
Cohere-embed-v3-english
Cohere-embed-v3-多语言

对于图像:
Facebook-DinoV2-Image-Embeddings-ViT-Base
Facebook-DinoV2-Image-Embeddings-ViT-Giant

1 Azure OpenAI 资源的终结点必须具有 自定义子域,例如 https://my-unique-name.openai.azure.com。 如果在 Azure 门户中创建了资源,则此子域是在资源设置过程中自动生成的。

2不支持 Azure AI Foundry 门户中创建的 Azure OpenAI 资源(具有嵌入模型访问权限)。 只有 Azure 门户中创建的 Azure OpenAI 资源与 Azure OpenAI 嵌入技能兼容。

3 出于计费目的,必须将 Azure AI 多服务资源附加到 Azure AI 搜索服务中的技能集。 除非使用 无键连接(预览版) 创建技能集,否则这两个资源必须位于同一区域。

4 Azure AI 视觉多模式嵌入模型在 所选区域中可用。

公共端点要求

在本快速入门中,上述所有资源都必须启用公共访问权限,以便 Azure 门户节点可以访问它们。 否则,向导将失败。 运行向导后,你可以为集成组件启用防火墙和专用终结点以确保安全。 有关详细信息,请参阅 导入向导中的安全连接

如果专用终结点已存在并且你无法禁用它们,则另一种选择是在虚拟机上从脚本或程序运行相应的端到端流。 虚拟机必须与专用终结点位于同一虚拟网络上。 下面是用于集成矢量化的 Python 代码示例 。 同一 GitHub 存储库 具有其他编程语言中的示例。

基于角色的访问权限

可以将 Microsoft Entra ID 与角色分配或基于密钥的身份验证与完全访问连接字符串配合使用。 对于与其他资源的 Azure AI 搜索连接,我们建议分配角色。 本快速入门将使用角色。

免费搜索服务支持与 Azure AI 搜索的基于角色的连接。 但是,它们不支持在与 Azure 存储或 Azure AI 视觉服务的出站连接中使用托管标识。 这种缺乏支持需要基于密钥的身份验证,具体取决于免费搜索服务与其他 Azure 资源之间的连接。 若要获得更安全的连接,请使用基本层或更高层,然后启用角色并配置托管标识。

配置建议的基于角色的访问:

  1. 在搜索服务上, 启用角色配置系统分配的托管标识

  2. 为自己分配以下角色

    • 搜索服务参与者

    • 搜索索引数据参与者

    • 搜索索引数据读取者

  3. 在数据源平台和嵌入模型提供程序上,创建允许搜索服务访问数据和模型的角色分配。 请参阅 “准备示例数据 ”和 “准备嵌入模型”。

注意

如果因为选项不可用(例如,不能选择数据源或嵌入模型)而无法继续完成向导操作,请重新访问角色分配。 错误消息指示模型或部署不存在,当真正的原因是搜索服务无权访问它们时。

检查空间

如果从免费服务开始,则限制为 3 个索引、数据源、技能集和索引器。 基本限制为 15。 在本快速入门中,我们会创建每种对象各一个,因此开始之前,请确保您有足够的空间来放置额外的物品。

准备示例数据

本部分将介绍适用于本快速入门的内容。 在继续之前,请确保已完成基于角色的访问的先决条件。

  1. 登录到 Azure 门户 并选择 Azure 存储帐户。

  2. 在左窗格中,选择 “数据存储>容器”。

  3. 创建容器,然后上传用于本快速入门的 健康计划 PDF 文档

  4. 要分配角色,请执行以下操作:

    1. 在左窗格中,选择“访问控制”(IAM)。

    2. 选择添加>添加角色分配

    3. 在“工作职能角色”下,选择“存储 Blob 数据读取者”,然后选择“下一步”

    4. 在“成员”下,选择“托管标识”,然后选择“选择成员”。

    5. 选择订阅和搜索服务的托管标识信息。

  5. (可选)将容器中的删除与搜索索引中的删除同步。 为了配置索引器以检测删除,请按照以下步骤操作:

    1. 在存储帐户上启用软删除。 如果使用 本机软删除,则不需要下一步。

    2. 添加自定义元数据索引器可以扫描以确定哪些 Blob 标记为要删除。 为自定义属性指定描述性名称。 例如,可以命名属性“IsDeleted”并将其设置为 false。 对容器中的每个 Blob 重复此步骤。 如果要删除 Blob,请将属性更改为 true。 有关详细信息,请参阅从 Azure 存储编制索引时的更改和删除检测

准备嵌入模型

该向导可以使用从 Azure OpenAI、Azure AI 视觉或 Azure AI Foundry 门户中的模型目录部署的嵌入模型。 在继续之前,请确保已完成基于角色的访问的先决条件。

该向导支持 text-embedding-ada-002、text-embedding-3-large、text-embedding-3-small。 在内部,该向导会调用 AzureOpenAIEmbedding 技能以连接到 Azure OpenAI。

  1. 登录到 Azure 门户 并选择 Azure OpenAI 资源。

  2. 要分配角色,请执行以下操作:

    1. 在左窗格中,选择“访问控制”(IAM)。

    2. 选择添加>添加角色分配

    3. “作业功能角色”下,选择 “认知服务 OpenAI 用户”,然后选择“ 下一步”。

    4. 在“成员”下,选择“托管标识”,然后选择“选择成员”。

    5. 选择订阅和搜索服务的托管标识信息。

  3. 若要部署嵌入模型,请执行以下步骤:

    1. 登录到 Azure AI Foundry 门户 并选择 Azure OpenAI 资源。

    2. 在左窗格中,选择 “模型”目录

    3. 部署 支持的嵌入模型

启动向导

若要启动矢量搜索向导,

  1. 登录到 Azure 门户 并选择 Azure AI 搜索服务。

  2. 在“概述”页上,选择“导入和矢量化数据”

    用于打开向导以导入和矢量化数据的命令的屏幕截图。

  3. 选择数据源: Azure Blob 存储ADLS Gen2OneLake

  4. 选择 RAG

    向导中 RAG 磁贴的屏幕截图。

连接到数据

下一步是连接到要用于搜索索引的数据源。

  1. 在“连接到数据”页上,指定 Azure 订阅。

  2. 选择提供示例数据的存储帐户和容器。

  3. 如果在 准备示例数据中启用了软删除和选择性地添加了自定义元数据,请选择“ 启用删除跟踪 ”复选框。

    • 在后续的索引运行时,将更新搜索索引,以基于 Azure 存储上软删除的 Blob 移除任何搜索文档。

    • Blob 支持本机 Blob 软删除或使用自定义元数据的软删除。

    • 如果为 blob 配置了使用软删除,请提供元数据属性名称/值对。 我们推荐IsDeleted。 如果在 Blob 上将 IsDeleted 设置为 true,则在下一次索引器运行时,索引器会删除对应的搜索文档。

    该向导不会检查 Azure 存储中的有效设置,如果未满足要求,则会引发错误。 相反,删除检测不起作用,并且搜索索引可能会随着时间的推移收集孤立文档。

    包含删除检测选项的数据源页的屏幕截图。

  4. 选中“ 使用托管标识进行身份验证 ”复选框。

    • 对于托管标识的类型,请选择 “系统分配”。

    • 标识应在 Azure 存储上具有存储 Blob 数据读者角色。

    • 请勿跳过此步骤。 如果向导无法连接到 Azure 存储,则发生连接错误。

  5. 选择 “下一步”。

矢量化文本

在此步骤中,指定嵌入模型来向量化分块数据。 分块是内置且不可配置的。 有效设置包括:

"textSplitMode": "pages",
"maximumPageLength": 2000,
"pageOverlapLength": 500,
"maximumPagesToTake": 0, #unlimited
"unit": "characters"
  1. 向量化文本 页上,选择嵌入模型的源:

  2. 指定 Azure 订阅。

  3. 根据资源,做出以下选择:

    • 对于 Azure OpenAI,请选择在 准备嵌入模型中部署的模型。

    • 对于 AI Foundry 模型目录,请选择在 准备嵌入模型中部署的模型。

    • 对于 AI 视觉多模式嵌入,请选择多服务资源。

  4. 对于身份验证类型,请选择 “系统分配的标识”。

    • 标识应在 Azure AI 服务多服务资源上具有认知服务用户角色。
  5. 选中相应复选框以确认使用这些资源的计费影响。

    向导中“向量化文本”页的屏幕截图。

  6. 选择 “下一步”。

矢量化并扩充图像

健康计划 PDF 包含公司徽标,除此之外,没有图像。 如果使用示例文档,则可以跳过此步骤。

但是,如果你使用包含实用图像的内容,可以通过两种方式应用 AI:

  • 使用目录或 Azure AI 视觉多模式嵌入 API 中受支持的图像嵌入模型来向量化图像。

  • 使用光学字符识别 (OCR) 识别图像中的文本。 此选项调用 OCR 技能 从图像中读取文本。

Azure AI 搜索和 Azure AI 资源必须位于同一区域或配置为 无密钥计费连接

  1. 在“矢量化图像”页上,指定向导应建立的连接类型。 对于图像矢量化,向导可以连接到 Azure AI Foundry 门户Azure AI Vision 中的嵌入模型。

  2. 指定订阅。

  3. 对于 Azure AI Foundry 模型目录,请指定项目和部署。 有关详细信息,请参阅 准备嵌入模型

  4. (可选)破解二进制图像(如扫描的文档文件),并使用 OCR 识别文本。

  5. 选中相应复选框以确认使用这些资源的计费影响。

    向导中“矢量化图像”页的屏幕截图。

  6. 选择 “下一步”。

添加语义排名

“高级设置” 页上,可以选择添加 语义排名 ,以在查询执行结束时重新查看结果。 重新排名会将在语义方面最相关的匹配项提升到顶部。

映射新字段

该步骤的要点:

  • 索引架构为分块数据提供向量字段和非函数字段。

  • 可以添加字段,但不能删除或修改生成的字段。

  • 文档分析模式会创建区块(每个区块一个搜索文档)。

“高级设置” 页上,可以选择添加新字段,假设数据源提供在第一次传递时未选取的元数据或字段。 默认情况下,向导将生成下表中所述的字段。

字段 适用于 说明
chunk_id 文本和图像矢量 生成的字符串字段。 可搜索、可检索和可排序。 这是索引的文档键。
parent_id 文本向量 生成的字符串字段。 可检索和筛选。 标识区块来源的父文档。
chunk 文本和图像矢量 字符串字段。 数据区块的人工可读版本。 可搜索和可检索,但不可筛选、不可分面、不可排序。
title 文本和图像矢量 字符串字段。 易于阅读的文档标题、页标题或页码。 可搜索和可检索,但不可筛选、不可分面、不可排序。
文本向量 文本向量 Collection(Edm.single)。 区块的矢量表示。 可搜索和可检索,但不可筛选、不可分面、不可排序。

无法修改生成的字段或它们的属性,但如果数据源提供了新字段,则可以添加新字段。 例如,Azure Blob 存储提供元数据字段的集合。

  1. 选择添加字段

  2. 从可用字段中选择源字段,输入索引的字段名称,并接受默认数据类型(或替代)。

    注意

    元数据字段可搜索,但不可检索、筛选、分面或排序。

  3. 如果要将架构还原到其原始版本,请选择“ 重置”。

计划索引编制

“高级设置” 页上,还可以为索引器指定可选的 运行计划 。 从下拉列表中选择间隔后,选择“ 下一步”。

完成该向导

  1. 在“查看配置”页面上,为向导创建的对象指定前缀。 通用的前缀有助于保持有序。

  2. 选择“ 创建”。

当向导完成配置时,它会创建以下对象:

  • 数据源连接。

  • 包含矢量字段、向量器、矢量配置文件和向量算法的索引。 无法在执行向导工作流期间设计或修改默认索引。 索引符合 2024-05-01-preview REST API

  • 包含用于分块的文本拆分技能和用于矢量化的嵌入技能的技能组。 嵌入技能是 Azure OpenAI 的 AzureOpenAIEmbeddingModel 技能 ,或者是 Azure AI Foundry 模型目录的 AML 技能 。 技能组还具有 索引投影 配置,该配置将数据从数据源中的一个文档映射到“子”索引中的相应区块。

  • 具有字段映射和输出字段映射的索引器(如果适用)。

小窍门

向导创建的对象具有可配置的 JSON 定义。 若要查看或修改这些定义,请从左窗格中选择 “搜索管理 ”,可在其中查看索引、索引器、数据源和技能集。

检查结果

搜索资源管理器接受文本字符串作为输入,然后矢量化矢量器查询执行文本。

  1. 在 Azure 门户中,转到 “搜索管理>索引”,然后选择索引。

  2. 选择 “查询”选项,然后选择“ 隐藏搜索结果中的矢量值”。 此步骤使结果更具可读性。

    查询选项按钮的屏幕截图。

  3. “视图 ”菜单中,选择 JSON 视图 ,以便可以在向量查询参数中 text 输入矢量查询的文本。

    用于打开 JSON 视图的菜单命令的屏幕截图。

    默认查询为空搜索("*"),但包含返回数字匹配项的参数。 这是一种并行运行文本和矢量查询的混合查询。 它还包括语义排名,并通过 select 语句指定要在结果中返回哪些字段。

     {
       "search": "*",
       "count": true,
       "vectorQueries": [
         {
           "kind": "text",
           "text": "*",
           "fields": "text_vector,image_vector"
         }
       ],
       "queryType": "semantic",
       "semanticConfiguration": "my-demo-semantic-configuration",
       "captions": "extractive",
       "answers": "extractive|count-3",
       "queryLanguage": "en-us",
       "select": "chunk_id,text_parent_id,chunk,title,image_parent_id"
     }
    
  4. 将这两个星号 (*) 占位符替换为与健康计划相关的问题,比如 Which plan has the lowest deductible?

     {
       "search": "Which plan has the lowest deductible?",
       "count": true,
       "vectorQueries": [
         {
           "kind": "text",
           "text": "Which plan has the lowest deductible?",
           "fields": "text_vector,image_vector"
         }
       ],
       "queryType": "semantic",
       "semanticConfiguration": "my-demo-semantic-configuration",
       "captions": "extractive",
       "answers": "extractive|count-3",
       "queryLanguage": "en-us",
       "select": "chunk_id,text_parent_id,chunk,title"
     }
    
  5. 若要运行查询,请选择“ 搜索”。

    搜索结果的屏幕截图。

    每个文档都是原始 PDF 的一个区块。 title 字段显示区块来自哪个 PDF。 每个 chunk 都很长。 你可以将其中一个复制并粘贴到文本编辑器中,以读取整个值。

  6. 若要查看特定文档中的所有区块,请为特定 PDF 的 title_parent_id 字段添加筛选器。 可以检查索引的“ 字段 ”选项卡,确认该字段可筛选。

    {
       "select": "chunk_id,text_parent_id,chunk,title",
       "filter": "text_parent_id eq 'aHR0cHM6Ly9oZWlkaXN0c3RvcmFnZWRlbW9lYXN0dXMuYmxvYi5jb3JlLndpbmRvd3MubmV0L2hlYWx0aC1wbGFuLXBkZnMvTm9ydGh3aW5kX1N0YW5kYXJkX0JlbmVmaXRzX0RldGFpbHMucGRm0'",
       "count": true,
       "vectorQueries": [
           {
              "kind": "text",
              "text": "*",
              "k": 5,
              "fields": "text_vector"
           }
        ]
    }
    

清理

Azure AI 搜索是一项计费资源。 如果不再需要它,请将其从订阅中删除以免产生费用。

下一步

本快速入门介绍了 导入和矢量化数据向导,该向导创建用于集成向量化的所有必需对象。 若要详细了解每个步骤,请参阅 在 Azure AI 搜索中设置集成矢量化