Mejora los resultados de la búsqueda con el ajuste de la búsqueda

Un modelo de búsqueda ajustado puede brindarte resultados de mejor calidad que el modelo de búsqueda base.

El ajuste de la búsqueda es especialmente valioso si tienes consultas específicas de la industria o la empresa que los LLMs generales no responden tan bien. Se puede usar para entrenar aún más el modelo de búsqueda.

Limitaciones

El ajuste de la búsqueda solo se puede aplicar a los almacenes de datos no estructurados.

Acerca de los datos de entrenamiento

Para ajustar un modelo de búsqueda, primero debes recopilar datos de entrenamiento.

Los datos de entrenamiento deben contener las preguntas que esperas que hagan tus usuarios finales y fragmentos de texto de entre 250 y 500 palabras que contengan la información pertinente necesaria para responder las preguntas. Una búsqueda puede asociarse con varios fragmentos, siempre y cuando cada uno contenga información que responda a la búsqueda.

Los datos de entrenamiento también deben contener fragmentos de texto que no estén vinculados con búsquedas, pero que sean similares a las respuestas en cuanto a estilo y longitud. Estos resúmenes sin búsquedas asociadas proporcionan negativos aleatorios para ajustar el modelo. Google recomienda que proporciones al menos 10,000 de estos fragmentos.

A continuación, se incluye terminología para describir los datos de entrenamiento que deberás proporcionar:

  • Preguntas de entrenamiento: Son las preguntas que anticipas que harán tus usuarios finales. Asegúrate de enfocarte en las búsquedas con terminología específica de la empresa o el dominio.

    Proporciona al menos 100.

  • Segmentos extractivos: Los fragmentos (por lo general, varios párrafos) deben tomarse textualmente de los documentos del almacén de datos. Todos los documentos juntos en el almacén de datos se conocen como "el corpus".

    Debes proporcionar dos tipos de segmentos extractivos:

    • Son segmentos que contienen información pertinente necesaria para responder las búsquedas de entrenamiento. Son los segmentos que tienen coincidencias positivas con las búsquedas.

    • Son los segmentos que no están asociados con ninguna búsqueda de entrenamiento. Estos segmentos se usan como negativos aleatorios en el ajuste del modelo.

    Una o dos oraciones no son lo suficientemente largas como para ser un segmento extractivo. El segmento debe contener suficiente contexto para el entrenamiento. Por ejemplo, en respuesta a una búsqueda como "¿Quién fundó Google?", un extracto corto como "Larry Page" es insuficiente. Para ver ejemplos de segmentos lo suficientemente largos, consulta la siguiente tabla.

    Proporciona al menos un segmento extractivo por búsqueda y al menos 10,000 segmentos extractivos adicionales.

  • Puntuaciones de relevancia: Las puntuaciones de relevancia son números enteros no negativos que estiman qué tan relevante es el segmento extractivo para la búsqueda. Proporcionas un valor de puntuación para cada par de consulta y segmento extractivo. Una puntuación de 0 significa que el segmento extractivo no es relevante para la búsqueda. Una puntuación mayor que cero indica cierta relevancia. Para una puntuación simple, Google recomienda asignar un 1 a todos los segmentos pertinentes y un 0 a los que no lo son. Como alternativa, si deseas clasificar la relevancia, puedes asignar puntuaciones de relevancia de 0 a 10 (por ejemplo), con 10 para los segmentos más relevantes y 0 para los segmentos que no son relevantes en absoluto.

    Proporciona al menos 100 puntuaciones pertinentes y, de forma opcional, puntuaciones adicionales no pertinentes.

Ejemplos de pares de consultas y segmentos extractivos

En la siguiente tabla, se proporcionan algunos ejemplos de pares de consultas y segmentos extractivos. Estos ejemplos generales se tomaron de Wikipedia. Sin embargo, para realizar un ajuste útil, te recomendamos que proporciones documentos de conjuntos de datos propios que contengan información específica de tu empresa y que no se encuentren fácilmente en la Web.

El último par de esta tabla es un ejemplo de un par con una puntuación de cero, en el que la respuesta no es pertinente para la búsqueda.

