기계 학습 오프라인 배치 추론과 함께 OpenSearch Ingestion 파이프라인 사용 - Amazon OpenSearch Service

기계 학습 오프라인 배치 추론과 함께 OpenSearch Ingestion 파이프라인 사용

Amazon OpenSearch Ingestion(OSI) 파이프라인은 낮은 비용으로 대량의 데이터를 효율적으로 보강할 수 있도록 기계 학습(ML) 오프라인 배치 추론 처리를 지원합니다. 비동기적으로 처리할 수 있는 대규모 데이터세트가 있을 때마다 오프라인 배치 추론을 사용합니다. 오프라인 배치 추론은 Amazon Bedrock 및 SageMaker 모델과 함께 작동합니다. 이 기능은 OpenSearch Service 2.17+ 도메인을 사용한 OpenSearch Ingestion을 지원하는 모든 AWS 리전에서 사용할 수 있습니다.

참고

실시간 추론 처리의 경우 서드파티 플랫폼에 대한 Amazon OpenSearch Service ML 커넥터를 사용합니다.

오프라인 배치 추론 처리는 ML Commons라는 OpenSearch의 기능을 활용합니다. ML Commons는 전송 및 REST API 호출을 통해 ML 알고리즘을 제공합니다. 이러한 직접적 호출은 각 ML 요청에 적합한 노드와 리소스를 선택하고 ML 작업을 모니터링하여 가동 시간을 보장합니다. 이를 통해 ML Commons는 기존 오픈 소스 ML 알고리즘을 활용하고 새로운 ML 기능을 개발하는 데 필요한 노력을 줄일 수 있습니다. ML Commons에 대한 자세한 내용은 OpenSearch.org 설명서의 Machine learning을 참조하세요.

작동 방법

기계 학습 추론 프로세서를 파이프라인에 추가하여 OpenSearch Ingestion에서 오프라인 배치 추론 파이프라인을 생성할 수 있습니다. 이 프로세서를 사용하면 파이프라인을 SageMaker와 같은 AI 서비스에 연결하여 배치 추론 작업을 실행할 수 있습니다. 대상 도메인에서 실행되는 AI 커넥터(batch_predict 지원 포함)를 통해 원하는 AI 서비스에 연결하도록 프로세서를 구성할 수 있습니다.

OpenSearch Ingestion은 ML Commons와 함께 ml_inference 프로세서를 사용하여 오프라인 배치 추론 작업을 생성합니다. 그런 다음 ML Commons는 batch_predict API를 사용합니다. 이 API는 Amazon Bedrock, Amazon SageMaker, Cohere 및 OpenAI의 외부 모델 서버에 배포된 모델을 사용하여 오프라인 비동기 모드로 대규모 데이터세트에 대한 추론을 수행합니다. 다음 다이어그램은 여러 구성 요소를 오케스트레이션하여 이 프로세스를 처음부터 끝까지 수행하는 OpenSearch Ingestion 파이프라인을 보여줍니다.

배치 AI 추론 처리의 3 파이프라인 아키텍처.

파이프라인 구성 요소는 다음과 같이 작동합니다.

파이프라인 1(데이터 준비 및 변환)*:

  • 소스: OpenSearch Ingestion에서 지원하는 외부 소스에서 스캔한 데이터.

  • 데이터 프로세서: 원시 데이터는 통합 AI 서비스에서 배치 추론을 위해 처리되고 올바른 형식으로 변환됩니다.

  • S3(싱크): 처리된 데이터는 통합 AI 서비스에서 배치 추론 작업을 실행하기 위한 입력으로 사용할 준비가 된 Amazon S3 버킷에 스테이징됩니다.

