본문 바로가기
WIKI 기술 지식 베이스

Connector blueprints

원문 보기 위키 갱신

출처: 문서

본문

커넥터 블루프린트

2.9에 도입됨 {: .label .label-purple }

모든 커넥터는 _커넥터 블루프린트_로 지정돼요. 블루프린트는 커넥터를 생성할 때 제공해야 하는 모든 파라미터를 정의해요.

예를 들어 다음 블루프린트는 Amazon SageMaker 커넥터에 대한 명세예요:

{
  "name": "<YOUR CONNECTOR NAME>",
  "description": "<YOUR CONNECTOR DESCRIPTION>",
  "version": "<YOUR CONNECTOR VERSION>",
  "protocol": "aws_sigv4",
  "credential": {
    "access_key": "<YOUR AWS ACCESS KEY>",
    "secret_key": "<YOUR AWS SECRET KEY>",
    "session_token": "<YOUR AWS SECURITY TOKEN>"
  },
  "parameters": {
    "region": "<YOUR AWS REGION>",
    "service_name": "sagemaker"
  },
  "actions": [
    {
      "action_type": "predict",
      "method": "POST",
      "headers": {
        "content-type": "application/json"
      },
      "url": "<YOUR SAGEMAKER MODEL ENDPOINT URL>",
      "request_body": "<YOUR REQUEST BODY. Example: ${parameters.inputs}>"
    }
  ]
}

{% include copy-curl.html %}

블루프린트 찾기

OpenSearch는 다양한 머신러닝(ML) 플랫폼과 모델을 위한 커넥터 블루프린트를 제공해요. 블루프린트가 제공되는 모든 플랫폼과 모델 목록, 그리고 각각이 사용하는 인증 프로토콜은 OpenSearch에서 제공하는 커넥터 블루프린트를 참고하세요.

ML 개발자라면 다른 플랫폼을 위한 커넥터 블루프린트를 직접 만들 수도 있어요. 이렇게 만든 블루프린트를 사용하면 관리자와 데이터 과학자가 해당 플랫폼에서 호스팅되는 모델의 커넥터를 생성할 수 있어요.

요청 본문 필드

다음 표는 커넥터 생성 요청의 필드를 나열한 거예요.

필드 데이터 타입 필수 여부 설명
name String 예 커넥터의 이름이에요.
connector_id String 아니요 커넥터의 고유 식별자예요. 생략하면 OpenSearch가 자동으로 생성해요.
description String 예 커넥터에 대한 설명이에요.
version Integer 예 커넥터 버전이에요.
protocol String 예 연결에 사용할 프로토콜이에요. 이 값은 OpenSearch가 플랫폼에 인증하는 방식을 결정해요. Amazon SageMaker, Amazon Bedrock 같은 AWS 서비스에는 aws_sigv4를 사용하세요. Google Cloud Vertex AI에는 google_cloud를 사용하세요. 그 외 모든 플랫폼에는 http를 사용하세요. 자세한 내용은 커넥터 인증을 참고하세요.
parameters JSON object 예 endpoint, model, skip_validating_missing_parameters를 포함한 커넥터의 기본 파라미터예요. 이 필드에 지정된 파라미터는 predict 요청에서 지정한 파라미터로 재정의될 수 있어요.
credential JSON object protocol에 따라 달라요 OpenSearch가 엔드포인트에 인증할 때 사용하는 자격 증명 변수를 정의해요. Application Default Credentials 모드(auth_mode가 adc로 설정된 경우)의 google_cloud와, 커넥터 외부에서 자격 증명을 처리하는 mcp_sse 및 mcp_streamable_http 프로토콜을 제외한 모든 프로토콜에서 필수예요. http를 포함한 그 외 모든 프로토콜에서는 이 객체를 생략하거나 비워 두면 400 오류가 반환돼요. 이 객체가 받아들이는 필드는 protocol에 따라 달라져요. 자세한 내용은 커넥터 인증을 참고하세요. ML Commons는 AES/GCM/NoPadding 대칭 암호화 방식으로 자격 증명을 암호화해요. 클러스터 연결이 시작되면 OpenSearch가 32바이트 크기의 무작위 암호화 키를 생성하며, 이 키는 OpenSearch의 시스템 인덱스에 유지돼요. 따라서 암호화 키를 직접 설정할 필요는 없어요.
actions JSON array 예 커넥터 내에서 실행할 수 있는 액션을 정의해요. 연결을 생성하는 관리자라면 원하는 연결의 블루프린트를 추가하세요.
backend_roles JSON array 아니요 OpenSearch 백엔드 역할 목록이에요. 백엔드 역할 설정에 대한 자세한 내용은 사용자에게 백엔드 역할 할당을 참고하세요.
access_mode String 아니요 모델의 액세스 모드를 public, restricted, private 중 하나로 설정해요. 기본값은 private이에요. access_mode에 대한 자세한 내용은 모델 그룹을 참고하세요.
add_all_backend_roles Boolean 아니요 true로 설정하면 모든 backend_roles가 액세스 목록에 추가돼요. 이 목록은 관리자 권한이 있는 사용자만 조정할 수 있어요. false로 설정하면 관리자가 아닌 사용자도 backend_roles를 추가할 수 있어요.
client_config JSON object 아니요 커넥터가 사용하는 클라이언트 연결의 동작을 제어하는 설정을 제공하는 클라이언트 구성 객체예요. 이 설정을 통해 연결 제한, 타임아웃, TLS 옵션을 관리할 수 있어서 효율적이고 안정적인 통신이 보장돼요.
parameters.skip_validating_missing_parameters Boolean 아니요 true로 설정하면 누락된 파라미터를 검증하지 않고도 커넥터를 사용해 요청을 보낼 수 있어요. 기본값은 false예요.
provisioned_by String 아니요 커넥터를 프로비저닝한 플러그인이나 클라이언트를 식별하는 선택적 속성 태그예요(예: flow-framework). ML 통계 지표에 포함돼요. 생성 시에만 설정할 수 있으며, Update Connector API에서는 무시돼요.