Consulta de entrenamiento Segmento extractivo Puntuación
¿Quién fundó Google? Google fue fundado el 4 de septiembre de 1998 por los científicos informáticos estadounidenses Larry Page y Sergey Brin, mientras eran estudiantes de doctorado en la Universidad de Stanford en California.Juntos poseen alrededor del 14% de sus acciones que cotizan en bolsa y controlan el 56% del poder de voto de sus accionistas a través de acciones con derecho a voto superior. La empresa se hizo pública a través de una oferta pública inicial (OPI) en 2004. En 2015, Google se reorganizó como una subsidiaria de propiedad absoluta de Alphabet Inc. Google es la subsidiaria más grande de Alphabet y es una empresa holding de las propiedades y los intereses de Internet de Alphabet. Sundar Pichai fue nombrado director general de Google el 24 de octubre de 2015, en reemplazo de Larry Page, quien se convirtió en el director general de Alphabet. El 3 de diciembre de 2019, Pichai también se convirtió en el CEO de Alphabet. [...] En la lista de las marcas más valiosas, Forbes clasifica a Google en segundo lugar y, en la de Interbrand, en cuarto. 1
¿A dónde se bombea la sangre después de salir del ventrículo derecho? La sangre oxigenada sale de los pulmones a través de las venas pulmonares, que la devuelven a la parte izquierda del corazón, lo que completa el ciclo pulmonar. Luego, esta sangre ingresa en la aurícula izquierda, que la bombea a través de la válvula mitral hacia el ventrículo izquierdo. Desde el ventrículo izquierdo, la sangre pasa por la válvula aórtica hacia la aorta. Luego, la sangre se distribuye por el cuerpo a través de la circulación sistémica antes de regresar a la circulación pulmonar. Arterias Artículo principal: Arteria pulmonar Desde el ventrículo derecho, la sangre se bombea a través de la válvula pulmonar semilunar hacia la arteria pulmonar principal izquierda y derecha (una para cada pulmón), que se ramifican en arterias pulmonares más pequeñas que se extienden por los pulmones. [...] La derivación cardíaca es una conexión no natural entre partes del corazón que provoca un flujo sanguíneo que evita los pulmones. 1
¿Dónde se encuentra el salón de la fama de la bolera? El Salón de la Fama Internacional de Bolos de la World Bowling Writers ( WBW) se fundó en 1993 y se encuentra en el Museo y Salón de la Fama Internacional de Bolos , en el Campus Internacional de Bolos en Arlington, Texas. Historia El International Bowling Museum and Hall of Fame se ubicó en 11 Stadium Plaza, St. Louis, Missouri, EE.UU., y compartió el mismo edificio con el St. Louis Cardinals Hall of Fame Museum hasta el 8 de noviembre de 2008. Se mudó a Arlington y volvió a abrir a principios de 2010. En 2012, la WBW se fusionó con la International Bowling Media Association. Después de la fusión, los miembros del Salón de la Fama de WBW pasaron a formar parte del Salón de la Fama de Luby de la IBMA.][...] Se eligen al hombre y a la mujer que reciben más votos. 1
¿Por qué el cielo es azul? Un programa "Hola, mundo" suele ser un programa informático simple que genera (o muestra) en la pantalla (a menudo, la consola) un mensaje similar a "Hola, mundo" mientras ignora cualquier entrada del usuario. Este programa, que es un pequeño fragmento de código en la mayoría de los lenguajes de programación de uso general, se usa para ilustrar la sintaxis básica de un lenguaje. Un programa "Hello, World!" suele ser el primero que escribe un estudiante de un nuevo lenguaje de programación, pero también se puede usar para verificar que el software de la computadora destinado a compilar o ejecutar el código fuente esté instalado correctamente y que su operador comprenda cómo usarlo. […] La versión en lenguaje C fue precedida por la propia Introducción tutorial al lenguaje B de Kernighan en 1972, donde se encuentra la primera versión conocida del programa en un ejemplo utilizado para ilustrar variables externas. 0

Acerca de las pruebas

Después del entrenamiento, se prueba la búsqueda ajustada para determinar si el ajuste mejoró los resultados. Puedes proporcionar de forma explícita las búsquedas que deseas probar. Si no proporcionas búsquedas de prueba, Vertex AI Search usará el 20% de las búsquedas de entrenamiento como búsquedas de prueba.

Archivos de entrenamiento

Los datos de entrenamiento deben subirse en tres (o cuatro, de forma opcional) archivos específicos:

Los tres archivos de entrenamiento (archivo de corpus, archivo de consulta y archivo de etiquetas de entrenamiento) y el archivo de etiquetas de prueba (opcional) deben estar en Cloud Storage. Las rutas de acceso de los archivos se definen mediante campos en la llamada a trainCustomMethod.

Archivo de corpus

