En esta página, se describe cómo crear un embedding de texto con la API de Text Embedding.
Vertex AI admite embeddings de texto en Google Distributed Cloud (GDC) aislado a través de la API de Text Embedding. Text Embedding usa representaciones vectoriales.
Text Embedding convierte los datos textuales escritos en cualquier idioma admitido en vectores numéricos. Estas representaciones vectoriales están diseñadas para capturar el significado y el contexto semántico de las palabras que representan. Los modelos de embeddings de texto pueden generar embeddings optimizadas para varios tipos de tareas, como la recuperación de documentos, preguntas y respuestas, la clasificación y la verificación de hechos para el texto.
Para obtener más información sobre los conceptos clave que usan los embeddings de texto, consulta la siguiente documentación:
- Para obtener más información sobre los embeddings, consulta la descripción general de los embeddings de texto.
- Para obtener más información sobre los modelos de incorporación de texto, consulta Modelos de embeddings.
- Para obtener más información sobre cómo los tipos de tareas generan embeddings optimizados, consulta Elige un tipo de tarea de embeddings.
- Para obtener información sobre qué idiomas admite cada modelo de incorporación, consulta Idiomas de incorporación de texto compatibles.
Antes de comenzar
Antes de usar Text Embedding en un proyecto de GDC, sigue estos pasos:
- Configura un proyecto para Vertex AI.
- Elige uno de los modelos disponibles para las incorporaciones de texto, según el idioma y el tipo de tarea.
- Habilita la API de Text Embedding o Text Embedding Multilingual, según el modelo que quieras usar.
Otorga a un usuario o una cuenta de servicio el acceso adecuado a Text Embedding o Text Embedding Multilingual. Para obtener más información, consulta la siguiente documentación:
- Para obtener información sobre los roles necesarios, consulta Prepara los permisos de IAM.
- Para obtener información sobre las vinculaciones de roles para las cuentas de servicio, consulta Configura cuentas de servicio.
Debes usar el mismo proyecto para las solicitudes del modelo, la cuenta de servicio y la vinculación del rol de IAM.
Obtén incorporaciones de texto para un fragmento de texto
Después de cumplir con los requisitos previos, puedes usar los modelos Text Embedding o Text Embedding Multilingual para obtener incorporaciones de texto para un fragmento de texto con la API o el SDK de Python.
En los siguientes ejemplos, se usa el modelo text-embedding-004
.
Realiza una solicitud a la API de Text Embedding con REST. De lo contrario, interactúa con el modelo desde una secuencia de comandos de Python para obtener una incorporación de texto.
REST
Para obtener incorporaciones de texto, envía una solicitud POST especificando el extremo del modelo.
Sigue estos pasos para realizar una solicitud:
Guarda el contenido de tu solicitud en un archivo JSON llamado
request.json
. El archivo debe verse como el siguiente ejemplo:{ "instances": [ { "content": "What is life?", "task_type": "", "title": "" } ] }
Realiza la solicitud con la herramienta
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"
Reemplaza lo siguiente:
TOKEN
: Es el token de autenticación que obtuviste.ENDPOINT
: Es el extremo de Text Embedding o Text Embedding Multilingual que usas para tu organización. Para obtener más información, consulta el estado y los extremos del servicio.PROJECT
: Es el nombre de tu proyecto.MODEL
: Es el modelo que deseas usar. Los siguientes son los valores disponibles:endpoint-text-embedding
para el modelo de incorporación de texto.endpoint-text-embedding-multilingual
para el modelo Text Embedding Multilingual.
Debes obtener una respuesta JSON similar a la siguiente:
{"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
Sigue estos pasos para obtener embeddings de texto a partir de una secuencia de comandos de Python:
Guarda el contenido de tu solicitud en un archivo JSON llamado
request.json
. El archivo debe verse como el siguiente ejemplo:{ "instances": [ { "content": "What is life?", "task_type": "", "title": "" } ] }
Instala las bibliotecas de Python necesarias:
pip install absl-py
Crea un archivo de Python llamado
client.py
. El archivo debe verse como el siguiente ejemplo: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)
Reemplaza lo siguiente:
PROJECT
: Es el nombre de tu proyecto.MODEL
: Es el modelo que deseas usar. Los siguientes son los valores disponibles:endpoint-text-embedding
para el modelo de incorporación de texto.endpoint-text-embedding-multilingual
para el modelo Text Embedding Multilingual.
CERT_NAME
: Es el nombre del archivo del certificado de la autoridad certificadora (CA), comoorg-1-trust-bundle-ca.cert
. Solo necesitas este valor si estás en un entorno de desarrollo. De lo contrario, omítelo.
Envía una solicitud:
python client.py --token=TOKEN --host=ENDPOINT --input=request.json --endpoint_id=MODEL
Reemplaza lo siguiente:
TOKEN
: Es el token de autenticación que obtuviste.ENDPOINT
: Es el extremo de Text Embedding o Text Embedding Multilingual que usas para tu organización. Para obtener más información, consulta el estado y los extremos del servicio.MODEL
: Es el modelo que deseas usar. Los siguientes son los valores disponibles:endpoint-text-embedding
para el modelo de incorporación de texto.endpoint-text-embedding-multilingual
para el modelo Text Embedding Multilingual.
Debes obtener una respuesta JSON similar a la siguiente:
{"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"}