Fundamentos con Elasticsearch

En esta página, se explica cómo puedes usar tu instancia de Elasticsearch para fundamentar tus datos.

Fundamentación de Gemini con Elasticsearch

La fundamentación implica usar conjuntos de datos públicos y privados para proporcionar contexto y hechos que fundamenten las respuestas del modelo de lenguaje grande (LLM). Si fundamentas con Elasticsearch, puedes aprovechar tus índices existentes de Elasticsearch para mejorar la calidad y la confiabilidad de los resultados de Gemini, reducir las alucinaciones y garantizar que las respuestas sean pertinentes para tus datos. Esto te permite crear potentes aplicaciones de RAG, como las siguientes:

  • Resúmenes de búsqueda generativos
  • Chatbots de preguntas y respuestas con datos empresariales
  • Agentes basados en tus datos

Puedes fundamentar una respuesta en hasta 10 fuentes de datos a la vez. Puedes combinar la fundamentación con Elasticsearch y la Fundamentación con la Búsqueda de Google para conectar el modelo con conocimiento mundial, una amplia variedad de temas o información actualizada en Internet.

Modelos compatibles

Los siguientes modelos admiten la fundamentación con Elasticsearch solo con entrada de texto:

Configura una plantilla de búsqueda en Elasticsearch

En esta sección, se explica cómo puedes usar tu instancia de Elasticsearch para fundamentar tus datos almacenados en la instancia.

Prácticas recomendadas

Para obtener las mejores respuestas de fundamentación, usa estos principios cuando crees una plantilla de búsqueda:

  • Incluye solo datos relevantes y útiles. Por ejemplo, en un catálogo de productos, especificar una URL de imagen podría no ayudar al LLM a responder instrucciones sobre las propiedades del producto, a menos que la instrucción solicite específicamente una URL. Del mismo modo, evita generar vectores de embedding.

  • La fundamentación quita los resultados de Elasticsearch que tienen poca relevancia para tus instrucciones. Debes proporcionar una mayor cantidad de resultados de Elasticsearch para capturar todo el contexto pertinente.

  • Los datos de los resultados pueden estar en un solo campo o distribuidos en varios campos.

Plantillas de muestra

Puedes usar tus plantillas de búsqueda. Sin embargo, te recomendamos que uses la plantilla de búsqueda genérica de kNN con la fundamentación de Elasticsearch. Para obtener plantillas de búsqueda adicionales, consulta el repositorio de GitHub.

Esta búsqueda semántica con Vertex AI es una búsqueda genérica de kNN.

    PUT _scripts/google-template-knn-multioutput
    {
      "script": {
        "lang": "mustache",
        "source": {
          "_source": {
            "excludes": [ "title_embedding", "description_embedding", "images"]
          },
            "size": "num_hits",
              "knn" : [
              {
                "field": "description_embedding",
                "k": 5,
                "num_candidates": 10,
                "query_vector_builder": {
                  "text_embedding": {
                    "model_id": "googlevertexai_embeddings_004",
                    "model_text": "query"
                  }
                },
                "boost": 0.4
              },
              {
                "field": "title_embedding",
                "k": 5,
                "num_candidates": 10,
                "query_vector_builder": {
                  "text_embedding": {
                    "model_id": "googlevertexai_embeddings_004",
                    "model_text": "query"
                }
              },
              "boost": 0.6
              }
              ]
        }
      }
    }

Genera respuestas fundamentadas con Elasticsearch

Console

