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

本教程将引导您在 Meilisearch 项目中配置 AI 驱动的搜索功能。您将学习如何设置 OpenAI 的嵌入器(embedder)、生成文档嵌入向量,以及执行首次搜索。

前提条件

创建新索引

首先创建一个新的 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 的嵌入器(embedder)仅接受文本输入,但文档可能是包含不同类型数据的复杂对象。这意味着您需要将文档转换为单个文本字段。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 驱动的搜索

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文档。