파이프라인 2(트리거 ML batch_inference):

  • 소스: 파이프라인 1의 출력으로 생성된 새 파일의 자동 S3 이벤트 감지.

  • Ml_inference 프로세서: 비동기 배치 작업을 통해 ML 추론을 생성하는 프로세서. 대상 도메인에서 실행 중인 구성된 AI 커넥터를 통해 AI 서비스에 연결합니다.

  • 작업 ID: 각 배치 작업은 추적 및 관리를 위해 ml-commons의 작업 ID와 연결됩니다.

  • OpenSearch ML Commons: 실시간 신경망 검색을 위해 모델을 호스팅하고, 원격 AI 서버에 대한 커넥터를 관리하고, 배치 추론 및 작업 관리를 위한 API를 제공하는 ML Commons.

  • AI 서비스: OpenSearch ML Commons는 Amazon Bedrock 및 Amazon SageMaker와 같은 AI 서비스와 상호 작용하여 데이터에 대한 배치 추론을 수행함으로써 예측 또는 인사이트를 생성합니다. 결과는 별도의 S3 파일에 비동기적으로 저장됩니다.

파이프라인 3(대량 수집):

  • S3(소스): 배치 작업의 결과는 이 파이프라인의 소스인 S3에 저장됩니다.

  • 데이터 변환 프로세서: 수집 전에 배치 추론 출력에 추가 처리 및 변환이 적용됩니다. 이는 OpenSearch 인덱스에서 데이터가 올바르게 매핑되도록 보장합니다.

  • OpenSearch 인덱스(싱크): 처리된 결과는 스토리지, 검색 및 추가 분석을 위해 OpenSearch에 인덱싱됩니다.

참고

*파이프라인 1에서 설명하는 프로세스는 선택 사항입니다. 원하는 경우 해당 프로세스를 건너뛰고 S3 싱크에 준비된 데이터를 업로드하여 배치 작업을 생성할 수도 있습니다.

ml_inference 프로세서 정보

OpenSearch Ingestion은 배치 처리를 위해 S3 스캔 소스와 ML 추론 프로세서 간의 특수한 통합을 사용합니다. S3 스캔은 메타데이터 전용 모드에서 작동하여 실제 파일 콘텐츠를 읽지 않고도 S3 파일 정보를 효율적으로 수집합니다. ml_inference 프로세서는 S3 파일 URL을 사용하여 배치 처리를 위해 ML Commons와 조율합니다. 이러한 설계는 스캔 단계에서 불필요한 데이터 전송을 최소화하여 배치 추론 워크플로를 최적화합니다. ml_inference 프로세서는 사용자가 파라미터를 사용하여 정의합니다. 예:

processor: - ml_inference: # The endpoint URL of your OpenSearch domain host: "https://AWStest-offlinebatch-123456789abcdefg.us-west-2.es.amazonaws.com" # Type of inference operation: # - batch_predict: for batch processing # - predict: for real-time inference action_type: "batch_predict" # Remote ML model service provider (Amazon Bedrock or SageMaker) service_name: "bedrock" # Unique identifier for the ML model model_id: "AWSTestModelID123456789abcde" # S3 path where batch inference results will be stored output_path: "s3://amzn-s3-demo-bucket/" # Supports ISO_8601 notation strings like PT20.345S or PT15M # These settings control how long to keep your inputs in the processor for retry on throttling errors retry_time_window: "PT9M" # AWS configuration settings aws: # AWS 리전 where the Lambda function is deployed region: "us-west-2" # IAM role ARN for Lambda function execution sts_role_arn: "arn:aws::iam::account_id:role/Admin" # Dead-letter queue settings for storing errors dlq: s3: region: us-west-2 bucket: batch-inference-dlq key_path_prefix: bedrock-dlq sts_role_arn: arn:aws:iam::account_id:role/OSI-invoke-ml # Conditional expression that determines when to trigger the processor # In this case, only process when bucket matches "amzn-s3-demo-bucket" ml_when: /bucket == "amzn-s3-demo-bucket"

ml_inference 프로세서를 사용한 수집 성능 개선

