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 búsqueda es particularmente valioso si tienes búsquedas específicas de la industria o la empresa que los LLM generales abordan menos 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.

Información 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 consultas que esperas que hagan tus usuarios finales y fragmentos de texto de entre 250 y 500 palabras que contengan información relevante para responder las consultas. Una consulta se puede asociar con varios fragmentos, siempre que cada fragmento contenga información que responda a la consulta.

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

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

  • Consultas de entrenamiento: Son las consultas que crees que tus usuarios finales harán. Asegúrate de enfocarte en las consultas con terminología específica del dominio o la empresa.

    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 denominan “corpus”.

    Debes proporcionar dos tipos de segmentos extractivos:

    • Segmentos que contienen información relevante necesaria para responder las consultas de entrenamiento. Estos son segmentos que tienen coincidencias positivas con las consultas.

    • Son segmentos que no están asociados con ninguna consulta 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 consulta como "quién fundó Google", un extracto breve como "Larry Page" no es suficiente. Para ver ejemplos de segmentos lo suficientemente largos, consulta la siguiente tabla de ejemplos.

    Proporciona al menos un segmento extractivo por consulta y al menos 10,000 segmentos extractivos adicionales.

  • Puntuaciones de relevancia: Las puntuaciones de relevancia son números enteros no negativos que estiman cuán relevante es el segmento extractivo para la consulta. 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 superior a cero indica cierta relevancia. Para la puntuación simple, Google recomienda asignar 1 a todos los segmentos relevantes y 0 a los no relevantes. Como alternativa, si quieres 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 relevantes y, de forma opcional, puntuaciones no relevantes adicionales.

Ejemplos de pares de segmentos de consulta y extractivos

En la siguiente tabla, se proporcionan algunos ejemplos de pares de segmentos de consulta y extracción. Estos ejemplos generales se tomaron de Wikipedia. Sin embargo, para realizar una optimización útil, te recomendamos que proporciones documentos de conjuntos de datos propietarios que contengan información específica de tu empresa y que no se encuentren con facilidad en la Web.

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

Consulta de capacitación Segmento extractivo Puntuación
¿Quién fundó Google? Google fue fundada 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.En conjunto, poseen alrededor del 14% de las acciones que cotizan en bolsa y controlan el 56% del poder de voto de los accionistas a través de acciones con derecho a voto superior. La compañía 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 total de Alphabet Inc. Google es la subsidiaria más grande de Alphabet y es una sociedad de cartera para 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 director general de Alphabet. […] En la lista de las marcas más valiosas, Google ocupa el segundo lugar según Forbes y el cuarto según Interbrand. 1
¿A dónde se bombea la sangre después de que sale 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 y completan el ciclo pulmonar. Luego, esta sangre entra al atrio izquierdo, que la bombea a través de la válvula mitral al ventrículo izquierdo. Desde el ventrículo izquierdo, la sangre pasa a través de la válvula aórtica hacia la aorta. Luego, la sangre se distribuye al cuerpo a través de la circulación sistémica antes de volver 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 ramifica en arterias pulmonares más pequeñas que se extienden por todo el pulmón. [...] El cortocircuito cardíaco es una conexión poco natural entre partes del corazón que genera un flujo sanguíneo que pasa por alto los pulmones. 1
¿dónde se encuentra el Salón de la Fama del Bolo? El Salón Internacional de la Fama de Bolos de la World Bowling Writers ( WBW) se estableció en 1993 y se encuentra en el Museo Internacional de Bolos y el Salón de la Fama , en el International Bowling Campus de Arlington, Texas. Historia: El International Bowling Museum and Hall of Fame se encontraba en 11 Stadium Plaza, St. Louis, Missouri, EE.UU., y compartía el mismo edificio con el St. Louis Cardinals Hall of Fame Museum hasta el 8 de noviembre de 2008. Se mudó a Arlington y reabrió 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 la WBW se convirtieron en parte del Salón de la Fama de Luby de la IBMA. Los oficiales de World Bowling Writers, que formaron la Junta del Salón, [...]. Se eligen a la mujer y al hombre que reciben la mayor cantidad de votos. 1
¿Por qué el cielo es azul? Por lo general, un programa "Hello, World!" es un programa informático simple que muestra (o imprime) en la pantalla (a menudo, la consola) un mensaje similar a "Hello, World!" mientras ignora cualquier entrada del usuario. Es un pequeño fragmento de código en la mayoría de los lenguajes de programación de propósito general, y se usa para ilustrar la sintaxis básica de un lenguaje. A menudo, un programa "Hello, World!" es el primero que escribe un estudiante de un lenguaje de programación nuevo, pero también se puede usar como una verificación para garantizar 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. […] A la versión en lenguaje C la antecedió A Tutorial Introduction to the Language B de Kernighan de 1972, en la que se encuentra la primera versión conocida del programa en un ejemplo que se usa para ilustrar las variables externas. 0

