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

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

要求

  • 一个运行中的 Meilisearch 项目
  • 一个 OpenAI API 密钥
  • 一个命令行控制台

创建新索引

首先,创建一个新的 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 的网页界面生成一个新的 API 密钥。

apiKey 字段添加到您的嵌入器

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

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

本教程可以使用任何密钥层级。在生产环境中,请至少使用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}}'"
  }
}

此模板首先给出文档的一般上下文:An object used in a kitchen(厨房中使用的物品)。然后添加每个文档特有的信息:doc 代表您的文档,您可以使用点表示法访问其任何属性。name 是一个属性,其值可以是 wooden spoon(木勺)或 rolling 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 驱动搜索与基本文本搜索非常相似。您必须向 /search 端点发出包含 qhybrid 参数的请求

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 参考。