教程:在 Azure AI 搜索中选择 RAG 的嵌入和聊天模型
基于 Azure AI 搜索构建的 RAG 解决方案依赖于嵌入模型进行矢量化,并依赖于聊天模型来搜索数据。
在本教程中,你将了解:
- 了解 Azure 云中的哪些模型适用于内置集成
- 了解用于聊天的 Azure 模型
- 部署模型并收集代码的模型信息
- 配置对 Azure 模型的搜索引擎访问权限
- 了解用于附加非 Azure 模型的自定义技能和矢量器
如果没有 Azure 订阅,请在开始前创建一个试用版订阅。
先决条件
Azure 门户用于在 Azure 云中部署模型和配置角色分配。
创建角色分配所需的 Azure 订阅上的“所有者”角色。 模型提供程序对部署和访问模型具有更多角色要求。 以下步骤中指出了这些内容。
模型提供程序,例如 Azure OpenAI、通过 Azure AI 多服务帐户的 Azure AI 视觉,或 Azure AI Studio。
本教程使用 Azure OpenAI。 列出了其他提供程序,以便了解集成矢量化的选项。
Azure AI 搜索、基本层或更高版本提供角色分配中使用的托管标识。
共享区域。 若要完成本系列中的所有教程,该区域必须同时支持 Azure AI 搜索和模型提供程序。 有关以下情况,请参阅支持的区域:
Azure AI 搜索目前在某些区域(例如中国北部和中国北部 2/3)的可用性有限。 请检查 Azure AI 搜索区域列表,以确认区域状态。
查看支持内置矢量化的模型
矢量化内容改进了 RAG 解决方案中的查询结果。 Azure AI 搜索支持索引管道中的内置矢量化操作。 它还支持在查询时矢量化,将文本或图像输入转换为嵌入内容进行矢量搜索。 在此步骤中,标识适用于内容和查询的嵌入模型。 如果要提供原始矢量数据和原始矢量查询,或者 RAG 解决方案不包含矢量数据,请跳过此步骤。
包含文本到矢量转换步骤的矢量查询必须使用索引期间使用的相同嵌入模型。 如果使用不同的模型,搜索引擎不会引发错误,但结果不佳。
若要满足同一模型要求,请选择可在索引编制期间通过技能引用的嵌入模型,并在查询执行期间通过矢量器来引用模型。 下表列出了技能和矢量器对。 查看如何使用嵌入模型,跳到为调用嵌入技能和匹配矢量器的代码“创建索引管道”。
Azure AI 搜索为 Azure 云中的以下嵌入模型提供技能和矢量化支持。
客户端 | 嵌入模型 | 技能 | 矢量化器 |
---|---|---|---|
Azure OpenAI | text-embedding-ada-002、text-embedding-3-large、text-embedding-3-small | AzureOpenAIEmbedding | AzureOpenAIEmbedding |
Azure AI 视觉 | multimodal 4.0 1 | AzureAIVision | AzureAIVision |
1 支持图像和文本矢量化。
除了此处列出的模型之外,还可以使用其他模型。 有关详细信息,请参阅本文中的使用非 Azure 模型嵌入。
注意
嵌入模型的输入通常是分块数据。 在 Azure AI 搜索 RAG 模式中,分块在索引器管道中处理,本系列中另一个教程涵盖此内容。
在查询时查看用于生成 AI 的模型
Azure AI 搜索没有聊天模型的集成代码,因此应选择熟悉且满足要求的 LLM。 可以修改查询代码以尝试不同的模型,而无需重新生成索引或重新运行索引管道的任何部分。 查看搜索并为调用聊天模型的代码生成答案。
以下模型通常用于聊天搜索体验:
客户端 | 聊天模型 |
---|---|
Azure OpenAI | GPT-35-Turbo, GPT-4, GPT-4o, GPT-4 Turbo |
GPT-35-Turbo 和 GPT-4 模型经过优化,可以处理格式化为对话的输入。
在本教程中,我们使用 GPT-4o。 在测试期间,我们发现不太可能使用自己的训练数据进行补充。 例如,如果查询为“地球有多少面积被水覆盖?”,GPT-35-Turbo 会使用其对地球的内置知识回答:“地球面积的 71% 被水覆盖”,即使样本数据不提供这一事实也是如此。 相比之下,GPT-4o 会(正确)回答:“我不知道”。
部署模型并收集信息
必须通过终结点部署和访问模型。 嵌入相关的技能和矢量器都需要维度数和模型名称。
本教程系列使用以下模型和模型提供程序:
- 用于嵌入的 Azure OpenAI 上的 Text-embedding-3-large
- Azure OpenAI 上的 GPT-4o,用于聊天完成
必须具有认知服务 OpenAI 参与者或更高版本才能在 Azure OpenAI 中部署模型。
在左侧菜单选择“部署”。
选择“部署模型”>“部署基本模型”。
从下拉列表中选择 text-embedding-3-large,然后确认选择。
指定部署名称。 建议使用“text-embedding-3-large”。
接受默认值。
选择“部署”。
对 gpt-4o 重复前面的步骤。
记下模型名称和终结点。 嵌入技能和矢量化器在内部组装完整的终结点,因此只需要资源 URI。 例如,给定
https://MY-FAKE-ACCOUNT.openai.azure.com/openai/deployments/text-embedding-3-large/embeddings?api-version=2024-06-01
,应在技能和矢量器定义中提供的终结点为https://MY-FAKE-ACCOUNT.openai.azure.com
。
配置对 Azure 模型的搜索引擎访问权限
对于管道和查询执行,本教程使用 Microsoft Entra ID 进行身份验证和角色进行授权。
在 Azure OpenAI 上,为自己分配搜索服务标识权限。 本教程的代码在本地运行。 对 Azure OpenAI 的请求源自你的系统。 此外,搜索引擎的搜索结果将传递到 Azure OpenAI。 由于这些原因,你和搜索服务都需要拥有 Azure OpenAI 的权限。
将 Azure AI 搜索配置为使用系统托管标识。
查找 Azure OpenAI 资源。
在左侧菜单,选择“访问控制 (IAM)”。
选择“添加角色分配”。
选择“托管标识”,然后选择“成员”。 在下拉列表中查找搜索服务的系统托管标识。
接下来,选择“用户、组或服务主体”,然后选择“成员”。 搜索用户帐户并从下拉列表中选择。
选择“查看和分配”,创建角色分配。
若要访问 Azure AI 视觉上的模型,请分配认知服务 OpenAI 用户。 对于 Azure AI Studio,请分配 Azure AI 开发人员。
使用非 Azure 模型进行嵌入
集成任何嵌入模型的模式是将其包装在自定义技能和自定义矢量化器中。 本部分提供参考文章链接。 有关调用非 Azure 模型的代码示例,请参阅自定义嵌入演示。
客户端 | 嵌入模型 | 技能 | 矢量化器 |
---|---|---|---|
任意 | 任意 | 自定义技能 | 自定义矢量器 |