actions 객체는 다음 필드를 지원해요.

필드 데이터 타입 설명
action_type String 필수예요. 연결 시 사용할 ML Commons API 작업을 지정해요. 유효한 값은 predict, batch_predict, batch_predict_status, cancel_batch_predict, execute예요.
method String 필수예요. API 호출에 사용할 HTTP 메서드를 정의해요. POST와 GET을 지원해요.
url String 필수예요. 액션이 수행되는 연결 엔드포인트를 지정해요. 신뢰할 수 있는 엔드포인트 추가 시 사용한 연결의 정규식 표현식과 일치해야 해요.
request_body String 필수예요. 액션의 요청 본문에 포함될 파라미터를 설정해요. 파라미터에는 \"inputText\가 반드시 포함되어야 해요. 이 값은 커넥터 사용자가 action_type에 맞춰 요청 페이로드를 구성하는 방법을 지정해요.
pre_process_function String 선택 사항이에요. 입력 데이터를 전처리하는 데 사용하는 내장 또는 커스텀 Painless 스크립트예요. 자세한 내용은 Painless 스크립팅 언어를 참고하세요. OpenSearch는 바로 호출할 수 있는 다음과 같은 내장 전처리 함수를 제공해요:
- Cohere 임베딩 모델용 connector.pre_process.cohere.embedding
- OpenAI 임베딩 모델용 connector.pre_process.openai.embedding
- connector.pre_process.default.embedding. 뉴럴 검색 요청에서 문서를 전처리하여 ML Commons 기본 전처리기로 처리할 수 있는 형식으로 만들 때 사용할 수 있어요(OpenSearch 2.11 이상). 자세한 내용은 내장 함수를 참고하세요.
post_process_function String 선택 사항이에요. 모델 출력 데이터를 후처리하는 데 사용하는 내장 또는 커스텀 Painless 스크립트예요. OpenSearch는 바로 호출할 수 있는 다음과 같은 내장 후처리 함수를 제공해요:
- Cohere 텍스트 임베딩 모델용 connector.post_process.cohere.embedding
- OpenAI 텍스트 임베딩 모델용 connector.post_process.openai.embedding
- connector.post_process.default.embedding. 모델 응답의 문서를 뉴럴 검색이 기대하는 형식으로 후처리할 때 사용할 수 있어요(OpenSearch 2.11 이상). 자세한 내용은 내장 함수를 참고하세요.
headers JSON object 요청 본문이나 응답 본문에서 사용하는 헤더를 지정해요. 기본값은 ContentType: application/json이에요. 서드파티 ML 도구에서 액세스 제어가 필요하다면 headers 파라미터에 필요한 credential 파라미터를 정의하세요.

client_config 객체는 다음 필드를 지원해요.

