Link Search Menu Expand Document Documentation Menu

配置 AI 搜索类型

本页面提供了不同 AI 搜索工作流类型的示例配置。每个示例都展示了如何根据特定用例(例如语义搜索或混合检索)定制设置。要从头到尾构建一个工作流,请按照在 OpenSearch Dashboards 中构建 AI 搜索工作流中的步骤进行操作,将您的用例配置应用到设置的相应部分。

先决条件:配置 ML 资源

在开始之前,请根据您的用例选择并配置必要的机器学习 (ML) 资源。例如,要实现语义搜索,您必须在 OpenSearch 集群中配置一个文本嵌入模型。有关在本地部署 ML 模型或连接到外部托管模型的更多信息,请参阅集成 ML 模型

目录
  1. 先决条件:配置 ML 资源
  2. 语义搜索
    1. ML 资源
    2. 索引
    3. 摄入管道
    4. 搜索管道
  3. 混合搜索
    1. ML 资源
    2. 索引
    3. 摄入管道
    4. 搜索管道
  4. 基本 RAG(文档摘要)
    1. ML 资源
    2. 搜索管道
  5. 多模态搜索
    1. ML 资源
    2. 索引
    3. 摄入管道
    4. 搜索管道
  6. 命名实体识别
    1. ML 资源
    2. 摄入管道
  7. 语言检测和分类
    1. ML 资源
    2. 摄入管道
  8. 结果重新排序
    1. ML 资源
    2. 搜索管道
  9. 使用自定义 CLIP 模型进行多模态搜索(文本或图像)
    1. ML 资源
    2. 索引
    3. 摄入管道
    4. 搜索管道
  10. 神经稀疏搜索
    1. ML 资源
    2. 索引
    3. 摄入管道
    4. 搜索管道

本示例演示了如何配置语义搜索。

ML 资源

Amazon Bedrock 上创建并部署 Amazon Titan 文本嵌入模型。

索引

确保索引设置包含 index.knn: true,并且您的索引在映射中包含一个 knn_vector 字段,如下所示

{
  "settings": {
    "index": {
      "knn": true
    }
  },
  "mappings": {
    "properties": {
      "<embedding_field_name>": {
        "type": "knn_vector",
        "dimension": "<embedding_size>"
      }
    }
  }
}

摄入管道

配置单个 ML 推理处理器。将您的输入文本映射到 inputText 模型输入字段。可选地,将输出 embedding 映射到一个新的文档字段。

搜索管道

配置单个 ML 推理搜索请求处理器。将包含输入文本的查询字段映射到 inputText 模型输入字段。可选地,将输出 embedding 映射到一个新字段。覆盖查询以包含一个 knn 查询,例如

{
    "_source": {
        "excludes": [
            "<embedding_field>"
        ]
    },
    "query": {
        "knn": {
            "<embedding_field>": {
                "vector": ${embedding},
                "k": 10
            }
        }
    }
}


混合搜索结合了关键词搜索和向量搜索。本示例演示了如何配置混合搜索。

ML 资源

Amazon Bedrock 上创建并部署 Amazon Titan 文本嵌入模型。

索引

确保索引设置包含 index.knn: true,并且您的索引在映射中包含一个 knn_vector 字段,如下所示

{
  "settings": {
    "index": {
      "knn": true
    }
  },
  "mappings": {
    "properties": {
      "<embedding_field_name>": {
        "type": "knn_vector",
        "dimension": "<embedding_size>"
      }
    }
  }
}

摄入管道

配置单个 ML 推理处理器。将您的输入文本映射到 inputText 模型输入字段。可选地,将输出 embedding 映射到一个新的文档字段。

搜索管道

配置一个 ML 推理搜索请求处理器和一个归一化处理器。

**对于 ML 推理处理器**,将包含输入文本的查询字段映射到 inputText 模型输入字段。可选地,将输出 embedding 映射到一个新字段。覆盖查询,使其包含一个 hybrid 查询。请务必指定 embedding_fieldtext_fieldtext_field_input

{
    "_source": {
        "excludes": [
            "<embedding_field>"
        ]
    },
    "query": {
        "hybrid": {
            "queries": [
                {
                    "match": {
                        "<text_field>": {
                            "query": "<text_field_input>"
                        }
                    }
                },
                {
                    "knn": {
                        "<embedding_field>": {
                            "vector": ${embedding},
                            "k": 10
                        }
                    }
                }
            ]
        }
    }
}