OpenSearch Ingestion ml_inference 프로세서는 ML 지원 검색의 데이터 수집 성능을 크게 높입니다. 이 프로세서는 시맨틱 검색, 멀티모달 검색, 문서 보강, 쿼리 이해 등 기계 학습 모델 생성 데이터가 필요한 사용 사례에 적합합니다. 시맨틱 검색에서 이 프로세서는 대용량 고차원 벡터의 생성 및 수집을 10배까지 가속화할 수 있습니다.

이 프로세서의 오프라인 배치 추론 기능은 실시간 모델 호출에 비해 고유한 이점을 제공합니다. 실시간 처리에는 용량 제한이 있는 라이브 모델 서버가 필요하지만 배치 추론은 온디맨드로 컴퓨팅 리소스를 동적으로 확장하고 데이터를 병렬로 처리합니다. 예를 들어 OpenSearch Ingestion 파이프라인이 10억 개의 소스 데이터 요청을 수신하면 ML 배치 추론 입력을 위해 100개의 S3 파일을 생성합니다. 그런 다음 ml_inference 프로세서는 100개의 ml.m4.xlarge Amazon Elastic Compute Cloud(Amazon EC2) 인스턴스를 사용하여 SageMaker 배치 작업을 시작하고, 14시간 내에 10억 개의 요청을 벡터화하여 실시간 모드에서는 거의 불가능한 작업을 완료합니다.

시맨틱 검색에 대한 데이터 요청을 수집하도록 ml_inference 프로세서 구성

다음 절차에서는 텍스트 임베딩 모델을 사용하여 의미 체계 검색을 위한 10억 개의 데이터 요청을 수집하도록 OpenSearch Ingestion ml_inference 프로세서를 설정하고 구성하는 프로세스를 안내합니다.

1단계: OpenSearch에서 커넥터 생성 및 모델 등록

다음 절차에서는 ML Commons batch_inference_sagemaker_connector_blueprint를 사용하여 Amazon SageMaker에서 커넥터와 모델을 생성합니다. OpenSearch CloudFormation 통합 템플릿을 사용하려면 이 섹션 뒷부분의 (대안 절차) 1단계: CloudFormation 통합 템플릿을 사용하여 커넥터 및 모델 생성 섹션을 참조하세요.

