AI 驱动的搜索入门

    AI 驱动的搜索,有时也称为向量搜索或混合搜索,使用大型语言模型 (LLM),根据查询的含义和上下文检索搜索结果。

    本教程将引导您完成在 Meilisearch 项目中配置 AI 驱动的搜索。您将了解如何使用 OpenAI 设置嵌入器、生成文档嵌入,以及执行您的首次搜索。

    要求

    创建一个新索引

    首先,创建一个新的 Meilisearch 项目。如果这是您第一次使用 Meilisearch,请按照快速入门,然后再回到本教程。

    接下来,创建一个 kitchenware 索引并添加此厨具产品数据集到其中。Meilisearch 需要一些时间来处理您的请求,但您可以在数据索引时继续下一步。

    使用 OpenAI 生成嵌入

    在此步骤中,您将配置一个 OpenAI 嵌入器。Meilisearch 使用嵌入器将文档翻译成嵌入,嵌入是文档含义和上下文的数学表示。

    在您的文本编辑器中打开一个空白文件。您只会使用此文件逐步构建您的嵌入器,因此如果您计划一次完成本教程,则无需保存它。

    选择嵌入器名称

    在您的空白文件中,创建您的 embedder 对象

    {
      "products-openai": {}
    }
    

    products-openai 是本教程中您的嵌入器的名称。您可以随意命名嵌入器,但尽量保持简单、简短且易于记忆。

    选择嵌入器来源

    Meilisearch 依赖第三方服务来生成嵌入。这些服务通常被称为嵌入器来源。

    向您的嵌入器对象添加一个新的 source 字段

    {
      "products-openai": {
        "source": "openAi"
      }
    }
    

    Meilisearch 支持多种嵌入器来源。本教程使用 OpenAI,因为它是一个适合大多数用例的良好选择。

    选择嵌入器模型

    模型提供嵌入器处理您的文档所需的信息。

    向您的嵌入器对象添加一个新的 model 字段

    {
      "products-openai": {
        "source": "openAi",
        "model": "text-embedding-3-small"
      }
    }
    

    每个嵌入器服务都支持针对特定用例的不同模型。text-embedding-3-small 是一种经济高效的通用模型。

    创建您的 API 密钥

    登录 OpenAI,或者如果您是第一次使用,请创建一个帐户。使用OpenAI 的 Web 界面生成一个新的 API 密钥。

    apiKey 字段添加到您的嵌入器

    {
      "products-openai": {
        "source": "openAi",
        "model": "text-embedding-3-small",
        "apiKey": "OPEN_AI_API_KEY",
      }
    }
    

    OPEN_AI_API_KEY 替换为您自己的 API 密钥。

    OpenAI 密钥层级

    您可以为本教程使用任何密钥层级。在生产环境中使用至少Tier 2 密钥

    设计提示模板

    Meilisearch 嵌入器只接受文本输入,但文档可以是包含不同类型数据的复杂对象。这意味着您必须将文档转换为单个文本字段。Meilisearch 使用 Liquid,一种开源模板语言来帮助您做到这一点。

    一个好的模板应该简短,并且只包含关于文档的最重要信息。将以下 documentTemplate 添加到您的嵌入器

    {
      "products-openai": {
        "source": "openAi",
        "model": "text-embedding-3-small",
        "apiKey": "OPEN_AI_API_KEY",
        "documentTemplate": "An object used in a kitchen named '{{doc.name}}'"
      }
    }
    

    此模板首先给出文档的总体背景:厨房中使用的物体。然后添加特定于每个文档的信息:doc 代表您的文档,您可以使用点符号访问其任何属性。 name 是一个属性,其值例如 wooden spoonrolling pin。由于它存在于此数据集中的所有文档中,并用简洁的语言描述了产品,因此是包含在模板中的一个不错的选择。

    创建嵌入器

    您的嵌入器对象已准备就绪。通过更新索引设置将其发送到 Meilisearch

    curl \
      -X PATCH 'MEILISEARCH_URL/indexes/kitchenware/settings/embedders' \
      -H 'Content-Type: application/json' \
      --data-binary '{
        "products-openai": {
          "source": "openAi",
          "apiKey": "OPEN_AI_API_KEY",
          "model": "text-embedding-3-small",
          "documentTemplate": "An object used in a kitchen named '{{doc.name}}'"
        }
      }'
    

    MEILISEARCH_URL 替换为您的 Meilisearch 项目地址,并将 OPEN_AI_API_KEY 替换为您的 OpenAI API 密钥

    Meilisearch 和 OpenAI 将开始处理您的文档并更新您的索引。这可能需要一些时间,但一旦完成,您就可以执行 AI 驱动的搜索。

    AI 驱动的搜索与基本文本搜索非常相似。您必须使用包含 qhybrid 参数的请求查询 /search 端点

    curl \
      -X POST 'MEILISEARCH_URL/indexes/kitchenware/search' \
      -H 'content-type: application/json' \
      --data-binary '{
        "q": "kitchen utensils made of wood",
        "hybrid": {
          "embedder": "products-openai"
        }
      }'
    

    对于本教程,hybrid 是一个具有单个 embedder 字段的对象。

    然后,Meilisearch 将返回语义匹配和全文匹配的均衡组合。

    结论

    恭喜!您已创建索引,向其中添加了一个小型数据集,并激活了 AI 驱动的搜索。然后,您使用 OpenAI 从文档中生成嵌入,并执行了您的首次 AI 驱动的搜索。

    下一步

    现在您已经基本了解了设置和执行 AI 驱动的搜索所需的基本步骤,您可能想尝试在您自己的应用程序中实现此功能。

    有关使用其他服务实现 AI 驱动的搜索的实用信息,请查阅我们的指南部分。 在那里,您将找到针对嵌入器的具体说明,例如 LangChainCloudflare

    有关更深入的信息,请查阅 嵌入器设置hybrid 搜索参数的 API 参考。