필드 데이터 타입 설명
max_connection Integer 클라이언트가 서버에 맺을 수 있는 최대 동시 연결 수예요. SageMaker 같은 일부 원격 서비스는 최대 동시 연결 수를 제한하며, 동시 연결 수가 임계값을 초과하면 스로틀링 예외를 던져요. OpenSearch의 최대 동시 연결 수는 max_connection*node_number_for_connector예요. 이 문제를 완화하려면 이 파라미터 값을 줄이고 client_config의 재시도 설정을 수정해 보세요. 기본값은 30이에요.
connection_timeout Integer 클라이언트가 서버에 연결을 시도하는 동안 기다리는 최대 시간(초)이에요. 타임아웃을 설정하면 클라이언트가 무한정 기다리는 것을 막을 수 있고, 접근할 수 없는 네트워크 엔드포인트를 만났을 때 클라이언트가 복구할 수 있어요. 기본값은 30이에요.
read_timeout Integer 클라이언트가 요청을 보낸 후 서버의 응답을 기다리는 최대 시간(초)이에요. 서버가 느리게 응답하거나 요청을 처리하는 중에 문제가 생겼을 때 유용해요. 기본값은 30이에요.
retry_backoff_policy String 원격 커넥터로 재시도할 때 적용되는 백오프 정책이에요. 트래픽이 급증해 스로틀링 예외가 발생할 때 유용해요. 지원되는 정책은 constant, exponential_equal_jitter, exponential_full_jitter예요. 기본값은 constant예요.
max_retry_times Integer 하나의 원격 추론 요청이 재시도될 수 있는 최대 횟수예요. 트래픽이 급증해 스로틀링 예외가 발생할 때 유용해요. 0으로 설정하면 재시도가 비활성화돼요. -1로 설정하면 OpenSearch가 retry_times 횟수를 제한하지 않아요. 양의 정수로 설정하면 최대 재시도 횟수가 지정돼요. 기본값은 0이에요.
retry_backoff_millis Integer 재시도 정책의 기본 백오프 시간(밀리초)이에요. 두 재시도 사이의 대기 시간은 이 파라미터와 retry_backoff_policy로 결정돼요. 기본값은 200이에요.
retry_timeout_seconds Integer 재시도의 타임아웃 값(초)이에요. 지정된 시간 안에 재시도가 성공하지 못하면 커넥터는 재시도를 멈추고 예외를 던져요. 기본값은 30이에요.
skip_ssl_verification Boolean true로 설정하면 커넥터의 SSL 인증서 검증이 비활성화되어, 자체 서명 인증서나 그 외 유효하지 않은 인증서를 사용하는 엔드포인트에 연결할 수 있어요. 개발 또는 테스트 환경에서만 사용하세요. false로 설정하면 SSL 인증서 검증이 활성화된 상태로 유지돼요(프로덕션 환경에서 권장). 기본값은 false예요.
mutual_tls_enabled Boolean true로 설정하면 커넥터가 mutual TLS(mTLS)를 사용해 엔드포인트에 클라이언트 인증서를 제시해요. 인증서 자료는 커넥터의 credential 객체에 제공하세요. http 프로토콜을 사용하는 커넥터에서만 지원돼요. skip_ssl_verification와 함께 활성화할 수는 없어요. 기본값은 false예요. 자세한 내용은 클라이언트 인증서 인증을 참고하세요.
keystore_type String credential 객체에 제공하는 클라이언트 인증서 자료의 형식이에요. 유효한 값은 PEM과 PKCS12예요(대소문자는 구분하지 않아요). mutual_tls_enabled가 true일 때만 적용돼요. 기본값은 PEM이에요.

내장 전처리 및 후처리 함수

다음 텍스트 임베딩 모델이나 원격 서버(예: Amazon SageMaker)에 배포한 자체 텍스트 임베딩 모델에 연결할 때는 커스텀 Painless 스크립트를 직접 작성하는 대신 내장 전처리 및 후처리 함수를 호출하세요.

OpenSearch는 다음과 같은 전처리 및 후처리 함수를 제공해요:

  • OpenAI: connector.pre_process.openai.embedding 및 connector.post_process.openai.embedding
  • Cohere: connector.pre_process.cohere.embedding 및 connector.post_process.cohere.embedding
  • neural search용 Amazon SageMaker 기본 함수: connector.pre_process.default.embedding 및 connector.post_process.default.embedding

neural search용 Amazon SageMaker 기본 전처리 및 후처리 함수

neural search를 사용해 벡터 검색을 수행하면 neural search 요청이 먼저 ML Commons로 라우팅된 다음 모델로 전달돼요. 모델이 OpenSearch에서 제공하는 사전 학습 모델 중 하나라면 ML Commons 요청을 파싱하고 ML Commons가 기대하는 형식으로 응답을 반환할 수 있어요. 하지만 외부 플랫폼에서 호스팅되는 모델은 기대하는 형식이 ML Commons 형식과 다를 수 있어요. 기본 전처리 및 후처리 함수는 모델이 기대하는 형식과 neural search가 기대하는 형식 사이를 상호 변환해 줘요.

기본 함수가 적용되려면 모델의 입력과 출력이 다음 섹션에서 설명하는 형식을 따라야 해요.

요청 예시