El archivo de corpus contiene segmentos extractivos, es decir, segmentos que contienen información para responder las preguntas del archivo de preguntas y muchos segmentos adicionales que se usarán como negativos aleatorios cuando se ajuste el modelo. Debes tener al menos 100 segmentos que contengan respuestas a las preguntas. Las preguntas pueden responderse con varios segmentos. También debes tener al menos 10,000 segmentos aleatorios.

Si los documentos de tu almacén de datos contienen menos de 500 palabras, puedes usar documentos completos como segmentos. De lo contrario, crea de forma programática segmentos aleatorios de entre 250 y 500 palabras a partir de los documentos de tu almacén de datos y agrégalos al archivo de corpus.

El archivo de corpus es un archivo JSONL (líneas JSON) en el que cada línea tiene los campos _id y text con valores de cadena. Por ejemplo:

  {"_id": "doc1", "text": "Google was founded on September 4, 1998, by American computer scientists Larry Page and Sergey Brin while they were PhD students at Stanford University in California. Together they own about 14% of its publicly listed shares and control 56% of its stockholder voting power through super-voting stock. The company went public via an initial public offering (IPO) in 2004. In 2015, Google was reorganized as a wholly owned subsidiary of Alphabet Inc. Google is Alphabet's largest subsidiary and is a holding company for Alphabet's internet properties and interests. Sundar Pichai was appointed CEO of Google on October 24, 2015, replacing Larry Page, who became the CEO of Alphabet. On December 3, 2019, Pichai also became the CEO of Alphabet. [...] On the list of most valuable brands, Google is 105 ranked second by Forbes and fourth by Interbrand."}
  {"_id": "doc2", "text": "Oxygenated blood leaves the lungs through pulmonary veins, which return it to the left part of the heart, completing the pulmonary cycle. This blood then enters the left atrium, which pumps it through the mitral valve into the left ventricle. From the left ventricle, the blood passes through the aortic valve to the aorta. The blood is then distributed to the body through the systemic circulation before returning again to the pulmonary circulation. Arteries Main article: Pulmonary artery From the right ventricle, blood is pumped through the semilunar pulmonary valve into the left and right main pulmonary artery (one for each lung), which branch into smaller pulmonary arteries that spread throughout the lungs. [...] Cardiac shunt is an unnatural connection between parts of the heart that leads to blood flow that bypasses the lungs."}
  {"_id": "doc3", "text": "The World Bowling Writers ( WBW ) International Bowling Hall of Fame was established in 1993 and is located in the International Bowling Museum and Hall of Fame , on the International Bowling Campus in Arlington , Texas. History The International Bowling Museum and Hall of Fame was located at 11 Stadium Plaza, St. Louis, Missouri, USA, and shared the same building with the St. Louis Cardinals Hall of Fame Museum, until November 8, 2008. It moved to Arlington and reopened in early 2010. In 2012, the WBW was merged with the International Bowling Media Association. After the merger, the WBW Hall of Fame inductees became part of the IBMA Luby Hall of Fame.  officers of the World Bowling Writers, which formed the Hall's Board.][...] The man and woman who receive the most votes are elected."}
  {"_id": "doc4", "text": "A \"Hello, World!\" program is generally a simple computer program which outputs (or displays) to the screen (often the console) a message similar to "Hello, World!" while ignoring any user input. A small piece of code in most general-purpose programming languages, this program is used to illustrate a language's basic syntax. A "Hello, World!" program is often the first written by a student of a new programming language, but such a program can also be used as a check to ensure that the computer software intended to compile or run source code is correctly installed, and that its operator understands how to use it.  [...] The C-language version was preceded by Kernighan's own 1972 A Tutorial Introduction to the Language B, where the first known version of the program is found in an example used to illustrate external variables."}

El tamaño máximo del archivo es de 500,000 líneas.

Archivo de consulta

El archivo de consulta contiene las consultas de ejemplo que se usarán para ajustar el modelo. Cada búsqueda debe tener uno o más segmentos extractivos correspondientes en el archivo del corpus. Debes proporcionar al menos 100 búsquedas de coincidencias positivas. También puedes proporcionar búsquedas no pertinentes, es decir, búsquedas que corresponden a segmentos extractivos con una puntuación de relevancia de cero.

El archivo de consulta está en formato JSONL y tiene los mismos campos que el archivo de corpus.

Por ejemplo:

  {"_id": "query1", "text": "who founded Google?"}
  {"_id": "query2", "text": "where is blood pumped after it leaves the right ventricle?"}
  {"_id": "query3", "text": "where is the bowling hall of fame located?"}
  {"_id": "query4", "text": "why is the sky blue?"}

