텍스트 임베딩 가져오기

이 페이지에서는 텍스트 임베딩 API를 사용하여 텍스트 임베딩을 만드는 방법을 설명합니다.

Vertex AI는 텍스트 임베딩 API를 통해 Google Distributed Cloud (GDC) 에어갭에서 텍스트 임베딩을 지원합니다. 텍스트 임베딩은 벡터 표현을 사용합니다.

텍스트 임베딩은 지원되는 언어로 작성된 텍스트 데이터를 숫자 벡터로 변환합니다. 이러한 벡터 표현은 표현이 나타내는 단어의 시맨틱 의미와 컨텍스트를 캡처하도록 설계되었습니다. 텍스트 임베딩 모델은 텍스트의 문서 검색, 질문 및 답변, 분류, 사실 확인과 같은 다양한 태스크 유형에 최적화된 임베딩을 생성할 수 있습니다.

텍스트 임베딩에서 사용하는 주요 개념에 대한 자세한 내용은 다음 문서를 참고하세요.

시작하기 전에

GDC 프로젝트에서 텍스트 삽입을 사용하기 전에 다음 단계를 따르세요.

  1. Vertex AI용 프로젝트를 설정합니다.
  2. 언어태스크 유형에 따라 사용 가능한 텍스트 임베딩 모델 중 하나를 선택합니다.
  3. 사용하려는 모델에 따라 텍스트 임베딩 또는 텍스트 임베딩 다국어 API를 사용 설정합니다.
  4. 사용자 또는 서비스 계정에 텍스트 임베딩 또는 텍스트 임베딩 다국어에 대한 적절한 액세스 권한을 부여합니다. 자세한 내용은 다음 설명서를 참조하세요.

  5. Vertex AI 클라이언트 라이브러리를 설치합니다.

  6. 인증 토큰 가져오기

모델 요청, 서비스 계정, IAM 역할 바인딩에 동일한 프로젝트를 사용해야 합니다.

텍스트 스니펫의 텍스트 임베딩 가져오기

기본 요건을 충족한 후에는 텍스트 임베딩 또는 텍스트 임베딩 다국어 모델을 사용하여 API 또는 Python용 SDK를 통해 텍스트 스니펫의 텍스트 임베딩을 가져올 수 있습니다.

다음 예시에서는 text-embedding-004 모델을 사용합니다.

Text Embedding API에 REST 요청을 합니다. 그렇지 않으면 Python 스크립트에서 모델과 상호작용하여 텍스트 임베딩을 가져옵니다.

REST

텍스트 임베딩을 가져오려면 모델 엔드포인트를 지정하여 POST 요청을 전송합니다.

요청하려면 다음 단계를 따르세요.

  1. 요청 콘텐츠를 request.json이라는 JSON 파일에 저장합니다. 파일은 다음 예시와 같아야 합니다.

    {
      "instances": [
        {
          "content": "What is life?",
          "task_type": "",
          "title": ""
        }
      ]
    }
    
  2. curl 도구를 사용하여 요청을 실행합니다.

    curl -X POST \
    -H "Authorization: Bearer TOKEN"\
    -H "Content-Type: application/json; charset=utf-8" \
    -d @request.json \
    "https://ENDPOINT:443/v1/projects/PROJECT/locations/PROJECT/endpoints/MODEL:predict"
    

    다음을 바꿉니다.

    • TOKEN: 획득한 인증 토큰입니다.
    • ENDPOINT: 조직에서 사용하는 텍스트 임베딩 또는 텍스트 임베딩 다국어 엔드포인트입니다. 자세한 내용은 서비스 상태 및 엔드포인트 보기를 참고하세요.
    • PROJECT: 프로젝트 이름입니다.
    • MODEL: 사용할 모델입니다. 사용 가능한 값은 다음과 같습니다.

      • 텍스트 임베딩 모델의 경우 endpoint-text-embedding
      • 텍스트 임베딩 다국어 모델의 endpoint-text-embedding-multilingual

다음과 비슷한 JSON 응답을 받아야 합니다.

{"predictions":[[-0.00668720435,3.20804138e-05,-0.0281705819,-0.00954890903,-0.0818724185,0.0150693133,-0.00677698106, …. ,0.0167487375,-0.0534791686,0.00208711182,0.032938987,-0.01491543]],"deployedModelId":"text-embedding","model":"models/text-embedding/1","modelDisplayName":"text-embedding","modelVersionId":"1"}

Python

