Usa modelos de incorporación con RAG Engine

En esta página, se describen tus opciones de modelos de incorporación y se muestra cómo usarlas para crear un corpus de RAG. La asociación entre tu modelo y el corpus de RAG permanece fija durante el ciclo de vida de tu corpus de RAG.

Las incorporaciones son representaciones numéricas de las entradas. Puedes usar incorporaciones en tus aplicaciones para reconocer significados complejos y relaciones semánticas, y para procesar y producir lenguaje.

Las incorporaciones funcionan mediante la conversión de texto, imagen y video en arreglos de números de punto flotante llamados vectores. Cuanto más cerca estén dos vectores en su espacio de incorporaciones, mayor será la similitud de sus entradas.

Los modelos de incorporación son un componente importante de los sistemas de recuperación semántica. El rendimiento de un sistema de recuperación depende de qué tan bien el modelo de incorporación asigne las relaciones en tus datos.

RAG Engine implementa la generación mejorada por recuperación (RAG) y te ofrece la opción de elegir entre los siguientes modelos de incorporación para usar en un corpus de RAG:

  • Modelos de incorporación de texto de Vertex AI: Son modelos que entrena el editor, como Google. Los modelos se entrenan con un gran conjunto de datos de texto y proporcionan un modelo de referencia sólido para muchas tareas.
  • Modelos de incorporación de texto de Vertex AI ajustados con precisión: Son modelos entrenados para tener un conocimiento especializado o un rendimiento altamente personalizado.
  • Modelos de incorporación de OSS: Modelos de incorporación de código abierto de terceros en variantes solo en inglés y multilingües.

Usa modelos de incorporación de texto de Vertex AI

La API de incorporaciones de texto de Vertex AI usa los modelos de incorporación de Gecko, que producen un vector de incorporación densa con 768 dimensiones. Las incorporaciones densas almacenan el significado del texto a diferencia de los vectores dispersos, que tienden a asignar palabras directamente a números. El beneficio de usar incorporaciones de vectores densas en la IA generativa es que, en lugar de buscar una palabra directa o coincidencias de sintaxis, puedes buscar mejor pasajes que se alineen con el significado de la consulta, incluso si los pasajes no usan el mismo idioma.

Los modelos de Gecko están disponibles en versiones solo en inglés y multilingües. A diferencia de los modelos de Gecko optimizados, no es necesario implementar los modelos de Gecko del publicador, lo que los convierte en el conjunto de modelos más fácil de usar con el motor de RAG. Se recomiendan los siguientes modelos de Gecko para usar con un corpus de RAG:

  • text-embedding-004
  • text-multilingual-embedding-002
  • textembedding-gecko@003
  • textembedding-gecko-multilingual@001

Si no especificas un modelo de incorporación cuando creas tu corpus de RAG, RAG Engine asigna de forma predeterminada el modelo text-embedding-004 para tu corpus de RAG.

Es posible que los modelos de Gecko del publicador dejen de estar disponibles. Si eso sucede, los modelos de Gecko del publicador no se pueden usar con el motor de RAG, incluso para un corpus de RAG que se creó antes de la baja. Cuando tu modelo de Gecko quede obsoleto, debes migrar el corpus de RAG, lo que significa que debes crear un corpus de RAG y, luego, importar los datos. Una alternativa es usar un modelo de Gecko ajustado o un modelo de incorporación de OSS autoimplementado, que es compatible después de que el modelo quede obsoleto.

En estas muestras de código, se muestra cómo crear un corpus RAG con un modelo de Gecko del publicador.