OpenSearch에서 커넥터를 생성하고 모델을 등록하려면
  1. 배치 변환을 위해 SageMaker에서 Deep Java Library(DJL) ML 모델을 생성합니다. 다른 DJL 모델을 보려면 GitHub의 semantic_search_with_CFN_template_for_Sagemaker를 참조하세요.

    POST https://api.sagemaker.us-east-1.amazonaws.com/CreateModel { "ExecutionRoleArn": "arn:aws:iam::123456789012:role/aos_ml_invoke_sagemaker", "ModelName": "DJL-Text-Embedding-Model-imageforjsonlines", "PrimaryContainer": { "Environment": { "SERVING_LOAD_MODELS" : "djl://ai.djl.huggingface.pytorch/sentence-transformers/all-MiniLM-L6-v2" }, "Image": "763104351884.dkr.ecr.us-east-1.amazonaws.com/djl-inference:0.29.0-cpu-full" } }
  2. actions 필드에 batch_predict를 새 action 유형으로 사용하여 커넥터를 생성합니다.

    POST /_plugins/_ml/connectors/_create { "name": "DJL Sagemaker Connector: all-MiniLM-L6-v2", "version": "1", "description": "The connector to sagemaker embedding model all-MiniLM-L6-v2", "protocol": "aws_sigv4", "credential": { "roleArn": "arn:aws:iam::111122223333:role/SageMakerRole" }, "parameters": { "region": "us-east-1", "service_name": "sagemaker", "DataProcessing": { "InputFilter": "$.text", "JoinSource": "Input", "OutputFilter": "$" }, "MaxConcurrentTransforms": 100, "ModelName": "DJL-Text-Embedding-Model-imageforjsonlines", "TransformInput": { "ContentType": "application/json", "DataSource": { "S3DataSource": { "S3DataType": "S3Prefix", "S3Uri": "s3://offlinebatch/msmarcotests/" } }, "SplitType": "Line" }, "TransformJobName": "djl-batch-transform-1-billion", "TransformOutput": { "AssembleWith": "Line", "Accept": "application/json", "S3OutputPath": "s3://offlinebatch/msmarcotestsoutputs/" }, "TransformResources": { "InstanceCount": 100, "InstanceType": "ml.m4.xlarge" }, "BatchStrategy": "SingleRecord" }, "actions": [ { "action_type": "predict", "method": "POST", "headers": { "content-type": "application/json" }, "url": "https://runtime.sagemaker.us-east-1.amazonaws.com/endpoints/OpenSearch-sagemaker-060124023703/invocations", "request_body": "${parameters.input}", "pre_process_function": "connector.pre_process.default.embedding", "post_process_function": "connector.post_process.default.embedding" }, { "action_type": "batch_predict", "method": "POST", "headers": { "content-type": "application/json" }, "url": "https://api.sagemaker.us-east-1.amazonaws.com/CreateTransformJob", "request_body": """{ "BatchStrategy": "${parameters.BatchStrategy}", "ModelName": "${parameters.ModelName}", "DataProcessing" : ${parameters.DataProcessing}, "MaxConcurrentTransforms": ${parameters.MaxConcurrentTransforms}, "TransformInput": ${parameters.TransformInput}, "TransformJobName" : "${parameters.TransformJobName}", "TransformOutput" : ${parameters.TransformOutput}, "TransformResources" : ${parameters.TransformResources}}""" }, { "action_type": "batch_predict_status", "method": "GET", "headers": { "content-type": "application/json" }, "url": "https://api.sagemaker.us-east-1.amazonaws.com/DescribeTransformJob", "request_body": """{ "TransformJobName" : "${parameters.TransformJobName}"}""" }, { "action_type": "cancel_batch_predict", "method": "POST", "headers": { "content-type": "application/json" }, "url": "https://api.sagemaker.us-east-1.amazonaws.com/StopTransformJob", "request_body": """{ "TransformJobName" : "${parameters.TransformJobName}"}""" } ] }
  3. 반환된 커넥터 ID를 사용하여 SageMaker 모델을 등록합니다.

    POST /_plugins/_ml/models/_register { "name": "SageMaker model for batch", "function_name": "remote", "description": "test model", "connector_id": "example123456789-abcde" }
  4. batch_predict 작업 유형으로 모델을 간접적으로 호출합니다.

    POST /_plugins/_ml/models/teHr3JABBiEvs-eod7sn/_batch_predict { "parameters": { "TransformJobName": "SM-offline-batch-transform" } }

    응답에는 배치 작업에 대한 작업 ID가 포함됩니다.

    { "task_id": "exampleIDabdcefd_1234567", "status": "CREATED" }
  5. 작업 ID를 사용하여 작업 가져오기 API를 직접적으로 호출하여 배치 작업 상태를 확인합니다.

    GET /_plugins/_ml/tasks/exampleIDabdcefd_1234567

    응답에는 작업 상태가 포함됩니다.

    { "model_id": "nyWbv5EB_tT1A82ZCu-e", "task_type": "BATCH_PREDICTION", "function_name": "REMOTE", "state": "RUNNING", "input_type": "REMOTE", "worker_node": [ "WDZnIMcbTrGtnR4Lq9jPDw" ], "create_time": 1725496527958, "last_update_time": 1725496527958, "is_async": false, "remote_job": { "TransformResources": { "InstanceCount": 1, "InstanceType": "ml.c5.xlarge" }, "ModelName": "DJL-Text-Embedding-Model-imageforjsonlines", "TransformOutput": { "Accept": "application/json", "AssembleWith": "Line", "KmsKeyId": "", "S3OutputPath": "s3://offlinebatch/output" }, "CreationTime": 1725496531.935, "TransformInput": { "CompressionType": "None", "ContentType": "application/json", "DataSource": { "S3DataSource": { "S3DataType": "S3Prefix", "S3Uri": "s3://offlinebatch/sagemaker_djl_batch_input.json" } }, "SplitType": "Line" }, "TransformJobArn": "arn:aws:sagemaker:us-east-1:111122223333:transform-job/SM-offline-batch-transform15", "TransformJobStatus": "InProgress", "BatchStrategy": "SingleRecord", "TransformJobName": "SM-offline-batch-transform15", "DataProcessing": { "InputFilter": "$.content", "JoinSource": "Input", "OutputFilter": "$" } } }