La cantidad máxima de búsquedas permitidas en el archivo es de 40,000.

Etiquetas de entrenamiento

El archivo de etiquetas de entrenamiento conecta las búsquedas con los segmentos extractivos y califica cada par de búsqueda y segmento.

Si el archivo de etiquetas de prueba no está presente, se reservará el 20% de las búsquedas del archivo de etiquetas de entrenamiento para evaluar el modelo ajustado después del entrenamiento.

El archivo contiene el ID de una búsqueda y el ID de su segmento extractivo coincidente (o no coincidente), así como una puntuación de la relevancia del segmento para la búsqueda. Debe haber al menos una línea por búsqueda. Si una búsqueda se responde con dos segmentos, habrá dos líneas para esa búsqueda. Score es un valor de número entero no negativo. Cualquier puntuación mayor que cero indica que el documento está relacionado con la búsqueda. Los números más grandes indican un nivel de relevancia mayor. Si se omite la puntuación, el valor predeterminado es 1.

El archivo de etiquetas de entrenamiento es un archivo TSV (valores separados por tabulaciones) con un encabezado. El archivo debe tener las columnas query-id, corpus-id y score. query-id es una cadena que coincide con la clave _id del archivo de consulta, y corpus-id es una cadena que coincide con _id en el archivo de corpus.

Por ejemplo:

query-id    corpus-id   score
query1  doc1    1
query2  doc2    1
query3  doc3    1
query3  doc9    1
query4  doc4    0

El archivo de etiquetas de entrenamiento debe incluir al menos 100 IDs de búsqueda únicos. La cantidad de IDs de consulta en el archivo de etiquetas de entrenamiento combinada con la cantidad de consultas en el archivo de etiquetas de prueba debe ser inferior a 500,000.

Etiquetas de prueba

Al igual que el archivo de etiquetas de entrenamiento, este archivo opcional contiene los IDs de la consulta y el segmento extractivo, y las puntuaciones de relevancia. Contiene menos búsquedas y diferentes que en el archivo de etiquetas de entrenamiento. Si están presentes, los pares de consultas y segmentos extractivos del archivo se usan para evaluar el ajuste. Si el archivo de etiquetas de prueba no está presente, se usan los pares de consultas y segmentos extractivos del archivo de etiquetas de entrenamiento para la evaluación.

Este archivo tiene el mismo formato que el archivo de etiquetas de entrenamiento.

Por ejemplo:

query-id    corpus-id   score
query200    doc200  1
query201    doc201  1
query202    doc202  1

Si bien el archivo de etiquetas de prueba es opcional, si lo proporcionas, debe contener al menos tres IDs de consulta únicos.

Antes de comenzar

Activa Funciones de la edición Enterprise para la app.

Para ajustar un modelo de búsqueda con tus propios datos de entrenamiento, sigue estos pasos.

Console

Para usar la consola de Google Cloud para ajustar un modelo, sigue estos pasos:

  1. Prepara tus datos de entrenamiento y, de manera opcional, tus archivos de datos de prueba. Usa los formatos que se describen en Archivos de entrenamiento.

  2. Sube los archivos a Cloud Storage.

  3. En la consola de Google Cloud , ve a la página AI Applications.

    Aplicaciones basadas en IA

  4. En la página Apps, haz clic en el nombre de la app para la que deseas un modelo entrenado.

  5. En el menú de navegación, haz clic en Configuraciones.

  6. Haz clic en la pestaña Ajuste.

  7. Haz clic en Ajustar el modelo de base.

  8. Especifica los archivos de corpus, consulta, entrenamiento y, de manera opcional, prueba que preparaste en los pasos 1 y 2 anteriores.

  9. Haz clic en Iniciar ajuste.

  10. Actualiza la página para ver el estado en la tabla Actividad de ajuste reciente de la pestaña Ajuste.

REST