Para fundamentar con Elasticsearch en la consola de Google Cloud , haz lo siguiente:

  1. Ve a la página Crear instrucción de Vertex AI Studio.

    Ir a Crear mensaje

  2. En el panel Configuración, para fundamentar tus datos, haz clic en el botón de activación Fundamentación: Tus datos.

  3. En el panel Personalizar la fundamentación, selecciona Elasticsearch.

  4. Ingresa el extremo en el campo Extremo de Elasticsearch.

  5. Ingresa la clave de API en el campo Clave de API de Elasticsearch.

  6. Ingresa el índice en el campo Índice de Elasticsearch.

  7. Ingresa la plantilla de búsqueda en el campo Plantilla de búsqueda de Elasticsearch.

  8. Ajusta la cantidad de coincidencias con el control deslizante Cantidad de coincidencias.

  9. Haz clic en Guardar.

  10. Ingresa la instrucción.

  11. Haz clic en Enviar.

Comprende tu respuesta

Si la instrucción de tu modelo se fundamenta correctamente en los almacenes de datos de Elasticsearch con Vertex AI Studio o la API, las respuestas del modelo incluirán metadatos con citas y contenido de origen. Si se produce una baja relevancia de la fuente o información incompleta en la respuesta del modelo, es posible que no se proporcionen metadatos y que la respuesta a la instrucción no se base en ellos.

REST

En esta sección, se explica cómo usar la API de Vertex AI para fundamentar las respuestas de tu LLM.

Requisitos previos

Antes de fundamentar las respuestas del LLM con Elasticsearch, debes completar los siguientes pasos:

  1. Activa la API de Vertex AI: Asegúrate de que la API de Vertex AI esté habilitada para tu proyecto de Google Cloud .

  2. Instala la CLI de Google Cloud CLI y accede a ella: Instala e inicializa la herramienta de línea de comandos de gcloud CLI.

  3. Configuración de Elasticsearch: Usa un clúster y un índice de Elasticsearch existentes que desees usar para la fundamentación. Obtén la siguiente información de tu configuración de Elasticsearch:

    • Extremo: Es la URL de tu clúster de Elasticsearch.
    • Nombre del índice: Es el nombre del índice en el que deseas realizar la búsqueda, como my-data-index.
    • Clave de API: Es una clave de API que permite el acceso a tu clúster de Elasticsearch. La clave de API debe comenzar con el prefijo ApiKey.
  4. Crea una plantilla de búsqueda de Elasticsearch: Usa una fuente de datos de Elasticsearch que utilice una plantilla de referencia que devuelva datos de resultados para la fundamentación.

Acceso a la API

Sigue estas instrucciones para fundamentar Gemini con tu fuente de datos de Elasticsearch usando la API de Vertex AI.

Prepara una solicitud de generación fundamentada

Para enviar una instrucción de texto y fundamentarla con Elasticsearch, envía una solicitud POST a la API de Vertex AI. Como mínimo, debes proporcionar el cuerpo de la solicitud. Asegúrate de realizar los siguientes reemplazos:

  • QUERY: Es la instrucción de texto que se usará como base.
  • ELASTIC_SEARCH_ENDPOINT: Es la ruta de acceso absoluta del extremo del recurso de Elasticsearch que se usará.
  • ELASTIC_SEARCH_API_KEY: Es la clave de API del extremo de datos de Elasticsearch.
  • INDEX_NAME: Es el nombre del índice de Elasticsearch que se usa para la fundamentación.
  • SEARCH_TEMPLATE_NAME: Es la plantilla de búsqueda de Elasticsearch que se usa para la fundamentación.
  • NUM_HITS: Es la cantidad de resultados que se muestran desde la fuente de datos de Elasticsearch y que se usan para la fundamentación.

Cuerpo JSON de la solicitud:

    {
      "contents": [
        {
          "role": "user",
          "parts": [
            {
              "text": "QUERY"
            }
          ]
        }
      ],
      "tools": [{
        "retrieval": {
          "externalApi": {
            "api_spec": "ELASTIC_SEARCH",
            "endpoint": "ELASTIC_SEARCH_ENDPOINT",
            "apiAuth": {
              "apiKeyConfig": {
                "apiKeyString": "ApiKey ELASTIC_SEARCH_API_KEY"
              }
            },
            "elasticSearchParams": {
              "index": "INDEX_NAME",
              "searchTemplate": "SEARCH_TEMPLATE_NAME",
              "numHits": "NUM_HITS",
            }
          }
        }
      }]
    }