(대안 절차) 1단계: CloudFormation 통합 템플릿을 사용하여 커넥터 및 모델 생성

원하는 경우 AWS CloudFormation을 사용하여 ML 추론에 필요한 모든 Amazon SageMaker 커넥터와 모델을 자동으로 생성할 수 있습니다. 이 방식은 Amazon OpenSearch Service 콘솔에서 사용할 수 있는 사전 구성된 템플릿을 사용하므로 설정이 간소화됩니다. 자세한 내용은 CloudFormation을 사용하여 시맨틱 검색에 대한 원격 추론 설정 섹션을 참조하세요.

필요한 모든 SageMaker 커넥터 및 모델을 생성하는 CloudFormation 스택을 배포하려면
  1. Amazon OpenSearch Service 콘솔을 엽니다.

  2. 탐색 창에서 통합을 선택합니다.

  3. 검색 필드에 SageMaker를 입력한 다음 Amazon SageMaker를 통한 텍스트 임베딩 모델과의 통합을 선택합니다.

  4. 도메인 구성을 선택한 다음 VPC 도메인 구성 또는 퍼블릭 도메인 구성을 선택합니다.

  5. 템플릿 필드에 정보를 입력합니다. 오프라인 배치 추론 활성화에서 true를 선택하여 오프라인 배치 처리를 위한 리소스를 프로비저닝합니다.

  6. 생성을 선택하여 CloudFormation 스택을 생성합니다.

  7. 스택이 생성된 후 CloudFormation 콘솔에서 출력 탭을 열고 connector_idmodel_id를 찾습니다. 나중에 파이프라인을 구성할 때 이들 값이 필요합니다.

2단계: ML 오프라인 배치 추론을 위한 OpenSearch Ingestion 파이프라인 생성

다음 샘플을 사용하여 ML 오프라인 배치 추론을 위한 OpenSearch Ingestion 파이프라인을 생성합니다. OpenSearch Ingestion용 파이프라인 생성에 대한 자세한 내용은 Amazon OpenSearch Ingestion 파이프라인 생성 섹션을 참조하세요.

시작하기 전 준비 사항

다음 샘플에서는 sts_role_arn 파라미터의 IAM 역할 ARN을 지정합니다. 다음 절차에 따라 이 역할이 OpenSearch의 ml-commons에 액세스할 수 있는 백엔드 역할에 매핑되었는지 확인합니다.

  1. OpenSearch Service 도메인에 대한 OpenSearch 대시보드 플러그인으로 이동합니다. OpenSearch Service 콘솔의 도메인 Dashboards에서 Dashboards 엔드포인트를 찾을 수 있습니다.

  2. 주 메뉴에서 보안, 역할을 선택하고 ml_full_access 역할을 선택합니다.

  3. 매핑된 사용자(Mapped users), 매핑 관리(Manage mapping)를 차례로 선택합니다.

  4. 백엔드 역할에 도메인 호출 권한이 필요한 Lambda 역할의 ARN을 입력합니다. 예: arn:aws:iam::111122223333:role/lambda-role

  5. Map(맵)을 선택하고 Mapped users(매핑된 사용자)에 사용자 또는 역할이 나타나는지 확인합니다.

