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

使用 Azure OpenAI 或 Azure AI 搜索来搜索和查询企业知识库

Azure Blob 存储
用于 Redis 的 Azure 缓存
Azure AI 搜索
Azure AI 服务
Azure AI 文档智能

本文介绍如何使用 Azure OpenAI 服务Azure AI 搜索 (以前称为 Azure 认知搜索)在企业数据中搜索文档并检索结果,以提供 ChatGPT 式的问答体验。 此解决方案介绍了两种方法:

  • 嵌入方法:使用 Azure OpenAI 嵌入模型创建矢量化数据。 矢量搜索是一项显著增加搜索结果语义相关性的功能。

  • Azure AI 搜索方法:使用 Azure AI 搜索根据用户查询搜索并检索相关文本数据。 此服务支持全文搜索语义搜索矢量搜索混合搜索

注意

在 Azure AI 搜索中,语义搜索矢量搜索功能目前为公共预览版。

体系结构:嵌入方法

下载此体系结构的 Visio 文件

数据流

要引入的文档可能来自各种源,例如 FTP 服务器上的文件、电子邮件附件或 Web 应用程序附件。 这些文档可以通过 Azure 逻辑应用Azure FunctionsAzure 数据工厂等服务引入到 Azure Blob 存储。 数据工厂最适合用于传输批量数据。

嵌入创建:

  1. 文档将引入 Blob 存储,并触发 Azure 函数以从文档中提取文本。

  2. 如果文档采用非英语语言且需要翻译,Azure 函数可以调用 Azure Translator 来执行翻译。

  3. 如果文档是 PDF 或图像,Azure 函数可以调用 Azure AI 文档智能来提取文本。 如果文档是 Excel、CSV、Word 或文本文件,则 python 代码可用于提取文本。

  4. 然后,提取的文本会相应地分块,并使用 Azure OpenAI 嵌入模型将每个区块转换为嵌入。

  5. 这些嵌入内容将持久保存到矢量数据库。 此解决方案使用 Azure Cache for Redis 的企业层,但可以使用任何矢量数据库。

查询和检索:

  1. 用户通过用户应用程序发送查询。

  2. Azure OpenAI 嵌入模型用于将查询转换为矢量嵌入。

  3. 在向量数据库中使用此查询向量的向量相似性搜索将返回前 k 个匹配内容。 可以根据相似性度量值定义的阈值(如余弦相似性)设置要检索的匹配内容。

  4. 检索到的前 k 个内容和系统提示将发送到 Azure OpenAI 语言模型,例如 GPT-3.5 Turbo 或 GPT-4

  5. 搜索结果显示为用户发起的搜索查询的答案,或者搜索结果可用作多轮次对话方案的地面数据

体系结构:Azure AI 搜索拉取方法

Diagram that shows the pull approach.下载此体系结构的 Visio 文件

索引创建:

  1. Azure AI 搜索用于在 Blob 存储中创建文档的搜索索引。 Azure AI 搜索支持 Blob 存储,因此拉取模型用于对内容进行爬网,并且该功能是通过索引器实现的。

    注意

    Azure AI 搜索支持其他数据源在使用拉取模型时进行索引。 还可以从多个数据源为文档编制索引,并合并为单个索引。

  2. 如果某些方案需要翻译文档,可以使用 Azure Translator,这是内置技能中包含的一项功能。

  3. 如果文档不可搜索(如扫描的 PDF 或图像),则可以通过使用内置自定义技能作为 Azure AI 搜索中的技能集来应用 AI。 对不可全文搜索的内容应用 AI 称为 AI 扩充。 根据要求,可将 Azure AI 文档智能用作自定义技能,通过文档分析模型预生成模型自定义提取模型从 PDF 或图像中提取文本。

    如果 AI 扩充是一项要求,则必须使用拉取模型(索引器)来加载索引。

    如果将向量字段添加到索引架构中,该架构加载用于索引的向量数据,则可以通过为该向量数据编制索引来启用向量搜索。 可以通过 Azure OpenAI 嵌入生成矢量数据。