Información 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 consultas que deseas probar. Si no proporcionas consultas de prueba, Vertex AI Search usa el 20% de las consultas de entrenamiento como consultas de prueba.

Archivos de entrenamiento

Los datos de entrenamiento deben subirse en tres (opcionalmente cuatro) 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 del corpus

El archivo del corpus contiene segmentos extractivos: segmentos que contienen información para responder las consultas del archivo de consulta 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 consultas. Las consultas se pueden responder 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 segmentos aleatorios de 250 a 500 palabras de los documentos en tu almacén de datos y agrégalos al archivo del corpus.

El archivo del 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 consulta debe tener uno o más segmentos extractivos correspondientes en el archivo del corpus. Debes proporcionar al menos 100 consultas de concordancia positiva. También puedes proporcionar consultas no relevantes, que son aquellas 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 consultas permitidas en el archivo es de 40,000.

Etiquetas de entrenamiento

El archivo de etiquetas de entrenamiento conecta las consultas con los segmentos extractivos y asigna una puntuación a cada par de consulta y segmento.

Si no está presente el archivo de etiquetas de prueba, el 20% de las consultas en el archivo de etiquetas de entrenamiento se reservan para evaluar el modelo ajustado después del entrenamiento.

El archivo contiene el ID de una consulta y el ID de su segmento extractivo coincidente (o no coincidente) y una puntuación para la relevancia del segmento para la consulta. Debe haber al menos una línea por consulta. Si una consulta se responde con dos segmentos, entonces hay dos líneas para esa consulta. Score es un valor de número entero no negativo. Cualquier puntuación mayor que cero indica que el documento está relacionado con la consulta. 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 consulta ú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, así como las puntuaciones de relevancia. Contiene menos consultas y diferentes que en el archivo de etiquetas de entrenamiento. Si están presentes, los pares de segmentos de consulta y extracción en el archivo se usan para evaluar el ajuste. Si no está presente el archivo de etiquetas de prueba, se usan los pares de segmentos de consulta y extracción 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

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

Antes de comenzar

Activa las 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 y 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 Agent Builder.

    Agent Builder

  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, de 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 en la pestaña Ajuste.

REST

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

  1. Prepara los archivos de tus 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: El ID del 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 consulta 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 para 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 en blanco.

    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. Anota el valor name que muestra el método trainCustomModel y sigue las instrucciones que se indican en Obtén detalles sobre una operación de larga duración para ver cuándo se completa la operación de optimización de la búsqueda.

Python

Para obtener más información, consulta la documentación de referencia de la API de Python del compilador de agentes de Vertex AI.

Para autenticarte en Vertex AI Agent Builder, 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

Prueba la búsqueda optimizada y úsala 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 de base.

Console

Para usar la consola de Google Cloud y 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 Agent Builder.

      Agent Builder

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

    3. Haz clic en Parámetros de configuración.

    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 realizar consultas que usen el modelo ajustado.

  3. Haz clic en Modelo de base y usa el panel de vista previa de la derecha para realizar 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 configurado en true y, luego, en false, y comparar los resultados. Configurar el campo enableSearchAdaptor en true indica que se usa la versión ajustada de la búsqueda para esa consulta.

Para realizar consultas de búsqueda 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: El ID del proyecto de Google Cloud.
    • APP_ID: 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 Python del compilador de agentes de Vertex AI.

Para autenticarte en Vertex AI Agent Builder, 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 optimizada y decidir que quieres usarla para todas las búsquedas, puedes establecerla como el modelo de búsqueda predeterminado.

Console

Para que el modelo ajustado sea el modelo predeterminado y aplicarlo a la página de vista previa principal, 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 Agent Builder.

      Agent Builder

    2. Haz clic en el nombre de la app.

    3. Haz clic en Parámetros de configuración.

    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 necesitas especificar 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 optimizada como el modelo predeterminado, 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": 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 Python del compilador de agentes de Vertex AI.

Para autenticarte en Vertex AI Agent Builder, 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 deseas usar la versión optimizada de la búsqueda (por ejemplo, si los resultados no son mejores o 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 Agent Builder.

      Agent Builder

    2. Haz clic en el nombre de la app.

    3. Haz clic en Parámetros de configuración.

    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 a 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 Python del compilador de agentes de Vertex AI.

Para autenticarte en Vertex AI Agent Builder, 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úala. Para obtener más información, consulta Evalúa la calidad de la búsqueda.