Para usar el método trainCustomModel para ajustar un almacén de datos, sigue estos pasos:

  1. Prepara tus archivos de datos de entrenamiento (y, de manera opcional, tus datos de prueba). Usa los formatos que se describen en Archivos de entrenamiento.

  2. Coloca los archivos en un bucket de Cloud Storage.

  3. Ejecuta el siguiente comando curl para subir los archivos del bucket de Cloud Storage a Vertex AI Search:

    curl -X POST \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json" \
    "https://discoveryengine.googleapis.com/v1/projects/PROJECT_ID/locations/global/collections/default_collection/dataStores/DATA_STORE_ID:trainCustomModel" \
    -d '{
    "gcsTrainingInput": {
     "corpusDataPath": "CORPUS_JSONL_GCS_PATH",
     "queryDataPath": "QUERY_JSONL_GCS_PATH",
     "trainDataPath": "TRAIN_TSV_GCS_PATH",
     "testDataPath": "TEST_TSV_GCS_PATH"
    },
    "modelType": "search-tuning"
    }'
    

    Reemplaza lo siguiente:

    • PROJECT_ID: Es el ID de tu proyecto de Google Cloud .

    • DATA_STORE_ID: Es el ID del almacén de datos que deseas ajustar.

    • CORPUS_JSONL_GCS_PATH: Es la ruta de acceso del archivo JSONL del corpus en Cloud Storage, por ejemplo, gs://my-bucket/corpus.jsonl.

    • QUERY_JSONL_GCS_PATH: Es la ruta de acceso del archivo JSONL de consultas en Cloud Storage, por ejemplo, gs://my-bucket/query.jsonl.

    • TRAIN_TSV_GCS_PATH: Es la ruta de acceso al archivo TSV de etiquetas de entrenamiento en Cloud Storage, por ejemplo, gs://my-bucket/train.tsv.

    • TEST_TSV_GCS_PATH: Es un campo opcional para especificar la ruta de acceso de Cloud Storage a tu archivo TSV de etiquetas de prueba, por ejemplo, gs://my-bucket/test.tsv. Si no tienes un archivo de etiquetas de prueba, quita el campo testDataPath o déjalo vacío.

    Para obtener información general sobre este método, consulta trainCustomModel.

    El ajuste comienza automáticamente después de que se suben los archivos de datos.

    Haz clic para ver un ejemplo de comando y respuesta de curl.

    curl -X POST
    -H "Authorization: Bearer $(gcloud auth print-access-token)"
    -H "Content-Type: application/json"
    "https://discoveryengine.googleapis.com/v1/projects/12345/locations/global/collections/default_collection/dataStores/my-data-store_4321:trainCustomModel"
    -d '{
    "dataStore":
    "projects/12345/locations/global/collections/default_collection/dataStores/my-data-store_4321",
    "gcsTrainingInput": {
    "corpusDataPath": "gs://my-bucket/corpus.jsonl",
    "queryDataPath": "gs://my-bucket/query.jsonl",
    "trainDataPath": "gs://my-bucket/train.tsv"
    },
    "modelType": "search-tuning"
    }
    {
      "name": "projects/12345/locations/global/collections/default_collection/dataStores/my-data-store_4321/operations/train-custom-model-6071430366161939774",
      "metadata": {
        "@type": "type.googleapis.com/google.cloud.discoveryengine.v1.TrainCustomModelMetadata"
      },
      "response": {
        "@type": "type.googleapis.com/google.cloud.discoveryengine.v1.TrainCustomModelResponse",
        "modelStatus": "in-progress"
      }
    }
  4. Toma nota del valor de name que muestra el método trainCustomModel y sigue las instrucciones en Cómo obtener detalles sobre una operación de larga duración para ver cuándo se completa la operación de ajuste de la búsqueda.

Python

Para obtener más información, consulta la documentación de referencia de la API de AI Applications Python.

Para autenticarte en AI Applications, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura la autenticación para un entorno de desarrollo local.


from google.api_core.client_options import ClientOptions
from google.api_core.operation import Operation
from google.cloud import discoveryengine

# TODO(developer): Uncomment these variables before running the sample.
# project_id = "YOUR_PROJECT_ID"
# location = "YOUR_LOCATION" # Values: "global"
# data_store_id = "YOUR_DATA_STORE_ID"
# corpus_data_path = "gs://my-bucket/corpus.jsonl"
# query_data_path = "gs://my-bucket/query.jsonl"
# train_data_path = "gs://my-bucket/train.tsv"
# test_data_path = "gs://my-bucket/test.tsv"