Python 스크립트에서 텍스트 임베딩을 가져오려면 다음 단계를 따르세요.

  1. Vertex AI Platform 클라이언트 라이브러리를 설치합니다.

  2. 요청 콘텐츠를 request.json이라는 JSON 파일에 저장합니다. 파일은 다음 예시와 같아야 합니다.

    {
      "instances": [
        {
          "content": "What is life?",
          "task_type": "",
          "title": ""
        }
      ]
    }
    
  3. 필수 Python 라이브러리를 설치합니다.

    pip install absl-py
    
  4. client.py Python 파일을 만듭니다. 파일은 다음 예시와 같이 표시되어야 합니다.

    import json
    import os
    from typing import Sequence
    
    import grpc
    from absl import app
    from absl import flags
    
    from google.protobuf import json_format
    from google.protobuf.struct_pb2 import Value
    from google.cloud.aiplatform_v1.services import prediction_service
    
    _INPUT = flags.DEFINE_string("input", None, "input", required=True)
    _HOST = flags.DEFINE_string("host", None, "Prediction endpoint", required=True)
    _ENDPOINT_ID = flags.DEFINE_string("endpoint_id", None, "endpoint id", required=True)
    _TOKEN = flags.DEFINE_string("token", None, "STS token", required=True)
    
    # ENDPOINT_RESOURCE_NAME is a placeholder value that doesn't affect prediction behavior.
    ENDPOINT_RESOURCE_NAME="projects/PROJECT/locations/PROJECT/endpoints/MODEL"
    
    os.environ["GRPC_DEFAULT_SSL_ROOTS_FILE_PATH"] = CERT_NAME
    
    # predict_client_secure builds a client that requires TLS
    def predict_client_secure(host):
      with open(os.environ["GRPC_DEFAULT_SSL_ROOTS_FILE_PATH"], 'rb') as f:
          creds = grpc.ssl_channel_credentials(f.read())
    
      channel_opts = ()
      channel_opts += (('grpc.ssl_target_name_override', host),)
      client = prediction_service.PredictionServiceClient(
          transport=prediction_service.transports.grpc.PredictionServiceGrpcTransport(
              channel=grpc.secure_channel(target=host+":443", credentials=creds, options=channel_opts)))
      return client
    
    def predict_func(client, instances, token):
      resp = client.predict(
          endpoint=ENDPOINT_RESOURCE_NAME,
          instances=instances,
          metadata=[ ("x-vertex-ai-endpoint-id", _ENDPOINT_ID.value), ("authorization", "Bearer " + token),])
      print(resp)
    
    def main(argv: Sequence[str]):
      del argv  # Unused.
      with open(_INPUT.value) as json_file:
          data = json.load(json_file)
          instances = [json_format.ParseDict(s, Value()) for s in data["instances"]]
    
      client = predict_client_secure(_HOST.value,)
    
      predict_func(client=client, instances=instances, token=_TOKEN.value)
    
    if __name__=="__main__":
      app.run(main)
    

    다음을 바꿉니다.

    • PROJECT: 프로젝트 이름입니다.
    • MODEL: 사용할 모델입니다. 사용 가능한 값은 다음과 같습니다.
      • 텍스트 임베딩 모델의 경우 endpoint-text-embedding
      • 텍스트 임베딩 다국어 모델의 endpoint-text-embedding-multilingual
    • CERT_NAME: 인증 기관(CA) 인증서 파일의 이름(예: org-1-trust-bundle-ca.cert) 개발 환경에 있는 경우에만 이 값이 필요합니다. 그렇지 않으면 생략합니다.
  5. 요청을 보냅니다.

    python client.py --token=TOKEN --host=ENDPOINT --input=request.json --endpoint_id=MODEL
    

    다음을 바꿉니다.

    • TOKEN: 획득한 인증 토큰입니다.
    • ENDPOINT: 조직에서 사용하는 텍스트 임베딩 또는 텍스트 임베딩 다국어 엔드포인트입니다. 자세한 내용은 서비스 상태 및 엔드포인트 보기를 참고하세요.
    • MODEL: 사용할 모델입니다. 사용 가능한 값은 다음과 같습니다.

      • 텍스트 임베딩 모델의 경우 endpoint-text-embedding
      • 텍스트 임베딩 다국어 모델의 endpoint-text-embedding-multilingual

다음과 비슷한 JSON 응답을 받아야 합니다.

{"predictions":[[-0.00668720435,3.20804138e-05,-0.0281705819,-0.00954890903,-0.0818724185,0.0150693133,-0.00677698106, …. ,0.0167487375,-0.0534791686,0.00208711182,0.032938987,-0.01491543]],"deployedModelId":"text-embedding","model":"models/text-embedding/1","modelDisplayName":"text-embedding","modelVersionId":"1"}