Obtenha incorporações de texto

Esta página descreve como criar uma incorporação de texto através da API Text Embedding.

O Vertex AI suporta incorporações de texto no Google Distributed Cloud (GDC) com isolamento de ar através da API Text Embedding. A incorporação de texto usa representações vetoriais.

A incorporação de texto converte dados textuais escritos em qualquer idioma suportado em vetores numéricos. Estas representações vetoriais foram concebidas para captar o significado semântico e o contexto das palavras que representam. Os modelos de incorporação de texto podem gerar incorporações otimizadas para vários tipos de tarefas, como obtenção de documentos, perguntas e respostas, classificação e validação de factos para texto.

Para mais informações sobre os conceitos-chave usados pelas incorporações de texto, consulte a seguinte documentação:

Antes de começar

Antes de usar a incorporação de texto num projeto da GDC, siga estes passos:

  1. Configure um projeto para o Vertex AI.
  2. Escolha um dos modelos disponíveis para incorporações de texto, consoante o idioma e o tipo de tarefa.
  3. Ative a API Text Embedding ou Text Embedding Multilingual, consoante o modelo que quer usar.
  4. Conceda a um utilizador ou a uma conta de serviço o acesso adequado à API Text Embedding ou Text Embedding Multilingual. Para mais informações, consulte a seguinte documentação:

  5. Instale as bibliotecas cliente da Vertex AI.

  6. Obtenha um token de autenticação.

Tem de usar o mesmo projeto para os pedidos de modelos, a conta de serviço e a associação de funções do IAM.

Obtenha incorporações de texto para um fragmento de texto

Depois de cumprir os pré-requisitos, pode usar os modelos Text Embedding ou Text Embedding Multilingual para obter incorporações de texto para um fragmento de texto através da API ou do SDK para Python.

Os exemplos seguintes usam o modelo text-embedding-004.

Faça um pedido REST à API Text Embedding. Caso contrário, interaja com o modelo a partir de um script Python para obter uma incorporação de texto.

REST

Para obter incorporações de texto, envie um pedido POST especificando o ponto final do modelo.

Siga estes passos para fazer um pedido:

  1. Guarde o conteúdo do pedido num ficheiro JSON denominado request.json. O ficheiro tem de ter o seguinte aspeto:

    {
      "instances": [
        {
          "content": "What is life?",
          "task_type": "",
          "title": ""
        }
      ]
    }
    
  2. Faça o pedido através da curlferramenta:

    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 o seguinte:

    • TOKEN: o token de autenticação que obteve.
    • ENDPOINT: o ponto final Text Embedding ou Text Embedding Multilingual que usa para a sua organização. Para mais informações, veja o estado do serviço e os pontos finais.
    • PROJECT: o nome do seu projeto.
    • MODEL: o modelo que quer usar. Seguem-se os valores disponíveis:

      • endpoint-text-embedding para o modelo de incorporação de texto.
      • endpoint-text-embedding-multilingual para o modelo Text Embedding Multilingual.

Tem de obter uma resposta JSON semelhante à 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 estes passos para obter incorporações de texto a partir de um script Python:

  1. Instale a biblioteca cliente da Vertex AI Platform.

  2. Guarde o conteúdo do pedido num ficheiro JSON denominado request.json. O ficheiro tem de ter o seguinte aspeto:

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

    pip install absl-py
    
  4. Crie um ficheiro Python denominado client.py. O ficheiro tem de ter o seguinte aspeto:

    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 o seguinte:

    • PROJECT: o nome do seu projeto.
    • MODEL: o modelo que quer usar. Seguem-se os valores disponíveis:
      • endpoint-text-embedding para o modelo de incorporação de texto.
      • endpoint-text-embedding-multilingual para o modelo Text Embedding Multilingual.
    • CERT_NAME: o nome do ficheiro de certificado da autoridade de certificação (AC), como org-1-trust-bundle-ca.cert. Só precisa deste valor se estiver num ambiente de programação. Caso contrário, omita-o.
  5. Envie uma solicitação:

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

    Substitua o seguinte:

    • TOKEN: o token de autenticação que obteve.
    • ENDPOINT: o ponto final Text Embedding ou Text Embedding Multilingual que usa para a sua organização. Para mais informações, veja o estado do serviço e os pontos finais.
    • MODEL: o modelo que quer usar. Seguem-se os valores disponíveis:

      • endpoint-text-embedding para o modelo de incorporação de texto.
      • endpoint-text-embedding-multilingual para o modelo Text Embedding Multilingual.

Tem de obter uma resposta JSON semelhante à 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"}