ML 오프라인 배치 추론을 위한 OpenSearch Ingestion 파이프라인을 생성하는 샘플

version: '2' extension: osis_configuration_metadata: builder_type: visual sagemaker-batch-job-pipeline: source: s3: acknowledgments: true delete_s3_objects_on_read: false scan: buckets: - bucket: name: name data_selection: metadata_only filter: include_prefix: - sagemaker/sagemaker_djl_batch_input exclude_suffix: - .manifest - bucket: name: name data_selection: data_only filter: include_prefix: - sagemaker/output/ scheduling: interval: PT6M aws: region: name default_bucket_owner: account_ID codec: ndjson: include_empty_objects: false compression: none workers: '1' processor: - ml_inference: host: "https://search-AWStest-offlinebatch-123456789abcdef.us-west-2.es.amazonaws.com" aws_sigv4: true action_type: "batch_predict" service_name: "sagemaker" model_id: "model_ID" output_path: "s3://AWStest-offlinebatch/sagemaker/output" aws: region: "us-west-2" sts_role_arn: "arn:aws:iam::account_ID:role/Admin" ml_when: /bucket == "AWStest-offlinebatch" dlq: s3: region: us-west-2 bucket: batch-inference-dlq key_path_prefix: bedrock-dlq sts_role_arn: arn:aws:iam::account_ID:role/OSI-invoke-ml - copy_values: entries: - from_key: /text to_key: chapter - from_key: /SageMakerOutput to_key: chapter_embedding - delete_entries: with_keys: - text - SageMakerOutput sink: - opensearch: hosts: ["https://search-AWStest-offlinebatch-123456789abcdef.us-west-2.es.amazonaws.com"] aws: serverless: false region: us-west-2 routes: - ml-ingest-route index_type: custom index: test-nlp-index routes: - ml-ingest-route: /chapter != null and /title != null

3단계: 수집을 위한 데이터 준비

ML 오프라인 배치 추론 처리를 위해 데이터를 준비하려면 자체 도구 또는 프로세스를 사용하여 직접 데이터를 준비하거나 OpenSearch Data Prepper를 사용합니다. 파이프라인을 사용하여 데이터 소스의 데이터를 사용하거나, 기계 학습 데이터세트를 생성하여 데이터가 올바른 형식으로 구성되어 있는지 확인합니다.

다음 예에서는 자연어 처리 작업에 대한 실제 사용자 쿼리 모음이 포함된 MS MARCO 데이터세트를 사용합니다. 이 데이터세트는 JSONL 형식으로 구성되어 있습니다. 여기서 각 줄은 ML 임베딩 모델로 전송된 요청을 나타냅니다.

{"_id": "1185869", "text": ")what was the immediate impact of the Paris Peace Treaties of 1947?", "metadata": {"world war 2"}} {"_id": "1185868", "text": "_________ justice is designed to repair the harm to victim, the community and the offender caused by the offender criminal act. question 19 options:", "metadata": {"law"}} {"_id": "597651", "text": "what is amber", "metadata": {"nothing"}} {"_id": "403613", "text": "is autoimmune hepatitis a bile acid synthesis disorder", "metadata": {"self immune"}} ...

MS MARCO 데이터세트를 사용하여 테스트하기 위해, 각각 1,000만 개의 요청이 포함된 100개의 파일에 분산된 10억 개의 입력 요청을 구성하는 시나리오를 가정해 보겠습니다. 이 파일은 접두사 s3://offlinebatch/sagemaker/sagemaker_djl_batch_input/과 함께 Amazon S3에 저장됩니다. OpenSearch Ingestion 파이프라인은 이러한 100개의 파일을 동시에 스캔하고, 병렬 처리를 위해 100개의 작업자로 SageMaker 배치 작업을 시작하여 10억 개의 문서를 OpenSearch로 효율적으로 벡터화하고 수집합니다.