**对于归一化处理器**,为每个子查询配置权重。有关更多信息,请参阅混合搜索归一化处理器示例


基本 RAG(文档摘要)

本示例演示了如何配置基本的检索增强生成(RAG)。

以下示例展示了 Claude v1 messages API 的简化连接器蓝图。虽然连接器蓝图和模型接口可能会随着时间而演变,但此示例演示了如何将复杂的 API 交互抽象为单个 prompt 字段输入。

样本输入可能如下所示,其中占位符表示动态获取的结果

{
  "prompt": "Human: You are a professional data analyst. You are given a list of document results. You will analyze the data and generate a human-readable summary of the results. If you don't know the answer, just say I don't know.\n\n Results: ${parameters.results.toString()}\n\n Human: Please summarize the results.\n\n Assistant:"
}

ML 资源

Amazon Bedrock 上创建并部署 Anthropic Claude 3 Sonnet 模型。

搜索管道

使用以下步骤配置 ML 推理搜索响应处理器

  1. prompt 输入字段选择 **Template** 作为转换类型。
  2. 通过选择 **Configure** 打开模板配置。
  3. 选择一个预设模板以简化设置。
  4. 创建一个输入变量,用于提取评论列表(例如,review)。
  5. 通过复制并粘贴到模板中,将变量注入到提示中。
  6. 选择 **Run preview** 以验证转换后的提示是否正确地包含了示例动态数据。
  7. 选择 **Save** 以应用更改并退出。

多模态搜索通过文本和图像进行搜索。本示例演示了如何配置多模态搜索。

ML 资源

Amazon Bedrock 上创建并部署 Amazon Titan 多模态嵌入模型。

索引

确保索引设置包含 index.knn: true,并且您的索引在映射中包含一个 knn_vector 字段(用于持久化生成的嵌入)和一个 binary 字段(用于持久化图像二进制数据),如下所示

{
    "settings": {
        "index": {
            "knn": true
        }
    },
    "mappings": {
        "properties": {
            "image_base64": {
                "type": "binary"
            },
            "image_embedding": {
                "type": "knn_vector",
                "dimension": <dimension>
            }
        }
    }
}

摄入管道

配置单个 ML 推理处理器。将您的输入文本字段和输入图像字段分别映射到 inputTextinputImage 模型输入字段。如果需要文本和图像两种输入,请确保两者都已映射。或者,如果单个输入足以生成嵌入,则可以只映射一个输入(文本或图像)。

可选地,将输出 embedding 映射到一个新的文档字段。

搜索管道

配置单个 ML 推理搜索请求处理器。将查询中的输入图像字段或输入文本字段分别映射到 image_urltext 模型输入字段。CLIP 模型可以灵活处理其中一个或两者,因此请选择最适合您用例的选项。

覆盖查询,使其包含一个 knn 查询,包括嵌入输出

{
    "_source": {
        "excludes": [
            "<embedding_field>"
        ]
    },
    "query": {
        "knn": {
            "<embedding_field>": {
                "vector": ${embedding},
                "k": 10
            }
        }
    }
}


命名实体识别

本示例演示了如何配置命名实体识别(NER)。

ML 资源

创建并部署 Amazon Comprehend 实体检测模型

摄入管道

配置单个 ML 推理处理器。将您的输入文本字段映射到 text 模型输入字段。为了将任何已识别的实体与每个文档一起持久化,请转换输出(一个实体数组)并将其存储在 entities_found 字段中。使用以下 output_map 配置作为参考

"output_map": [
    {
        "entities_found": "$.response.Entities[*].Type"
    }
],

此配置将提取的实体映射到 entities_found 字段,确保它们与每个文档一起存储。


语言检测和分类

以下示例演示了如何配置语言检测和分类。

ML 资源

创建并部署 Amazon Comprehend 语言检测模型

摄入管道

配置单个 ML 推理处理器。将您的输入文本字段映射到 text 模型输入字段。为了存储为每个文档检测到的最相关或最可能的语言,请转换输出(一个语言数组)并将其持久化到 detected_dominant_language 字段中。使用以下 output_map 配置作为参考

"output_map": [
    {
              "detected_dominant_language": "response.Languages[0].LanguageCode"
    }
],


结果重新排序

结果重新排序可以通过多种方式实现,具体取决于所用模型的功能。通常,模型至少需要两个输入:原始查询和要分配相关性分数的数据。有些模型支持批量处理,允许在一次推理调用中处理多个结果,而另一些模型则需要单独为每个结果评分。

