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

为搜索查询和文档生成嵌入项

Azure AI 搜索不托管矢量化模型,因此你面临的挑战之一是为查询输入和输出创建嵌入项。 你可以使用任何嵌入模型,但本文假设你使用 Azure OpenAI 嵌入模型。 示例存储库中的演示利用了 Azure OpenAI 的相似性嵌入模型

维度属性为每个矢量字段最少设置 2 个维度,最多设置 3072 个维度。

注意

本文适用于矢量搜索的正式发布版本,该版本假设应用程序代码调用外部资源(例如 Azure OpenAI)进行矢量化。 一项名为集成矢量化的新功能,目前为预览版,可提供嵌入式矢量化。 集成矢量化依赖于索引器、技能组,以及 AzureOpenAIEmbedding 技能或某个指向在 Azure AI 搜索外部执行的模型的自定义技能。

如何使用模型

  • 查询输入要求你将用户提供的输入提交到嵌入模型,该模型可以快速地将人类可读文本转换为矢量。

    • 例如,可以使用 text-embedding-ada-002 生成文本嵌入项,使用图像检索 REST API 生成图像嵌入项。

    • 为了避免速率限制,可以在工作负荷中实现重试逻辑。 对于 Python 演示,我们使用了 tenacity

  • 查询输出是在搜索索引中找到的任何匹配文档。 搜索索引之前必须已加载那些具有一个或多个带嵌入项的矢量字段的文档。 不管使用了什么模型进行索引,都应使用相同的模型进行查询。

在同一区域中创建资源

如果想要同一区域中的资源,请从以下区域开始:

  1. 相似性嵌入模型区域,目前位于欧洲和美国。

  2. Azure AI 搜索区域

  3. 若要支持包含语义排名的混合查询,或者要在 AI 扩充管道中尝试使用自定义技能进行机器学习模型集成,请记下提供这些功能的区域。

为即兴查询生成嵌入项

以下 Python 代码将生成一个嵌入,可以将其粘贴到矢量查询的“values”属性中。

!pip install openai==0.28.1

import openai

openai.api_type = "azure"
openai.api_key = "YOUR-API-KEY"
openai.api_base = "https://YOUR-OPENAI-RESOURCE.openai.azure.com"
openai.api_version = "2023-05-15"

response = openai.Embedding.create(
    input="How do I use Python in VSCode?",
    engine="text-embedding-ada-002"
)
embeddings = response['data'][0]['embedding']
print(embeddings)

有关嵌入模型集成的提示和建议

  • 确定用例:评估具体用例,其中的矢量搜索功能的嵌入模型集成可以为搜索解决方案增加价值。 这可能包括将图像内容与文本内容进行匹配、进行跨语言搜索,或者查找类似文档。
  • 优化成本和性能:矢量搜索可能会占用大量资源,并且存在最大限制,因此请考虑仅对包含语义的字段进行矢量化。
  • 选择正确的嵌入模型:为具体用例选择适当的模型,例如用于基于文本的搜索的字词嵌入或用于视觉搜索的图像嵌入。 考虑使用预训练模型,例如 OpenAI 中的 text-embedding-ada-002Azure AI 计算机视觉中的图像检索 REST API。
  • 标准化矢量长度:确保在将矢量长度存储到搜索索引之前对其进行标准化,以提高相似性搜索的准确度和性能。 大多数预训练模型已经标准化,但并非全部如此。
  • 微调模型:如果需要,可以根据域特定数据微调所选模型,以提高其性能以及与搜索应用程序的相关性。
  • 测试和迭代:持续测试和完善嵌入模型集成,以实现所需的搜索性能和用户满意度。

后续步骤