def train_custom_model_sample(
    project_id: str,
    location: str,
    data_store_id: str,
    corpus_data_path: str,
    query_data_path: str,
    train_data_path: str,
    test_data_path: str,
) -> Operation:
    #  For more information, refer to:
    # https://cloud.google.com/generative-ai-app-builder/docs/locations#specify_a_multi-region_for_your_data_store
    client_options = (
        ClientOptions(api_endpoint=f"{location}-discoveryengine.googleapis.com")
        if location != "global"
        else None
    )
    # Create a client
    client = discoveryengine.SearchTuningServiceClient(client_options=client_options)

    # The full resource name of the data store
    data_store = f"projects/{project_id}/locations/{location}/collections/default_collection/dataStores/{data_store_id}"

    # Make the request
    operation = client.train_custom_model(
        request=discoveryengine.TrainCustomModelRequest(
            gcs_training_input=discoveryengine.TrainCustomModelRequest.GcsTrainingInput(
                corpus_data_path=corpus_data_path,
                query_data_path=query_data_path,
                train_data_path=train_data_path,
                test_data_path=test_data_path,
            ),
            data_store=data_store,
            model_type="search-tuning",
        )
    )

    # Optional: Wait for training to complete
    # print(f"Waiting for operation to complete: {operation.operation.name}")
    # response = operation.result()

    # After the operation is complete,
    # get information from operation metadata
    # metadata = discoveryengine.TrainCustomModelMetadata(operation.metadata)

    # Handle the response
    # print(response)
    # print(metadata)
    print(operation)

    return operation

Probar la búsqueda optimizada y usarla para búsquedas individuales

Una vez que se complete el ajuste, puedes probarlo comparando los resultados de las consultas con el modelo ajustado y los resultados de las mismas consultas con el modelo base.

Console

Para usar la consola de Google Cloud para obtener una vista previa del comportamiento de un modelo ajustado, sigue estos pasos:

  1. Ve a la pestaña Ajuste:

    1. En la consola de Google Cloud , ve a la página AI Applications.

      Aplicaciones basadas en IA

    2. Haz clic en el nombre de la app de la que deseas obtener una vista previa.

    3. Haz clic en Configuraciones.

    4. Haz clic en la pestaña Ajuste.

  2. Haz clic en Modelo ajustado y usa el panel de vista previa de la derecha para hacer consultas que usen el modelo ajustado.

  3. Haz clic en Modelo base y usa el panel de vista previa de la derecha para hacer consultas con el modelo original.

  4. Compara la calidad de los resultados.

REST

Para evaluar el efecto del ajuste, puedes realizar consultas con el campo enableSearchAdaptor establecido en true y, luego, en false, y comparar los resultados. Si se configura el campo enableSearchAdaptor como true, se indica que se usa la versión optimizada de la búsqueda para esa consulta.

Para realizar búsquedas que usen el modelo ajustado, haz lo siguiente:

  1. En la llamada de método de consulta, establece el campo enableSearchAdaptor en el campo customFineTuningSpec como true.

    Por ejemplo:

    curl -X POST -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json" \
    "https://discoveryengine.googleapis.com/v1/projects/PROJECT_ID/locations/global/collections/default_collection/engines/APP_ID/servingConfigs/default_search:search" \
    -d '{
    "query": "QUERY",
    "customFineTuningSpec": { "enableSearchAdaptor": true }
    }'
    

    Reemplaza lo siguiente:

    • PROJECT_ID: Es el ID de tu proyecto de Google Cloud .
    • APP_ID: Es el ID de la app que deseas consultar.

Para obtener información detallada sobre las búsquedas, consulta Cómo obtener resultados de la búsqueda y el método servingConfigs.search.

Python

Para obtener más información, consulta la documentación de referencia de la API de AI Applications Python.

Para autenticarte en AI Applications, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura la autenticación para un entorno de desarrollo local.

from google.api_core.client_options import ClientOptions
from google.cloud import discoveryengine_v1 as discoveryengine

# TODO(developer): Uncomment these variables before running the sample.
# project_id = "YOUR_PROJECT_ID"
# location = "YOUR_LOCATION"          # Values: "global", "us", "eu"
# engine_id = "YOUR_APP_ID"
# search_query = "YOUR_SEARCH_QUERY"


