이 페이지에서는 Text Embedding API를 사용하여 텍스트 임베딩을 만드는 방법을 설명합니다.
Vertex AI는 Text Embedding API를 통해 Google Distributed Cloud (GDC) 에어 갭에서 텍스트 임베딩을 지원합니다. 텍스트 임베딩은 벡터 표현을 사용합니다.
텍스트 임베딩은 지원되는 언어로 작성된 텍스트 데이터를 숫자 벡터로 변환합니다. 이러한 벡터 표현은 표현이 나타내는 단어의 시맨틱 의미와 컨텍스트를 캡처하도록 설계되었습니다. 텍스트 임베딩 모델은 문서 검색, 질문 및 답변, 분류, 텍스트 사실 확인과 같은 다양한 태스크 유형에 최적화된 임베딩을 생성할 수 있습니다.
텍스트 임베딩에서 사용하는 주요 개념에 대한 자세한 내용은 다음 문서를 참조하세요.
- 임베딩에 관한 자세한 내용은 텍스트 임베딩 개요를 참조하세요.
- 텍스트 임베딩 모델에 대한 자세한 내용은 임베딩 모델을 참조하세요.
- 태스크 유형이 최적화된 임베딩을 생성하는 방법을 알아보려면 임베딩 태스크 유형 선택을 참조하세요.
- 각 임베딩 모델에서 지원하는 언어에 대한 자세한 내용은 지원되는 텍스트 임베딩 언어를 참조하세요.
시작하기 전에
GDC 프로젝트에서 텍스트 임베딩을 생성하려면 관리자에게 필요한 권한을 요청하세요.
IAM 역할 요청
IAM 프로젝트 관리자에게 연락하여 사용하려는 모델에 따라 프로젝트 네임스페이스에서 다음 역할 중 하나를 요청하세요.
- AI 텍스트 임베딩 개발자 (
ai-text-embedding-developer): 텍스트 임베딩 모델을 사용하여 텍스트 임베딩을 생성합니다. - AI 텍스트 임베딩 다국어 개발자(
ai-text-embedding-multilingual-developer): 텍스트 임베딩 다국어 모델을 사용하여 텍스트 임베딩을 생성합니다.
이러한 역할에 대한 자세한 내용은 IAM 권한 준비를 참조하세요. 서비스 계정의 역할 바인딩에 대한 자세한 내용은 서비스 계정 설정을 참조하세요.
개발 환경 준비
GDC 프로젝트에서 텍스트 임베딩을 사용하기 전에 다음 단계를 따르세요.
- Vertex AI용 프로젝트를 설정합니다.
- 언어 및 태스크 유형에 따라 텍스트 임베딩에 사용할 수 있는 모델 중 하나를 선택합니다.
- 사용하려는 모델에 따라 텍스트 임베딩 또는 Text Embedding Multilingual API를 사용 설정합니다.
모델 요청, 서비스 계정, IAM 역할 바인딩에 동일한 프로젝트를 사용해야 합니다.
텍스트 스니펫의 텍스트 임베딩 가져오기
기본 요건을 충족한 후에는 텍스트 임베딩 또는 텍스트 임베딩 다국어 모델을 사용하여 API 또는 Python용 SDK를 통해 텍스트 스니펫의 텍스트 임베딩을 가져올 수 있습니다.
다음 예시에서는 text-embedding-004 모델을 사용합니다.
Text Embedding API에 REST 요청을 수행합니다. 그렇지 않으면 Python 스크립트에서 모델과 상호작용하여 텍스트 임베딩을 가져옵니다.
REST
텍스트 임베딩을 가져오려면 모델 엔드포인트를 지정하여 POST 요청을 전송합니다.
요청하려면 다음 단계를 따르세요.
요청 콘텐츠를
request.json이라는 JSON 파일에 저장합니다. 파일은 다음 예시와 같이 표시되어야 합니다.{ "instances": [ { "content": "What is life?", "task_type": "", "title": "" } ] }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
- 텍스트 임베딩 모델의 경우
출력은 다음과 비슷합니다.
{"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 스크립트에서 텍스트 임베딩을 가져오려면 다음 단계를 따르세요.
요청 콘텐츠를
request.json이라는 JSON 파일에 저장합니다. 파일은 다음 예시와 같이 표시됩니다.{ "instances": [ { "content": "What is life?", "task_type": "", "title": "" } ] }필수 Python 라이브러리를 설치합니다.
pip install absl-pyclient.pyPython 파일을 만듭니다. 파일은 다음 예시와 같아야 합니다.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: 사용할 모델입니다. 사용 가능한 값은 다음과 같습니다.- 텍스트 임베딩 모델의 경우
text-embedding - 다국어 텍스트 임베딩 모델의 경우
text-embedding-multilingual
- 텍스트 임베딩 모델의 경우
CERT_NAME: 인증 기관(CA) 인증서 파일의 이름(예:org-1-trust-bundle-ca.cert) 이 값은 개발 환경에 있는 경우에만 필요합니다. 그렇지 않으면 생략합니다.
요청을 전송합니다.
python client.py --token=TOKEN --host=ENDPOINT --input=request.json --endpoint_id=MODEL다음을 바꿉니다.
TOKEN: 가져온 인증 토큰입니다.ENDPOINT: 조직에 사용하는 텍스트 임베딩 또는 텍스트 임베딩 다국어 엔드포인트입니다. 자세한 내용은 서비스 상태 및 엔드포인트 보기를 참조하세요.MODEL: 사용할 모델입니다. 사용 가능한 값은 다음과 같습니다.- 텍스트 임베딩 모델의 경우
text-embedding - 다국어 텍스트 임베딩 모델의 경우
text-embedding-multilingual
- 텍스트 임베딩 모델의 경우
출력은 다음과 비슷합니다.
{"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"}