프로덕션 환경에서는 OpenSearch Ingestion 파이프라인을 사용하여 배치 추론 입력을 위한 S3 파일을 생성할 수 있습니다. 이 파이프라인은 다양한 데이터 소스를 지원하며 일정에 따라 작동하여 소스 데이터를 S3 파일로 지속적으로 변환합니다. 그런 다음 예약된 오프라인 배치 작업을 통해 AI 서버에서 이러한 파일을 자동으로 처리하여 지속적인 데이터 처리와 수집을 보장합니다.

4단계: 배치 추론 작업 모니터링

SageMaker 콘솔 또는 AWS CLI를 사용하여 배치 추론 작업을 모니터링할 수 있습니다. 작업 가져오기 API를 사용하여 배치 작업을 모니터링할 수도 있습니다.

GET /_plugins/_ml/tasks/_search { "query": { "bool": { "filter": [ { "term": { "state": "RUNNING" } } ] } }, "_source": ["model_id", "state", "task_type", "create_time", "last_update_time"] }

이 API는 활성 배치 작업 목록을 반환합니다.

{ "took": 2, "timed_out": false, "_shards": { "total": 5, "successful": 5, "skipped": 0, "failed": 0 }, "hits": { "total": { "value": 3, "relation": "eq" }, "max_score": 0.0, "hits": [ { "_index": ".plugins-ml-task", "_id": "nyWbv5EB_tT1A82ZCu-e", "_score": 0.0, "_source": { "model_id": "nyWbv5EB_tT1A82ZCu-e", "state": "RUNNING", "task_type": "BATCH_PREDICTION", "create_time": 1725496527958, "last_update_time": 1725496527958 } }, { "_index": ".plugins-ml-task", "_id": "miKbv5EB_tT1A82ZCu-f", "_score": 0.0, "_source": { "model_id": "miKbv5EB_tT1A82ZCu-f", "state": "RUNNING", "task_type": "BATCH_PREDICTION", "create_time": 1725496528123, "last_update_time": 1725496528123 } }, { "_index": ".plugins-ml-task", "_id": "kiLbv5EB_tT1A82ZCu-g", "_score": 0.0, "_source": { "model_id": "kiLbv5EB_tT1A82ZCu-g", "state": "RUNNING", "task_type": "BATCH_PREDICTION", "create_time": 1725496529456, "last_update_time": 1725496529456 } } ] } }

배치 추론 작업을 모니터링하고 완료를 확인한 후 시맨틱, 하이브리드, 대화형(RAG 사용), 신경망 희소, 멀티모달 등 다양한 유형의 AI 검색을 실행할 수 있습니다. OpenSearch Service에서 지원하는 AI 검색에 대한 자세한 내용은 AI 검색을 참조하세요.

원시 벡터를 검색하려면 knn 쿼리 유형을 사용하고, vector 배열을 입력으로 제공하고, 반환된 결과의 k 수를 지정합니다.

GET /my-raw-vector-index/_search { "query": { "knn": { "my_vector": { "vector": [0.1, 0.2, 0.3], "k": 2 } } } }

AI 기반 검색을 실행하려면 neural 쿼리 유형을 사용합니다. query_text 입력, OpenSearch Ingestion 파이프라인에서 구성한 임베딩 모델의 model_id, 반환된 결과의 k 수를 지정합니다. 검색 결과에서 임베딩을 제외하려면 _source.excludes 파라미터에 임베딩 필드의 이름을 지정합니다.

GET /my-ai-search-index/_search { "_source": { "excludes": [ "output_embedding" ] }, "query": { "neural": { "output_embedding": { "query_text": "What is AI search?", "model_id": "mBGzipQB2gmRjlv_dOoB", "k": 2 } } } }