在 OpenSearch 中,这导致了两种常见的重新排序模式

  1. 启用批量处理

    1. 收集所有搜索结果。
    2. 将批量处理的结果传递给单个 ML 处理器进行评分。
    3. 返回前 **n** 个排序结果。
  2. 禁用批量处理

    1. 收集所有搜索结果。
    2. 将每个结果传递给 ML 处理器以分配新的相关性分数。
    3. 将所有具有更新分数的搜索结果发送到重新排序处理器进行排序。
    4. 返回前 **n** 个排序结果。

以下示例演示了**模式 2(禁用批量处理)**以突出显示重新排序处理器。但是,请注意,此示例中使用的 **Cohere Rerank** 模型**确实支持批量处理**,因此您也可以使用此模型实现**模式 1**。

ML 资源

创建并部署 Cohere Rerank 模型

搜索管道

配置一个 ML 推理**搜索响应**处理器,然后配置一个重新排序**搜索响应**处理器。对于禁用批量处理的重新排序,使用 ML 处理器为检索到的结果生成新的相关性分数,然后应用重新排序器进行相应排序。

使用以下 ML 处理器配置

  1. 将包含用于比较的数据的文档字段映射到模型的 documents 字段。
  2. 将原始查询映射到模型的 query 字段。
  3. 使用 JSONPath 访问查询 JSON,前缀为 _request.query

使用以下 input_map 配置作为参考

"input_map": [
   {
      "documents": "description",
      "query": "$._request.query.term.value"
   }
],

可选地,您可以将重新评分的结果存储在新字段中的模型输出中。您也可以仅提取并持久化相关性分数,如下所示

"input_map": [
   {
      "new_score": "results[0].relevance_score"
   }
],

使用以下重新排序处理器配置:在 **target_field** 下,选择模型评分字段(本例中为 new_score)。


使用自定义 CLIP 模型进行多模态搜索(文本或图像)

以下示例使用托管在 Amazon SageMaker 上的自定义 CLIP 模型。该模型动态地将文本或图像 URL 作为输入,并返回一个向量嵌入。

ML 资源

创建并部署 自定义 CLIP 多模态模型

索引

确保索引设置包含 index.knn: true,并且您的索引在映射中包含一个 knn_vector 字段,如下所示

{
  "settings": {
    "index": {
      "knn": true
    }
  },
  "mappings": {
    "properties": {
      "<embedding_field_name>": {
        "type": "knn_vector",
        "dimension": "<embedding_size>"
      }
    }
  }
}

摄入管道

配置单个 ML 推理处理器。根据您要摄入并持久化到索引中的数据类型,将您的图像字段映射到 image_url 模型输入字段,或者将您的文本字段映射到 text 模型输入字段。例如,如果构建一个根据文本或图像输入返回相关图像的应用程序,您将需要持久化图像,并且应该将图像字段映射到 image_url 字段。

搜索管道

配置单个 ML 推理搜索请求处理器。将查询中的输入图像字段或输入文本字段分别映射到 image_urltext 模型输入字段。CLIP 模型可以灵活处理其中一个或两者,因此请选择最适合您用例的选项。

覆盖查询,使其包含一个 knn 查询,包括嵌入输出

{
    "_source": {
        "excludes": [
            "<embedding_field>"
        ]
    },
    "query": {
        "knn": {
            "<embedding_field>": {
                "vector": ${embedding},
                "k": 10
            }
        }
    }
}


本示例演示了如何配置神经稀疏搜索。

ML 资源

创建并部署一个 神经稀疏编码模型

索引

确保索引映射包含一个 rank_features 字段

"<embedding_field_name>": {
    "type": "rank_features"
}

摄入管道

配置单个 ML 推理处理器。将您的输入文本映射到 text_doc 模型输入字段。可选地,将输出 response 映射到一个新的文档字段。如果需要,使用 JSONPath 表达式转换响应。

搜索管道

配置单个 ML 推理搜索请求处理器。将包含输入文本的查询字段映射到 text_doc 模型输入字段。可选地,将输出 response 映射到一个新字段。如果需要,使用 JSONPath 表达式转换响应。包含一个神经稀疏查询

{
    "_source": {
        "excludes": [
            "<embedding_field>"
        ]
    },
    "query": {
        "neural_sparse": {
            "<embedding_field>": {
                "query_tokens": ${response},
            }
        }
    }
}