使用RAG(检索增强生成)应用程序时,检索器(例如Azure AI Search)在获取语言模型最相关结果以向最终用户提供响应方面起着至关重要的作用。存储与特定用户搜索语义相似的数据表示(例如向量)至关重要,它们是向量和混合搜索中的关键组件。
解析、分块、矢量化数据并将其存储在索引中的任务由 Azure AI Search 功能(称为集成矢量化)处理。对于受支持的数据源,此功能还支持自动数据提取、丰富和处理。
参考链接:https://azureopenai.cloudallonline.com/?zxwsh213
微软 Azure OpenAI 企业账户接口申请

但是,有许多数据源并未直接与 AI Search 集成,但可以通过Azure Logic Apps中提供的各种连接器访问。Azure Logic Apps引入了新功能,简化了从其连接器处理非结构化数据文档所需的每个步骤。现在,数据提取、提取文件、解析数据、分块、矢量化和将数据索引到 Azure AI Search 中都简化为一个集成流程。此外,Azure Logic Apps现在提供用于高需求连接器的模板,并为 RAG 就绪的 AI Search 索引提供预定义的索引工作流,从而简化了这些工作流的创建。其中一些模板包括位于 SharePoint Online、Azure Files、SFTP 等中的文件的索引管道。
如何开始
先决条件:
Azure AI Search 索引创建
此时,此集成需要在 Azure AI Search 中创建一个具有以下架构的索引(至少如此)。在本文后面,我们将解释如何更新工作流以相应地将更多字段映射到每个文档块。
Azure AI 搜索索引:此集成所需的最低架构
注意: 以下示例索引定义包含一个具有 3072 个维度的矢量字段,对应于 Azure OpenAI text-embedding-3-large 模型。如果您使用不同的 Azure OpenAI 嵌入模型或不同的维度,则必须在创建索引之前相应地调整索引定义。
{
"name": "chunked-index",
"fields": [
{
"name": "id",
"type": "Edm.String",
"searchable": true,
"retrievable": true,
"key": true
},
{
"name": "documentName",
"type": "Edm.String",
"searchable": true,
"retrievable": true
},
{
"name": "content",
"type": "Edm.String",
"searchable": true,
"retrievable": true
},
{
"name": "embeddings",
"type": "Collection(Edm.Single)",
"searchable": true,
"filterable": false,
"retrievable": true,
"dimensions": 3072,
"vectorSearchProfile": "vector-profile"
}
],
"vectorSearch": {
"algorithms": [
{
"name": "vector-config",
"kind": "hnsw",
"hnswParameters": {
"metric": "cosine",
"m": 4,
"efConstruction": 400,
"efSearch": 500
},
"exhaustiveKnnParameters": null
}
],
"profiles": [
{
"name": "vector-profile",
"algorithm": "vector-config"
}
]
}
}
Azure AI Search 索引:查询时矢量化
如果您需要 Azure AI Search 在查询时对数据进行矢量化,而不是从 RAG 应用程序的协调器端执行此操作,则可以对索引使用以下 JSON 定义。您需要确保更改 Azure OpenAI 终结点并更改为您自己的终结点。此外,为您的 AI 搜索服务创建服务托管标识,并按照说明 在 Azure OpenAI 服务中分配认知服务 OpenAI 用户角色。
{
"name": "chunked-index",
"fields": [
{
"name": "id",
"type": "Edm.String",
"searchable": true,
"retrievable": true,
"key": true
},
{
"name": "documentName",
"type": "Edm.String",
"searchable": true,
"retrievable": true
},
{
"name": "content",
"type": "Edm.String",
"searchable": true,
"retrievable": true
},
{
"name": "embeddings",
"type": "Collection(Edm.Single)",
"searchable": true,
"filterable": false,
"retrievable": true,
"dimensions": 3072,
"vectorSearchProfile": "vector-profile"
}
],
"vectorSearch": {
"algorithms": [
{
"name": "vector-config",
"kind": "hnsw",
"hnswParameters": {
"metric": "cosine",
"m": 4,
"efConstruction": 400,
"efSearch": 500
},
"exhaustiveKnnParameters": null
}
],
"profiles": [
{
"name": "vector-profile",
"algorithm": "vector-config",
"vectorizer": "azureOpenAI-vectorizer"
}
],
"vectorizers": [
{
"name": "azureOpenAI-vectorizer",
"kind": "azureOpenAI",
"azureOpenAIParameters": {
"resourceUri": "https://<yourAOAIendpoint>.openai.azure.com",
"deploymentId": "text-embedding-3-large",
"modelName": "text-embedding-3-large"
}
],
}
}
在 Azure 门户中根据 JSON 创建索引
你可以这样使用上面的 JSON 模板从 Azure 门户创建索引:

图 1 - 使用 Azure 门户从 JSON 创建 Azure AI Search 索引

图 2 - 复制本教程中提供的用于创建索引的 JSON 模板
使用 Azure Logic App 工作流模板从非结构化数据源导入数据

图 3 - 从 Azure Logic App 中的模板添加工作流

图 4 - 选择 Azure Files RAG 模板

图 5 - 查看工作流并选择它

图 6 - 命名您的工作流程

图 7 - 配置连接器连接
此处提供了每个连接配置的示例。请确保您对资源具有最低程度的贡献者访问权限,以建立连接。
对于 Azure 文件连接:您的 Azure 存储帐户 URI 位于 Azure 存储帐户设置 > 端点 > 文件服务下,域为.http://file.core.windows.net。您可以在存储帐户安全 + 网络 > 密钥 > 连接字符串下找到连接字符串。
复制 URI 并将其添加到存储帐户 URI配置和连接字符串中的相应字段中。

图 8 - Azure 文件连接配置
对于 Azure AI Search 连接:Azure AI Search 端点 URL 位于 AI Search 服务概述 > 基本信息 > URL下,域为.http://search.windows.net。
如果您的设置是使用管理密钥,您可以在 AI 搜索服务设置 > 密钥 > 主管理密钥下找到它。

图 9-AI 搜索连接
对于 Azure OpenAI 连接:Azure OpenAI 端点 URL 位于您的 Azure OpenAI 服务资源管理>密钥和端点>端点下,后缀域为.http://openai.azure.com。对于密钥设置,复制 Key1 并复制到身份验证密钥配置中。

图 10 - Azure OpenAI 连接

图 11-连接配置完成
填写以下索引配置详细信息。假设:
索引工作流配置详细信息:

图 12 - Azure OpenAI 嵌入模型名称

图 13 - Azure 文件共享名称

图 14 - 查看工作流详细信息并创建

图 15 - Azure AI Studio 聊天游乐场“添加您的数据”
其他注意事项
为了获得最佳的 AI 搜索相关性,请考虑使用将向量和关键字搜索与语义排序器相结合的混合方法。这种方法通常对许多用例更有效。有关更多信息,请访问: Azure AI Search 使用混合搜索超越向量搜索。本案例特别关注固定分块和纯文本场景。