curl

  ENDPOINT=us-central1-aiplatform.googleapis.com
  PROJECT_ID=YOUR_PROJECT_ID

  // Set this to your choice of publisher Gecko model. Note that the full resource name of the publisher model is required.
  // Example: projects/${PROJECT_ID}/locations/us-central1/publishers/google/models/text-embedding-004
  ENDPOINT_NAME=YOUR_ENDPOINT_NAME

  // Set a display name for your corpus.
  // For example, "my test corpus"
  CORPUS_DISPLAY_NAME=YOUR_CORPUS_DISPLAY_NAME

  // CreateRagCorpus
  // Input: ENDPOINT, PROJECT_ID, ENDPOINT_NAME, CORPUS_DISPLAY_NAME
  curl -X POST \
  -H "Authorization: Bearer $(gcloud auth print-access-token)" \
  -H "Content-Type: application/json" \
  https://${ENDPOINT}/v1beta1/projects/${PROJECT_ID}/locations/us-central1/ragCorpora \
  -d '{
        "display_name" : '\""${CORPUS_DISPLAY_NAME}"\"',
        "rag_embedding_model_config" : {
              "vertex_prediction_endpoint": {
                    "endpoint": '\""${ENDPOINT_NAME}"\"'
              }
        }
  }'

SDK de Vertex AI para Python

  import vertexai
  from vertexai.preview import rag

  # Set Project
  PROJECT_ID = "YOUR_PROJECT_ID"
  vertexai.init(project=${PROJECT_ID}, location="us-central1")

  # Configure a Google first-party embedding model
  embedding_model_config = rag.EmbeddingModelConfig(
        publisher_model="publishers/google/models/text-embedding-004"
  )

  # Name your corpus
  DISPLAY_NAME = "YOUR_CORPUS_DISPLAY_NAME"

  rag_corpus = rag.create_corpus(
        display_name=DISPLAY_NAME, embedding_model_config=embedding_model_config
  )

Usa modelos de incorporación de texto de Vertex AI ajustados

Aunque los modelos de publicador de base se entrenan con un gran conjunto de datos de texto y proporcionan un modelo de referencia sólido para muchas tareas, es posible que haya situaciones en las que se requiera que los modelos tengan un conocimiento especializado o un rendimiento muy personalizado. En esos casos, el ajuste del modelo te permite ajustar las representaciones del modelo con tus datos relevantes. Un beneficio adicional de este enfoque es que, cuando se ajusta el modelo, la imagen resultante es de tu propiedad y no se ve afectada por la baja del modelo de Gecko. Todos los modelos de incorporación de Gecko ajustados producen incorporaciones con vectores de 768 dimensiones. Para obtener más información sobre estos modelos, consulta Obtén incorporaciones de texto.

Para ajustar un modelo de Gecko, consulta Ajusta los modelos de texto.

En estas muestras de código, se muestra cómo crear un corpus RAG con tu modelo de Gecko implementado y ajustado.

curl

  ENDPOINT=us-central1-aiplatform.googleapis.com
  PROJECT_ID=YOUR_PROJECT_ID

  // Your Vertex AI endpoint resource with the deployed fine-tuned Gecko model
  // Example: projects/${PROJECT_ID}/locations/${LOCATION}/endpoints/${ENDPOINT_ID}
  ENDPOINT_NAME=YOUR_ENDPOINT_NAME

  // Set a display name for your corpus.
  // For example, "my test corpus"
  CORPUS_DISPLAY_NAME=YOUR_CORPUS_DISPLAY_NAME

  // CreateRagCorpus
  // Input: ENDPOINT, PROJECT_ID, ENDPOINT_NAME, CORPUS_DISPLAY_NAME
  curl -X POST \
  -H "Authorization: Bearer $(gcloud auth print-access-token)" \
  -H "Content-Type: application/json" \
  https://${ENDPOINT}/v1beta1/projects/${PROJECT_ID}/locations/us-central1/ragCorpora \
  -d '{
        "display_name" : '\""${CORPUS_DISPLAY_NAME}"\"',
        "rag_embedding_model_config" : {
                "vertex_prediction_endpoint": {
                      "endpoint": '\""${ENDPOINT_NAME}"\"'
                }
        }
    }'

