开始使用 AI 驱动的搜索 实验性

    AI 驱动的搜索,有时也称为向量搜索和混合搜索,是一项实验性技术,它使用大型语言模型来根据查询的含义和上下文检索搜索结果。

    本教程将引导你完成在 Meilisearch 项目中配置 AI 驱动的搜索的过程。你将激活向量存储设置,使用 OpenAI 生成文档嵌入,并执行你的首次搜索。

    要求

    创建一个新的索引

    创建一个 kitchenware 索引,并添加此厨具产品数据集。如有必要,请查阅快速入门以获取有关如何配置基本 Meilisearch 安装的说明。

    首先,激活 AI 驱动的搜索实验性功能。具体如何操作取决于你使用的是Meilisearch Cloud 还是自托管 Meilisearch

    Meilisearch Cloud 项目

    如果使用 Meilisearch Cloud,请导航至您的项目概览并找到“实验性功能”。然后选中“AI 驱动的搜索”复选框。

    A section of the project overview interface titled "Experimental features". The image shows a few options, including "Vector store".

    Meilisearch Cloud AI 驱动的搜索候补名单

    为了确保 Meilisearch Cloud 最新 AI 驱动的搜索产品的适当扩展,您必须先加入候补名单,然后才能激活向量搜索。在您的注册获得批准之前,您将无法在 Cloud 界面或通过 /experimental-features 路由激活向量搜索。

    自托管实例

    使用/experimental-features 路由在运行时激活向量搜索

    curl \
      -X PATCH 'https://127.0.0.1:7700/experimental-features/' \
      -H 'Content-Type: application/json'  \
      --data-binary '{
        "vectorStore": true
      }'
    

    使用 OpenAI 生成向量嵌入

    接下来,您必须为数据集中的所有文档生成向量嵌入。嵌入是文档中单词和句子含义的数学表示。Meilisearch 依赖外部提供商来生成这些嵌入。本教程使用 OpenAI 嵌入器,但 Meilisearch 也支持来自 HuggingFace、Ollama 的嵌入器,以及任何可通过 RESTful API 访问的嵌入器。

    使用更新 /settings 端点embedders 索引设置来配置 OpenAI 嵌入器

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

    OPEN_AI_API_KEY 替换为您的 OpenAI API 密钥。您可以使用本教程的任何密钥层,但最好使用 Tier 2 密钥 以获得生产环境中的最佳性能。

    documentTemplate

    documentTemplate 描述了一个简短的 Liquid 模板。花括号({{)内的文本表示点表示法中的文档字段,其中 doc 表示文档本身,点后面的字符串表示文档属性。Meilisearch 将这些花括号及其内容替换为相应的字段值。

    生成的文本是 OpenAI 用于生成文档嵌入的提示。

    例如,厨房用具文档有三个字段:idnameprice。如果您的 documentTemplate"An object used in a kitchen named '{{doc.name}}'",则 Meilisearch 在索引第一个文档时将发送给嵌入器的文本是 "An object used in a kitchen named 'Wooden spoon'"

    为了获得最佳结果,请务必提供 documentTemplate。保持模板简短,并且仅包含高度相关的信息。这可确保最佳的索引性能和搜索结果相关性。

    使用 qhybrid 执行 AI 驱动的搜索,以检索使用您在上一步中配置的默认嵌入器进行的搜索结果

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

    Meilisearch 将返回语义匹配和全文匹配的混合结果,优先考虑与查询的含义和上下文匹配的结果。如果您希望 Meilisearch 返回更多基于搜索含义和上下文的结果,请将 semanticRatio 设置为大于 0.5 的值。相反,将 semanticRatio 设置为小于 0.5 的值将返回更多全文匹配。

    总结

    您已经了解了如何使用 Meilisearch 和 OpenAI 设置和执行 AI 驱动的搜索。有关更深入的信息,请参阅嵌入器和 hybrid 搜索参数的参考。

    AI 驱动的搜索是 Meilisearch 的一项实验性功能,并且正在积极开发中 - 加入 GitHub 上的讨论