查询和检索:

  1. 用户通过用户应用程序发送查询。

  2. 查询通过搜索文档 REST API 传递到 Azure AI 搜索。 查询类型可以是简单的,非常适合全文搜索,也可以是完整查询类型,后者适用于高级查询构造,如正则表达式、模糊和野生卡搜索以及邻近搜索。 如果查询类型设置为语义,则会对文档执行语义搜索,并检索相关内容。 Azure AI 搜索还支持矢量搜索混合搜索,这要求将用户查询转换为矢量嵌入。

  3. 检索到的内容和系统提示将发送到 Azure OpenAI 语言模型,例如 GPT-3.5 Turbo 或 GPT-4

  4. 搜索结果显示为用户发起的搜索查询的答案,或者搜索结果可用作多轮次对话方案的地面数据

体系结构:Azure AI 搜索推送方法

如果数据源不受支持,可以使用推送模型将数据上传到 Azure AI 搜索。

Diagram that shows the push approach.下载此体系结构的 Visio 文件

索引创建:

  1. 如果要引入的文档必须翻译,则可以使用 Azure Translator
  2. 如果文档采用不可搜索的格式(如 PDF 或图像),则可以使用 Azure AI 文档智能 提取文本。
  3. 提取的文本可以通过 Azure OpenAI 嵌入矢量搜索进行矢量化,并且可以通过 Rest APIAzure SDK 将数据推送到 Azure AI 搜索索引。

查询和检索:

此方法中的查询和检索与本文前面的拉取方法相同。

组件

  • Azure OpenAI 提供了对 Azure OpenAI 语言模型的 REST API 访问权限,包括 GPT-3、Codex 和 Embeddings 模型系列,用于内容生成、摘要、语义搜索和自然语言到代码的转换。 可以在 Azure OpenAI Studio 中使用 REST API、Python SDK 或基于 Web 的界面访问该服务。

  • Azure AI 文档智能是一项 Azure AI 服务。 它提供文档分析功能,用于提取印刷文本和手写文本、表和键值对。 Azure AI 文档智能提供的预生成模型可从发票、文档、收据、ID 卡和名片中提取数据。 还可以使用自定义模板表单模型或自定义神经文档模型来训练和部署自定义模型。

  • Document Intelligence Studio 提供了一个 UI,用于探索 Azure AI 文档智能功能和模型,以及生成、标记、训练和部署自定义模型。

  • Azure AI 搜索是一项云搜索服务,提供基础结构、API 和搜索工具。 可以使用 Azure AI 搜索在 Web、移动和企业应用程序中的私有不同内容上构建搜索体验。

  • Blob 存储是此方案中原始文件的对象存储解决方案。 Blob 存储支持各种语言(例如 .NET、Node.js 和 Python)的库。 应用程序可以通过 HTTP 或 HTTPS 访问 Blob 存储中的文件。 Blob 存储具有热、冷和存档访问层,支持针对存储大量数据的成本优化。

  • Azure Cache for Redis 的企业层提供托管的 Redis Enterprise 模块,例如 RediSearch、RedisBloom、RedisTimeSeries 和 RedisJSON。 矢量字段允许矢量相似性搜索,它支持实时矢量索引(暴力算法 (FLAT) 和分层导航小世界算法 (HNSW))、实时矢量更新和 k-nearest 邻居搜索。 Azure Cache for Redis 可为新式应用程序提供关键的低延迟高吞吐量数据存储解决方案。

备选方法

根据你的方案,可以添加以下工作流。

方案详细信息

由于文档数量庞大,手动处理越来越耗时、容易出错且资源密集型。 处理大量文档(大部分是 PDF、Excel、CSV、Word、PowerPoint 和图像格式)的非结构化数据的组织在处理客户的扫描和手写文档和表单时面临重大挑战。

这些文档和表单包含关键信息,如个人信息、病历和损害评估报告,必须准确提取和处理这些信息。

组织通常已经拥有自己的信息知识库,这些信息可用于回答具有最适当答案的问题。 可以使用这些解决方案中所述的服务和管道来创建文档搜索机制的源。

可能的用例

此解决方案可为制药公司和金融服务等行业的组织提供价值。 它适用于具有大量包含嵌入信息的文档的任何公司。 这种 AI 支持的端到端搜索解决方案可用于根据用户查询从文档中提取有意义的信息,以提供 ChatGPT 样式的问答体验。

作者

本文由 Microsoft 维护, 它最初是由以下贡献者撰写的。

主要作者:

  • Dixit Arora | 高级客户工程师,ISV DN CoE
  • Jyotsna Ravi | 首席客户工程师,ISV DN CoE

若要查看非公开领英个人资料,请登录领英。

后续步骤