SDK de Vertex AI para Python

  import vertexai
  from vertexai.preview import rag

  # Set Project
  PROJECT_ID = "YOUR_PROJECT_ID"
  vertexai.init(project=${PROJECT_ID}, location="us-central1")

  # Your Vertex Endpoint resource with the deployed fine-tuned Gecko model
  ENDPOINT_ID = "YOUR_MODEL_ENDPOINT_ID"
  MODEL_ENDPOINT = "projects/${PROJECT_ID}/locations/us-central1/endpoints/${ENDPOINT_ID}"

  embedding_model_config = rag.EmbeddingModelConfig(
      endpoint=${MODEL_ENDPOINT},
  )

  # Name your corpus
  DISPLAY_NAME = "YOUR_CORPUS_DISPLAY_NAME"

  rag_corpus = rag.create_corpus(
      display_name=${DISPLAY_NAME}, embedding_model_config=embedding_model_config
  )

Usa modelos de incorporación de OSS

RAG Engine admite modelos de incorporación de código abierto de terceros en variantes solo en inglés y multilingües. En esta tabla, se enumeran los modelos E5 admitidos.

Versión del modelo Modelo base Parámetros dimensión de incorporación Solo en inglés
e5-base-v2 MiniLM 109 M 768
e5-large-v2 MiniLM 335 millones 1,024
e5-small-v2 MiniLM 33 millones 384
multilingual-e5-large xlm-roberta-large 560 millones 1,024
multilingual-e5-small microsoft/Multilingual-MiniLM-L12-H384 118 millones 384

Para usar modelos E5 con RAG Engine, el modelo E5 se debe implementar desde Model Garden. Consulta Embedding de texto E5 en la consola de Google Cloud para implementar tu modelo E5.

En estas muestras de código, se muestra cómo crear un corpus de RAG con tu modelo de E5 implementado.

curl

  ENDPOINT=us-central1-aiplatform.googleapis.com
  PROJECT_ID=YOUR_PROJECT_ID

  // Your Vertex Endpoint resource with the deployed E5 model
  // Example: projects/${PROJECT_ID}/locations/${LOCATION}/endpoints/${ENDPOINT_ID}
  ENDPOINT_NAME=YOUR_ENDPOINT_NAME

  // Set a display name for your corpus.
  // For example, "my test corpus"
  CORPUS_DISPLAY_NAME=YOUR_CORPUS_DISPLAY_NAME

  // CreateRagCorpus
  // Input: ENDPOINT, PROJECT_ID, ENDPOINT_NAME, CORPUS_DISPLAY_NAME
  curl -X POST \
  -H "Authorization: Bearer $(gcloud auth print-access-token)" \
  -H "Content-Type: application/json" \
  https://${ENDPOINT}/v1beta1/projects/${PROJECT_ID}/locations/us-central1/ragCorpora \
  -d '{
        "display_name" : '\""${CORPUS_DISPLAY_NAME</var>}"\"',
        "rag_embedding_model_config" : {
                "vertex_prediction_endpoint": {
                      "endpoint": '\""${ENDPOINT_NAME}"\"'
                }
        }
    }'

SDK de Vertex AI para Python

  import vertexai
  from vertexai.preview import rag

  # Set Project
  PROJECT_ID = "YOUR_PROJECT_ID"
  vertexai.init(project=PROJECT_ID, location="us-central1")

  # Your Vertex Endpoint resource with the deployed E5 model
  ENDPOINT_ID = "YOUR_MODEL_ENDPOINT_ID"
  MODEL_ENDPOINT = "projects/{PROJECT_ID}/locations/us-central1/endpoints/{ENDPOINT_ID}"

  embedding_model_config = rag.EmbeddingModelConfig(
      endpoint=MODEL_ENDPOINT,
  )

  # Name your corpus
  DISPLAY_NAME = "YOUR_CORPUS_DISPLAY_NAME"

  rag_corpus = rag.create_corpus(
      display_name=DISPLAY_NAME, embedding_model_config=embedding_model_config
  )

¿Qué sigue?