Acessar incorporações de texto

Nesta página, descrevemos como criar um embedding de texto usando a API Text Embedding.

A Vertex AI é compatível com embeddings de texto no Google Distributed Cloud (GDC) com isolamento físico pela API Text Embedding. O embedding de texto usa representações vetoriais.

O embedding de texto converte dados textuais escritos em qualquer idioma compatível em vetores numéricos. Essas representações vetoriais são projetadas para capturar o significado semântico e o contexto das palavras que representam. Os modelos de embedding de texto podem gerar embeddings otimizados para vários tipos de tarefas, como recuperação de documentos, perguntas e respostas, classificação e verificação de fatos para texto.

Para mais informações sobre os principais conceitos usados pelos embeddings de texto, consulte a seguinte documentação:

Antes de começar

Para gerar embeddings de texto em um projeto do GDC, solicite as permissões necessárias ao administrador.

Solicitar papéis do IAM

Entre em contato com o administrador do projeto do IAM para solicitar um dos seguintes papéis no namespace do projeto, dependendo do modelo que você quer usar:

  • Desenvolvedor de embeddings de texto de IA (ai-text-embedding-developer): gera embeddings de texto usando o modelo de embedding de texto.
  • AI Text Embedding Multilingual Developer (ai-text-embedding-multilingual-developer): gera embeddings de texto usando o modelo Text Embedding Multilingual.

Para mais informações sobre esses papéis, consulte Preparar permissões do IAM. Para informações sobre vinculações de papéis para contas de serviço, consulte Configurar contas de serviço.

Preparar o ambiente

Antes de usar o embedding de texto em um projeto do GDC, siga estas etapas:

  1. Configure um projeto para a Vertex AI.
  2. Escolha um dos modelos disponíveis para embeddings de texto, dependendo do idioma e do tipo de tarefa.
  3. Ative a API embedding de texto ou embedding de texto multilíngue, dependendo do modelo que você quer usar.
  4. Instale as bibliotecas de cliente da Vertex AI.

  5. Receba um token de autenticação.

É preciso usar o mesmo projeto para as solicitações de modelo, a conta de serviço e a vinculação de papel do IAM.

Obter embeddings de texto para um snippet de texto

Depois de atender aos pré-requisitos, use os modelos de embedding de texto ou de embedding de texto multilíngue para receber embeddings de texto para um snippet de texto usando a API ou o SDK para Python.

Os exemplos a seguir usam o modelo text-embedding-004.

Faça uma solicitação REST para a API de embedding de texto. Caso contrário, interaja com o modelo de um script Python para receber um embedding de texto.

REST

Para receber embeddings de texto, envie uma solicitação POST especificando o endpoint do modelo.

Siga estas etapas para fazer uma solicitação:

  1. Salve o conteúdo da solicitação em um arquivo JSON chamado request.json. O arquivo precisa ser semelhante ao exemplo a seguir:

    {
      "instances": [
        {
          "content": "What is life?",
          "task_type": "",
          "title": ""
        }
      ]
    }
    
  2. Faça a solicitação usando a ferramenta 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"
    

    Substitua:

    • TOKEN: o token de autenticação que você recebeu.
    • ENDPOINT: o endpoint de embedding de texto ou embedding de texto multilíngue que você usa na sua organização. Para mais informações, confira o status e os endpoints do serviço.
    • PROJECT: o nome do projeto.
    • MODEL: o modelo que você quer usar. Estes são os valores disponíveis:

      • endpoint-text-embedding para o modelo de embedding de texto.
      • endpoint-text-embedding-multilingual para o modelo multilíngue de embedding de texto.

O resultado será o seguinte:

{"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

Siga estas etapas para receber embeddings de texto de um script Python:

  1. Instale a biblioteca de cliente da Vertex AI Platform.

  2. Salve o conteúdo da solicitação em um arquivo JSON chamado request.json. O arquivo precisa ser semelhante ao exemplo a seguir:

    {
      "instances": [
        {
          "content": "What is life?",
          "task_type": "",
          "title": ""
        }
      ]
    }
    
  3. Instale as bibliotecas necessárias do Python:

    pip install absl-py
    
  4. Crie um arquivo Python chamado client.py. O arquivo precisa ser semelhante ao exemplo a seguir:

    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)
    

    Substitua:

    • PROJECT: o nome do projeto.
    • MODEL: o modelo que você quer usar. Estes são os valores disponíveis:
      • text-embedding para o modelo de embedding de texto.
      • text-embedding-multilingual para o modelo multilíngue de embedding de texto.
    • CERT_NAME: o nome do arquivo de certificado da autoridade certificadora (CA, na sigla em inglês), como org-1-trust-bundle-ca.cert. Você só precisará desse valor se estiver em um ambiente de desenvolvimento. Caso contrário, omita-o.
  5. Envie uma solicitação:

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

    Substitua:

    • TOKEN: o token de autenticação que você recebeu.
    • ENDPOINT: o endpoint de embedding de texto ou embedding de texto multilíngue que você usa na sua organização. Para mais informações, confira o status e os endpoints do serviço.
    • MODEL: o modelo que você quer usar. Estes são os valores disponíveis:

      • text-embedding para o modelo de embedding de texto.
      • text-embedding-multilingual para o modelo multilíngue de embedding de texto.

O resultado será o seguinte:

{"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"}