다음 예시 요청은 SageMaker 텍스트 임베딩 커넥터를 생성하고 기본 후처리 함수를 호출해요:

POST /_plugins/_ml/connectors/_create
{
  "name": "Sagemaker text embedding connector",
  "description": "The connector to Sagemaker",
  "version": 1,
  "protocol": "aws_sigv4",
  "credential": {
    "access_key": "<YOUR SAGEMAKER ACCESS KEY>",
    "secret_key": "<YOUR SAGEMAKER SECRET KEY>",
    "session_token": "<YOUR AWS SECURITY TOKEN>"
  },
  "parameters": {
    "region": "ap-northeast-1",
    "service_name": "sagemaker"
  },
  "actions": [
    {
      "action_type": "predict",
      "method": "POST",
      "url": "sagemaker.ap-northeast-1.amazonaws.com/endpoints/",
      "headers": {
        "content-type": "application/json"
      },
      "post_process_function": "connector.post_process.default.embedding",
      "request_body": "${parameters.input}"
    }
  ]
}

{% include copy-curl.html %}

request_body 템플릿은 ${parameters.input}여야 해요. {: .important}

전처리 함수

connector.pre_process.default.embedding 기본 전처리 함수는 neural search 요청을 파싱해서 모델이 입력으로 기대하는 형식으로 변환해요.

ML Commons Predict API는 다음 형식으로 파라미터를 제공해요:

{
  "parameters": {
    "input": ["hello", "world"]
  }
}

기본 전처리 함수는 input 필드 내용을 모델에 보내요. 따라서 모델 입력 형식은 문자열 리스트여야 해요. 예를 들면 다음과 같아요:

["hello", "world"]

후처리 함수

connector.post_process.default.embedding 기본 후처리 함수는 모델 응답을 파싱해서 neural search가 입력으로 기대하는 형식으로 변환해요.

원격 텍스트 임베딩 모델의 출력은 2차원 float 배열이어야 하고, 각 요소는 입력 리스트에 있는 문자열 하나의 임베딩을 나타내요. 예를 들어 다음 2차원 배열은 ["hello", "world"] 리스트의 임베딩에 해당해요:

[
  [
    -0.048237994,
    -0.07612697,
    ...
  ],
  [
    0.32621247,
    0.02328475,
    ...
  ]
]

커스텀 전처리 및 후처리 함수

모델 형식에 맞춰 자체 전처리 및 후처리 함수를 직접 작성할 수도 있어요. 예를 들어 다음 Amazon Bedrock 커넥터 정의에는 Amazon Bedrock Titan 임베딩 모델용 커스텀 전처리 및 후처리 함수가 포함되어 있어요:

POST /_plugins/_ml/connectors/_create
{
  "name": "Amazon Bedrock Connector: embedding",
  "description": "The connector to the Bedrock Titan embedding model",
  "version": 1,
  "protocol": "aws_sigv4",
  "parameters": {
    "region": "<YOUR AWS REGION>",
    "service_name": "bedrock"
  },
  "credential": {
    "access_key": "<YOUR AWS ACCESS KEY>",
    "secret_key": "<YOUR AWS SECRET KEY>",
    "session_token": "<YOUR AWS SECURITY TOKEN>"
  },
  "actions": [
    {
      "action_type": "predict",
      "method": "POST",
      "url": "https://bedrock-runtime.us-east-1.amazonaws.com/model/amazon.titan-embed-text-v1/invoke",
      "headers": {
        "content-type": "application/json",
        "x-amz-content-sha256": "required"
      },
      "request_body": "{ \"inputText\": \"${parameters.inputText}\" }",
      "pre_process_function": "\n    StringBuilder builder = new StringBuilder();\n    builder.append(\"\\\"\");\n    String first = params.text_docs[0];\n    builder.append(first);\n    builder.append(\"\\\"\");\n    def parameters = \"{\" +\"\\\"inputText\\\":\" + builder + \"}\";\n    return  \"{\" +\"\\\"parameters\\\":\" + parameters + \"}\";",
      "post_process_function": "\n      def name = \"sentence_embedding\";\n      def dataType = \"FLOAT32\";\n      if (params.embedding == null || params.embedding.length == 0) {\n        return params.message;\n      }\n      def shape = [params.embedding.length];\n      def json = \"{\" +\n                 \"\\\"name\\\":\\\"\" + name + \"\\\",\" +\n                 \"\\\"data_type\\\":\\\"\" + dataType + \"\\\",\" +\n                 \"\\\"shape\\\":\" + shape + \",\" +\n                 \"\\\"data\\\":\" + params.embedding +\n                 \"}\";\n      return json;\n    "
    }
  ]
}

{% include copy-curl.html %}

다음 단계

더 알아보기 (Learn more)