

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 在 OpenSearch 服务中创建 ML 连接器
<a name="ml-create"></a>

亚马逊 OpenSearch 服务流程框架模板允许您使用 ml-commons 中提供的创建连接器 API 来配置和安装机器学习连接器。您可以使用机器学习连接器将 OpenSearch 服务连接到其他 AWS 服务或第三方平台。有关这方面的更多信息，请参阅 [Creating connectors for third-party ML platforms](https://opensearch.org/docs/2.13/ml-commons-plugin/remote-models/connectors/)。Amazon S OpenSearch ervice Flow framework API 允许您自动执行 OpenSearch 服务设置和预处理任务，并可用于创建机器学习连接器。

在 S OpenSearch ervice 中创建连接器之前，必须执行以下操作：
+ 创建亚马逊 A SageMaker I 域名。
+ 创建 IAM 角色。
+ 配置传递角色权限
+ 在仪表板中映射流程框架和 ml-commons 角色。 OpenSearch 

有关如何为服务设置机器学习连接器的更多信息，请参阅 AWS 服务的 [Amazon OpenSearch 服务 ML 连接器](https://docs.aws.amazon.com/opensearch-service/latest/developerguide/ml-amazon-connector.html#connector-sagemaker-prereq)。 AWS 要了解有关在第三方平台上使用 OpenSearch 服务 ML 连接器的更多信息，请参阅[适用于第三方平台的 Amazon OpenSearch 服务 ML 连接器](https://docs.aws.amazon.com/opensearch-service/latest/developerguide/ml-amazon-connector.html#connector-sagemaker-prereq)。

## 通过 flow-framework 服务创建连接器
<a name="ml-workflow"></a>

要使用连接器创建流程框架模板，您需要向您的 OpenSearch 服务域终端节点发送`POST`请求。您可以使用 cURL、示例 Python 客户端、Postman 或其他方法来发送已签名的请求。`POST` 请求的格式如下：

```
POST /_plugins/_flow_framework/workflow 
{
  "name": "Deploy Claude Model",
  "description": "Deploy a model using a connector to Claude",
  "use_case": "PROVISION",
  "version": {
    "template": "1.0.0",
    "compatibility": [
      "2.12.0",
      "3.0.0"
    ]
  },
  "workflows": {
    "provision": {
      "nodes": [
        {
          "id": "create_claude_connector",
          "type": "create_connector",
          "user_inputs": {
            "name": "Claude Instant Runtime Connector",
            "version": "1",
            "protocol": "aws_sigv4",
            "description": "The connector to Bedrock service for Claude model",
            "actions": [
              {
                "headers": {
                  "x-amz-content-sha256": "required",
                  "content-type": "application/json"
                },
                "method": "POST",
                "request_body": "{ \"prompt\":\"${parameters.prompt}\", \"max_tokens_to_sample\":${parameters.max_tokens_to_sample}, \"temperature\":${parameters.temperature},  \"anthropic_version\":\"${parameters.anthropic_version}\" }",
                "action_type": "predict",
                "url": "https://bedrock-runtime.us-west-2.amazonaws.com/model/anthropic.claude-instant-v1/invoke"
              }
            ],
            "credential": {
                "roleArn": "arn:aws:iam::account-id:role/opensearch-secretmanager-role" 
             },
            "parameters": {
              "endpoint": "bedrock-runtime.us-west-2.amazonaws.com",
              "content_type": "application/json",
              "auth": "Sig_V4",
              "max_tokens_to_sample": "8000",
              "service_name": "bedrock",
              "temperature": "0.0001",
              "response_filter": "$.completion",
              "region": "us-west-2",
              "anthropic_version": "bedrock-2023-05-31"
            }
          }
        }
      ]
    }
  }
}
```

如果域位于某个虚拟私有云（Amazon VPC）中，则必须连接到该 Amazon VPC，才能确保请求能够成功创建 AI 连接器。访问 Amazon VPC 的方法因网络配置而异，但通常会涉及连接到某个 VPN 或企业网络。要检查您是否可以访问您的 OpenSearch 服务域，请在 Web 浏览器`https://{{your-vpc-domain}}.{{region}}.es.amazonaws.com`中导航到并确认收到默认 JSON 响应。（{{placeholder text}}用您自己的值替换。

### 示例 Python 客户端
<a name="ml-python-sample"></a>

Python 客户端比 `HTTP` 请求更容易自动化，且具有更好的可重用性。要使用 Python 客户端创建 AI 连接器，请将以下示例代码保存到 Python 文件中。[客户端需要适用于 [Python 的AWS SDK (Boto3)、Requests:HTTP 适用于[人类](https://docs.aws.amazon.com/opensearch-service/latest/developerguide/ml-amazon-connector.html#connector-sagemaker-prereq)的 SDK 和 requests-aws4auth 1.2.3](https://docs.aws.amazon.com/opensearch-service/latest/developerguide/ml-amazon-connector.html#connector-sagemaker-prereq) 软件包。](https://pypi.org/project/requests-aws4auth/)

```
import boto3
import requests 
from requests_aws4auth import AWS4Auth

host = 'domain-endpoint/'
region = 'region'
service = 'es'
credentials = boto3.Session().get_credentials()
awsauth = AWS4Auth(credentials.access_key, credentials.secret_key, region, service, session_token=credentials.token)

path = '_plugins/_flow_framework/workflow'
url = host + path

payload = {
  "name": "Deploy Claude Model",
  "description": "Deploy a model using a connector to Claude",
  "use_case": "PROVISION",
  "version": {
    "template": "1.0.0",
    "compatibility": [
      "2.12.0",
      "3.0.0"
    ]
  },
  "workflows": {
    "provision": {
      "nodes": [
        {
          "id": "create_claude_connector",
          "type": "create_connector",
          "user_inputs": {
            "name": "Claude Instant Runtime Connector",
            "version": "1",
            "protocol": "aws_sigv4",
            "description": "The connector to Bedrock service for Claude model",
            "actions": [
              {
                "headers": {
                  "x-amz-content-sha256": "required",
                  "content-type": "application/json"
                },
                "method": "POST",
                "request_body": "{ \"prompt\":\"${parameters.prompt}\", \"max_tokens_to_sample\":${parameters.max_tokens_to_sample}, \"temperature\":${parameters.temperature},  \"anthropic_version\":\"${parameters.anthropic_version}\" }",
                "action_type": "predict",
                "url": "https://bedrock-runtime.us-west-2.amazonaws.com/model/anthropic.claude-instant-v1/invoke"
              }
            ],
            "credential": {
                "roleArn": "arn:aws:iam::account-id:role/opensearch-secretmanager-role" 
             },
            "parameters": {
              "endpoint": "bedrock-runtime.us-west-2.amazonaws.com",
              "content_type": "application/json",
              "auth": "Sig_V4",
              "max_tokens_to_sample": "8000",
              "service_name": "bedrock",
              "temperature": "0.0001",
              "response_filter": "$.completion",
              "region": "us-west-2",
              "anthropic_version": "bedrock-2023-05-31"
            }
          }
        }
      ]
    }
  }
}

headers = {"Content-Type": "application/json"}

r = requests.post(url, auth=awsauth, json=payload, headers=headers)
print(r.status_code)
print(r.text)
```

#### Pre-defined 工作流程模板
<a name="ml-predefined"></a>

Amazon S OpenSearch ervice 为一些常见的机器学习 (ML) 用例提供了多个工作流程模板。使用模板可以简化复杂的设置，并为语义搜索或对话搜索等用例提供多种默认值。您可以在调用 Create Workflow API 时指定工作流模板。
+ 要使用 OpenSearch 服务提供的工作流模板，请将模板用例指定为`use_case`查询参数。
+ 要使用自定义工作流模板，请在请求正文中提供完整的模板。有关自定义模板的示例，请参阅示例 JSON 模板或示例 YAML 模板。

#### 模板用例
<a name="templates"></a>

下表概述了各种可用的模板、模板的描述以及所需的参数。


| 模板用例 | 说明 | 必需参数 | 
| --- | --- | --- | 
| `bedrock_titan_embedding_model_deploy` | 创建并部署 Amazon Bedrock 嵌入模型（默认为 `titan-embed-text-v1`） | `create_connector.credential.roleArn` | 
| `bedrock_titan_embedding_model_deploy` | 创建并部署 Amazon Bedrock 多模态嵌入模型（默认为 `titan-embed-text-v1`） | `create_connector.credential.roleArn` | 
| `cohere_embedding_model_deploy` | 创建并部署 Cohere 嵌入模型（默认为 embed-english v3.0）。 | `create_connector.credential.roleArn`, `create_connector.credential.secretArn` | 
| `cohere_chat_model_deploy` | 创建并部署 Cohere 聊天模型（默认为 Cohere Command）。 | `create_connector.credential.roleArn`, `create_connector.credential.secretArn` | 
| `open_ai_embedding_model_deploy` | 创建并部署 OpenAI 嵌入模型（默认为 text-embedding-ada-002）。 | `create_connector.credential.roleArn`, `create_connector.credential.secretArn` | 
| `openai_chat_model_deploy` | 创建并部署 OpenAI 聊天模型（默认为 gpt-3.5-turbo）。 | `create_connector.credential.roleArn`, `create_connector.credential.secretArn` | 
| `semantic_search_with_cohere_embedding` | 配置语义搜索并部署 Cohere 嵌入模型。您必须提供 Cohere 模型的 API 密钥。 | `create_connector.credential.roleArn`, `create_connector.credential.secretArn` | 
| `semantic_search_with_cohere_embedding_query_enricher` | 配置语义搜索并部署 Cohere 嵌入模型。添加一个 query\_enricher 搜索处理器，用于设置神经查询的默认模型 ID。您必须提供 Cohere 模型的 API 密钥。 | `create_connector.credential.roleArn`, `create_connector.credential.secretArn` | 
| `multimodal_search_with_bedrock_titan` | 部署 Amazon Bedrock 多模态模型，并配置一个具有 text\_image\_embedding 处理器和用于多模态搜索的 k-nn 索引的摄取管道。您必须提供 AWS 凭证 | `create_connector.credential.roleArn` | 

**注意**  
对于所有需要密钥 ARN 的模板，默认设置是将密钥名称为 “密钥” 的密钥存储在 Secr AWS ets Manager 中。

## 包含预训练模型的默认模板
<a name="ml-pretrained-default"></a>

Amazon Ser OpenSearch vice 另外提供了两个开 OpenSearch 源服务中没有的默认工作流程模板。


| 模板用例 | 说明 | 
| --- | --- | 
| `semantic_search_with_local_model` | 配置[语义搜索](https://opensearch.org/docs/2.14/search-plugins/semantic-search/)并部署预训练模型 (`msmarco-distilbert-base-tas-b`)。添加 [https://opensearch.org/docs/2.14/search-plugins/search-pipelines/neural-query-enricher/](https://opensearch.org/docs/2.14/search-plugins/search-pipelines/neural-query-enricher/) 搜索处理器，该处理器将设置一个用于神经查询的默认模型 ID，并创建一个名为“my-nlp-index”的关联 k-NN 索引。 | 
| `hybrid_search_with_local_model` | 配置[混合搜索](https://opensearch.org/docs/2.14/search-plugins/hybrid-search/)并部署预训练模型 (`msmarco-distilbert-base-tas-b`)。添加 [https://opensearch.org/docs/2.14/search-plugins/search-pipelines/neural-query-enricher/](https://opensearch.org/docs/2.14/search-plugins/search-pipelines/neural-query-enricher/) 搜索处理器，该处理器将设置一个用于神经查询的默认模型 ID，并创建一个名为“my-nlp-index”的关联 k-NN 索引。 | 