def search_sample(
    project_id: str,
    location: str,
    engine_id: str,
    search_query: str,
) -> discoveryengine.services.search_service.pagers.SearchPager:
    #  For more information, refer to:
    # https://cloud.google.com/generative-ai-app-builder/docs/locations#specify_a_multi-region_for_your_data_store
    client_options = (
        ClientOptions(api_endpoint=f"{location}-discoveryengine.googleapis.com")
        if location != "global"
        else None
    )

    # Create a client
    client = discoveryengine.SearchServiceClient(client_options=client_options)

    # The full resource name of the search app serving config
    serving_config = f"projects/{project_id}/locations/{location}/collections/default_collection/engines/{engine_id}/servingConfigs/default_config"

    # Optional - only supported for unstructured data: Configuration options for search.
    # Refer to the `ContentSearchSpec` reference for all supported fields:
    # https://cloud.google.com/python/docs/reference/discoveryengine/latest/google.cloud.discoveryengine_v1.types.SearchRequest.ContentSearchSpec
    content_search_spec = discoveryengine.SearchRequest.ContentSearchSpec(
        # For information about snippets, refer to:
        # https://cloud.google.com/generative-ai-app-builder/docs/snippets
        snippet_spec=discoveryengine.SearchRequest.ContentSearchSpec.SnippetSpec(
            return_snippet=True
        ),
        # For information about search summaries, refer to:
        # https://cloud.google.com/generative-ai-app-builder/docs/get-search-summaries
        summary_spec=discoveryengine.SearchRequest.ContentSearchSpec.SummarySpec(
            summary_result_count=5,
            include_citations=True,
            ignore_adversarial_query=True,
            ignore_non_summary_seeking_query=True,
            model_prompt_spec=discoveryengine.SearchRequest.ContentSearchSpec.SummarySpec.ModelPromptSpec(
                preamble="YOUR_CUSTOM_PROMPT"
            ),
            model_spec=discoveryengine.SearchRequest.ContentSearchSpec.SummarySpec.ModelSpec(
                version="stable",
            ),
        ),
    )

    # Refer to the `SearchRequest` reference for all supported fields:
    # https://cloud.google.com/python/docs/reference/discoveryengine/latest/google.cloud.discoveryengine_v1.types.SearchRequest
    request = discoveryengine.SearchRequest(
        serving_config=serving_config,
        query=search_query,
        page_size=10,
        content_search_spec=content_search_spec,
        query_expansion_spec=discoveryengine.SearchRequest.QueryExpansionSpec(
            condition=discoveryengine.SearchRequest.QueryExpansionSpec.Condition.AUTO,
        ),
        spell_correction_spec=discoveryengine.SearchRequest.SpellCorrectionSpec(
            mode=discoveryengine.SearchRequest.SpellCorrectionSpec.Mode.AUTO
        ),
        # Optional: Use fine-tuned model for this request
        # custom_fine_tuning_spec=discoveryengine.CustomFineTuningSpec(
        #     enable_search_adaptor=True
        # ),
    )

    page_result = client.search(request)

    # Handle the response
    for response in page_result:
        print(response)

    return page_result

Cómo activar la búsqueda optimizada

Después de probar la búsqueda ajustada y decidir que quieres usarla para todas las búsquedas, puedes establecerla como el modelo de búsqueda predeterminado.

Console

Para establecer el modelo ajustado como predeterminado y aplicarlo a la página principal de la vista previa, el widget y las llamadas a la API, sigue estos pasos:

  1. Ve a la pestaña Ajuste:

    1. En la consola de Google Cloud , ve a la página AI Applications.

      Aplicaciones basadas en IA

    2. Haz clic en el nombre de la app.

    3. Haz clic en Configuraciones.

    4. Haz clic en la pestaña Ajuste.

  2. Haz clic en Modelo ajustado.

  3. Haz clic en Publicar.

REST

Cuando configuras el modelo ajustado como el modelo predeterminado, no es necesario que especifiques el campo customFineTuningSpec en la búsqueda, como en el procedimiento anterior.

Para usar la versión optimizada de la búsqueda de forma predeterminada para todas las búsquedas, sigue estos pasos:

  1. Para establecer la búsqueda ajustada como el modelo predeterminado, ejecuta el siguiente comando curl:

    curl -X PATCH \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json" \
    -H "X-Goog-User-Project: PROJECT_ID" \
    "https://discoveryengine.googleapis.com/v1/projects/PROJECT_ID/locations/global/collections/default_collection/engines/APP_ID/servingConfigs/default_search?updateMask=customFineTuningSpec.enableSearchAdaptor" \
    -d '{
    "customFineTuningSpec": {
     "enableSearchAdaptor": true
    }
    }'
    

    Para obtener información general sobre este método, consulta servingConfigs.patch.

Python

Para obtener más información, consulta la documentación de referencia de la API de AI Applications Python.

Para autenticarte en AI Applications, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura la autenticación para un entorno de desarrollo local.


from google.api_core.client_options import ClientOptions
from google.cloud import discoveryengine_v1alpha as discoveryengine

# TODO(developer): Uncomment these variables before running the sample.
# project_id = "YOUR_PROJECT_ID"
# location = "YOUR_LOCATION" # Values: "global"
# engine_id = "YOUR_DATA_STORE_ID"