Para obtener más información sobre otros campos de la API, como las instrucciones del sistema y los chats de varios turnos, consulta la guía para principiantes de la IA generativa.

Envía la solicitud a la API

Puedes guardar el cuerpo de la solicitud en un archivo llamado request.json. Luego, ejecuta la solicitud a la API de POST y realiza los siguientes reemplazos:

  • LOCATION: Es la región para procesar la solicitud. Para obtener más información sobre las ubicaciones disponibles, consulta IA generativa en ubicaciones de Vertex AI.
  • PROJECT_ID: Es el ID de tu proyecto de Google Cloud . Para obtener más información sobre los IDs de proyectos, consulta Crea y administra proyectos.
  • MODEL_ID: Es el ID del modelo multimodal.
  curl -X POST \
      -H "Authorization: Bearer $(gcloud auth print-access-token)" \
      -H "Content-Type: application/json; charset=utf-8" \
      -d @request.json \
  "https://LOCATION-aiplatform.googleapis.com/v1beta1/projects/PROJECT_ID/locations/LOCATION/publishers/google/models/MODEL_ID:generateContent"

Deberías recibir una respuesta JSON similar a la que se muestra a continuación:

  {
    "candidates": [
      {
        "content": {
          "role": "model",
          "parts": [
            {
              "text": "Based on the information ..."
            }
          ]
        },
        "finishReason": "STOP",
        "safetyRatings": [ "..." ],
        "groundingMetadata": {
          "groundingChunks": [
            {
              "retrievedContext": {
                "text": "ipsum lorem ..."
              }
            },
            {...},
            {...},
          ],
          "groundingSupports": [
            {
              "segment": {
                "startIndex": 25,
                "endIndex": 147,
                "text": "ipsum lorem ..."
              },
              "groundingChunkIndices": [1,2],
              "confidenceScores": [0.6626542, 0.82018316],
            },
          ],
        },
      }
    ],
  }

Comprende tu respuesta

La respuesta de ambas APIs incluye el texto generado por el LLM, que se denomina candidato. Si la instrucción de tu modelo se fundamenta correctamente en tu fuente de datos de Elasticsearch, las respuestas incluirán metadatos de fundamentación, que identifican las partes de la respuesta que se derivaron de tus datos de Elasticsearch. Sin embargo, existen varios motivos por los que es posible que no se proporcionen estos metadatos, y la respuesta a la instrucción no se basará en ellos. Entre estos motivos, se incluyen la baja relevancia de la fuente o la información incompleta en la respuesta del modelo.

A continuación, se muestra un desglose de los datos de salida:

  • Rol: Indica el remitente de la respuesta fundamentada. Dado que la respuesta siempre contiene texto fundamentado, el rol siempre es model.
  • Texto: Es la respuesta fundamentada que genera el LLM.
  • Metadatos de fundamentación: Es la información sobre la fuente de fundamentación, que contiene los siguientes elementos:
    • Fragmentos de fundamentación: Es una lista de resultados de tu índice de Elasticsearch que respaldan la respuesta.
    • Fundamentación compatible: Información sobre una afirmación específica dentro de la respuesta que se puede usar para mostrar citas:
    • Segmento: Es la parte de la respuesta del modelo que se fundamenta en un fragmento de fundamentación.
    • Índice de fragmento de fundamentación: Es el índice de los fragmentos de fundamentación en la lista de fragmentos de fundamentación que corresponde a esta afirmación.
    • Puntuaciones de confianza: Es un número del 0 al 1 que indica qué tan fundamentada está la afirmación en el conjunto proporcionado de fragmentos de fundamentación. No está disponible para Gemini 2.5 Pro y Gemini 2.5 Flash ni versiones posteriores.

¿Qué sigue?