def update_serving_config_sample(
    project_id: str,
    location: str,
    engine_id: str,
) -> discoveryengine.ServingConfig:
    #  For more information, refer to:
    # https://cloud.google.com/generative-ai-app-builder/docs/locations#specify_a_multi-region_for_your_data_store
    client_options = (
        ClientOptions(api_endpoint=f"{location}-discoveryengine.googleapis.com")
        if location != "global"
        else None
    )
    # Create a client
    client = discoveryengine.ServingConfigServiceClient(client_options=client_options)

    # The full resource name of the serving config
    serving_config_name = f"projects/{project_id}/locations/{location}/collections/default_collection/engines/{engine_id}/servingConfigs/default_search"

    update_mask = "customFineTuningSpec.enableSearchAdaptor"

    serving_config = client.update_serving_config(
        request=discoveryengine.UpdateServingConfigRequest(
            serving_config=discoveryengine.ServingConfig(
                name=serving_config_name,
                custom_fine_tuning_spec=discoveryengine.CustomFineTuningSpec(
                    enable_search_adaptor=True  # Switch to `False` to disable tuned model
                ),
            ),
            update_mask=update_mask,
        )
    )

    # Handle the response
    print(serving_config)

    return serving_config

Cómo desactivar la búsqueda optimizada

Si ya no quieres usar la versión optimizada de la búsqueda (por ejemplo, si los resultados no son mejores o son peores que antes de la optimización), puedes inhabilitar la búsqueda optimizada.

Console

Para volver a usar el modelo base como modelo predeterminado, sigue estos pasos:

  1. Ve a la pestaña Ajuste:

    1. En la consola de Google Cloud , ve a la página AI Applications.

      Aplicaciones basadas en IA

    2. Haz clic en el nombre de la app.

    3. Haz clic en Configuraciones.

    4. Haz clic en la pestaña Ajuste.

  2. Haz clic en Modelo base.

  3. Haz clic en Publicar.

REST

Para dejar de usar el modelo ajustado, ejecuta una llamada de curl similar a la anterior, pero establece enableSearchAdaptor en false:

  1. Ejecuta el siguiente comando de curl:

    curl -X PATCH \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json" \
    -H "X-Goog-User-Project: PROJECT_ID" \
    "https://discoveryengine.googleapis.com/v1/projects/PROJECT_ID/locations/global/collections/default_collection/engines/APP_ID/servingConfigs/default_search?updateMask=customFineTuningSpec.enableSearchAdaptor" \
    -d '{
    "customFineTuningSpec": {
     "enableSearchAdaptor": false
    }
    }'
    

    Para obtener información general sobre este método, consulta servingConfigs.patch.

Python

Para obtener más información, consulta la documentación de referencia de la API de AI Applications Python.

Para autenticarte en AI Applications, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura la autenticación para un entorno de desarrollo local.


from google.api_core.client_options import ClientOptions
from google.cloud import discoveryengine_v1alpha as discoveryengine

# TODO(developer): Uncomment these variables before running the sample.
# project_id = "YOUR_PROJECT_ID"
# location = "YOUR_LOCATION" # Values: "global"
# engine_id = "YOUR_DATA_STORE_ID"


def update_serving_config_sample(
    project_id: str,
    location: str,
    engine_id: str,
) -> discoveryengine.ServingConfig:
    #  For more information, refer to:
    # https://cloud.google.com/generative-ai-app-builder/docs/locations#specify_a_multi-region_for_your_data_store
    client_options = (
        ClientOptions(api_endpoint=f"{location}-discoveryengine.googleapis.com")
        if location != "global"
        else None
    )
    # Create a client
    client = discoveryengine.ServingConfigServiceClient(client_options=client_options)

    # The full resource name of the serving config
    serving_config_name = f"projects/{project_id}/locations/{location}/collections/default_collection/engines/{engine_id}/servingConfigs/default_search"

    update_mask = "customFineTuningSpec.enableSearchAdaptor"

    serving_config = client.update_serving_config(
        request=discoveryengine.UpdateServingConfigRequest(
            serving_config=discoveryengine.ServingConfig(
                name=serving_config_name,
                custom_fine_tuning_spec=discoveryengine.CustomFineTuningSpec(
                    enable_search_adaptor=True  # Switch to `False` to disable tuned model
                ),
            ),
            update_mask=update_mask,
        )
    )

    # Handle the response
    print(serving_config)

    return serving_config

¿Qué sigue?

  • Para comprender el impacto del ajuste de la búsqueda en la calidad de la búsqueda, evalúa la calidad de la búsqueda. Para obtener más información, consulta Cómo evaluar la calidad de la búsqueda.