Mejorar los resultados de búsqueda con la optimización de la búsqueda

Un modelo de búsqueda optimizado puede ofrecerte resultados de mayor calidad que el modelo de búsqueda base.

La optimización de la búsqueda es especialmente útil si tienes consultas específicas de un sector o de una empresa que no se responden bien con los LLMs generales. Se puede usar para seguir entrenando el modelo de búsqueda.

Limitaciones

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

Acerca de los datos de entrenamiento

Para optimizar un modelo de búsqueda, primero debes reunir los datos de entrenamiento.

Los datos de entrenamiento deben contener consultas que creas que harán tus usuarios finales y fragmentos de texto de entre 250 y 500 palabras que contengan la información relevante necesaria para responder a las consultas. Una consulta puede asociarse a 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 emparejados con 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 proporcione al menos 10.000 de estos fragmentos.

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

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

    Proporciona al menos 100.

  • Segmentos extractivos: los fragmentos (normalmente, varios párrafos) deben tomarse literalmente de los documentos del almacén de datos. El conjunto de todos los documentos del almacén de datos se denomina "corpus".

    Debes proporcionar dos tipos de segmentos extractivos:

    • Segmentos que contienen la información pertinente necesaria para responder a las consultas de entrenamiento. Se trata de segmentos que coinciden positivamente con las consultas.

    • Segmentos que no están asociados a ninguna consulta de entrenamiento. Estos segmentos se usan como negativos aleatorios en el ajuste del modelo.

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

    Proporciona al menos un segmento extractivo por consulta y al menos 10.000 segmentos extractivos adicionales.

  • Puntuaciones de relevancia: son números enteros no negativos que estiman la relevancia del segmento extractivo en relación con la consulta. Proporciona 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 consulta. Una puntuación mayor que cero indica cierta relevancia. Para que la puntuación sea sencilla, Google recomienda asignar el valor 1 a todos los segmentos relevantes y el valor 0 a los que no lo sean. Si quieres clasificar la relevancia, puedes asignar puntuaciones de relevancia del 0 al 10 (por ejemplo), donde 10 es para los segmentos más relevantes y 0 para los que no lo son en absoluto.

    Proporciona al menos 100 puntuaciones relevantes y, opcionalmente, puntuaciones no relevantes adicionales.

Ejemplos de pares de consulta y segmento extractivo

En la siguiente tabla se muestran algunos ejemplos de pares de consultas y segmentos extractivos. Estos ejemplos generales se han extraído de Wikipedia. Sin embargo, para que el ajuste sea útil, te recomendamos que proporciones documentos de conjuntos de datos propietarios que contengan información específica de tu empresa y que no se puedan encontrar 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 consulta.

Consulta de formación Segmento extractivo Puntuación
¿Quién fundó Google? Google fue fundada el 4 de septiembre de 1998 por los informáticos estadounidenses Larry Page y Sergey Brin mientras cursaban el doctorado en la Universidad de Stanford (California). Juntos, poseen alrededor del 14% de las acciones que cotizan en bolsa y controlan el 56% del poder de voto de los accionistas mediante acciones con derecho a voto reforzado. La empresa salió a bolsa mediante una oferta pública inicial (OPI) en el 2004. En el 2015, Google se reorganizó como una filial de propiedad total de Alphabet Inc. Google es la filial más grande de Alphabet y es una sociedad de cartera de las propiedades e intereses de Internet de Alphabet. Sundar Pichai fue nombrado CEO de Google el 24 de octubre del 2015, en sustitución de Larry Page, que se convirtió en CEO de Alphabet. El 3 de diciembre del 2019, Pichai también se convirtió en CEO de Alphabet. [...] En la lista de las marcas más valiosas, Forbes clasifica a Google en segundo lugar e Interbrand, en cuarto. 1
¿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, completando el ciclo pulmonar. Esta sangre entra 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 a la aorta. La sangre se distribuye por el 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 las arterias pulmonares principales izquierda y derecha (una para cada pulmón), que se ramifican en arterias pulmonares más pequeñas que se extienden por los pulmones. [...] Una derivación cardiaca es una conexión no natural entre partes del corazón que provoca que la sangre fluya sin pasar por los pulmones. 1
¿Dónde está el Salón de la Fama del Bowling? El Salón de la Fama Internacional de Bowling de la Asociación Mundial de Escritores de Bowling (WBW) se fundó en 1993 y se encuentra en el Museo y Salón de la Fama Internacional de Bowling, en el campus internacional de bowling de Arlington (Texas). Historia El Museo Internacional de Bolos y el Salón de la Fama se encontraban en el número 11 de Stadium Plaza, en San Luis (Misuri, EE. UU.), y compartían el mismo edificio que el Museo del Salón de la Fama de los St. Louis Cardinals hasta el 8 de noviembre del 2008. Se trasladó a Arlington y volvió a abrir a principios del 2010. En el 2012, la WBW se fusionó con la International Bowling Media Association. Tras la fusión, los miembros del Salón de la Fama de la WBW pasaron a formar parte del Salón de la Fama de Luby de la IBMA. Los miembros de la junta directiva de la World Bowling Writers, que formaron la junta del Salón de la Fama, eran los siguientes:][...] Se eligen el hombre y la mujer que reciben más votos. 1
¿Por qué el cielo es azul? Un programa "Hola, mundo" es un programa informático sencillo que muestra en pantalla (a menudo en la consola) un mensaje similar a "Hola, mundo" e ignora cualquier entrada del usuario. Se trata de un pequeño fragmento de código en la mayoría de los lenguajes de programación de propósito general. Este programa se usa para ilustrar la sintaxis básica de un lenguaje. Un programa "Hola, mundo" suele ser el primero que escribe un estudiante de un nuevo lenguaje de programación, pero también se puede usar para comprobar que el software del ordenador destinado a compilar o ejecutar el código fuente se ha instalado correctamente y que el operador sabe cómo usarlo. [...] La versión en lenguaje C fue precedida por el tutorial de 1972 de Kernighan, A Tutorial Introduction to the Language B, donde se encuentra la primera versión conocida del programa en un ejemplo usado para ilustrar variables externas. 0

Acerca de las pruebas

Después del entrenamiento, se prueba la búsqueda optimizada para determinar si la optimización ha mejorado los resultados. Puedes proporcionar explícitamente las consultas que quieras probar. Si no proporcionas consultas de prueba, Vertex AI Search usará el 20% de las consultas de entrenamiento como consultas de prueba.

Archivos de entrenamiento

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

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

Archivo de corpus

El archivo de corpus contiene segmentos extractivos, es decir, segmentos que contienen información para responder a las consultas del archivo de consulta y muchos segmentos adicionales que se usarán como negativos aleatorios al ajustar el modelo. Debe tener al menos 100 segmentos que contengan respuestas a consultas. Las consultas 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 añádelos 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 la consulta

El archivo de consulta contiene las consultas de ejemplo que se usarán para optimizar el modelo. Cada consulta debe tener uno o varios segmentos extractivos correspondientes en el archivo de corpus. Debe proporcionar al menos 100 consultas de coincidencia positiva. También puede proporcionar consultas no relevantes, es decir, consultas que correspondan 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?"}

El número máximo 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 el archivo de etiquetas de prueba no está presente, se reserva el 20% de las consultas del archivo de etiquetas de entrenamiento 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), así como una puntuación de la relevancia del segmento para la consulta. Debe haber al menos una línea por consulta. Si una consulta se responde con dos segmentos, habrá dos líneas para esa consulta. Score es un valor entero no negativo. Cualquier puntuación superior a cero indica que el documento está relacionado con la consulta. Los números más altos indican un mayor nivel de relevancia. 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 incluir 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 del 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. El número de IDs de consulta del archivo de etiquetas de entrenamiento combinado con el número de consultas del 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 del segmento extractivo, así como las puntuaciones de relevancia. Contiene menos consultas y son diferentes que las del archivo de etiquetas de entrenamiento. Si está presente, los pares de consultas y segmentos extractivos del archivo se usan para evaluar la optimización. Si el archivo de etiquetas de prueba no está presente, se usarán los pares de segmentos de consulta y 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

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

Antes de empezar

Activa las funciones de la edición Enterprise de la aplicación.

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

Consola

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

  1. Prepara tus archivos de datos de entrenamiento y, opcionalmente, tus archivos de datos de prueba. Utiliza los formatos descritos en Archivos de entrenamiento.

  2. Sube los archivos a Cloud Storage.

  3. En la Google Cloud consola, ve a la página Aplicaciones de IA.

    Aplicaciones de IA

  4. En la página Aplicaciones, haz clic en el nombre de la aplicación para la que quieras 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 base.

  8. Especifique los archivos de corpus, consulta, entrenamiento y, opcionalmente, prueba que haya preparado 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, opcionalmente, tus datos de prueba). Utiliza los formatos descritos en Archivos de entrenamiento.

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

  3. Sube los archivos del segmento de Cloud Storage a Vertex AI Search ejecutando el siguiente comando curl:

    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"
    }'
    

    Haz los cambios siguientes:

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

    • DATA_STORE_ID: el ID del almacén de datos que quieres optimizar.

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

    • QUERY_JSONL_GCS_PATH: la ruta del archivo JSONL de consulta en Cloud Storage. Por ejemplo, gs://my-bucket/query.jsonl.

    • TRAIN_TSV_GCS_PATH: la ruta del archivo TSV de etiquetas de entrenamiento en Cloud Storage. Por ejemplo, gs://my-bucket/train.tsv.

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

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

    El ajuste empieza automáticamente después de que se suban los archivos de datos.

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

    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 devuelve el método trainCustomModel y sigue las instrucciones de 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 AI Applications Python.

Para autenticarte en las aplicaciones de IA, configura las credenciales predeterminadas de la aplicación. Para obtener más información, consulta el artículo Configurar la autenticación en 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 en consultas de búsqueda concretas

Una vez completado 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.

Consola

Para usar la consola Google Cloud para previsualizar el comportamiento de un modelo ajustado, sigue estos pasos:

  1. Ve a la pestaña Ajustes:

    1. En la Google Cloud consola, ve a la página Aplicaciones de IA.

      Aplicaciones de IA

    2. Haz clic en el nombre de la aplicación que quieras previsualizar.

    3. Haz clic en Configurations (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 de la optimización, puedes hacer consultas con el campo enableSearchAdaptor definido como true y, después, como false, y comparar los resultados. Si se asigna el valor true al campo enableSearchAdaptor, se indica que se usa la versión optimizada de la búsqueda para esa consulta.

Para hacer consultas de búsqueda que usen el modelo ajustado, sigue estos pasos:

  1. En la llamada al método de consulta, asigna el valor true al campo enableSearchAdaptor del campo customFineTuningSpec.

    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 }
    }'
    

    Haz los cambios siguientes:

    • PROJECT_ID: el ID de tu proyecto de Google Cloud .
    • APP_ID: el ID de la aplicación que quieres consultar.

Para obtener información detallada sobre las consultas de búsqueda, consulta el artículo Obtener resultados de búsqueda y el método servingConfigs.search.

Python

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

Para autenticarte en las aplicaciones de IA, configura las credenciales predeterminadas de la aplicación. Para obtener más información, consulta el artículo Configurar la autenticación en 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

Activar la búsqueda optimizada

Una vez que hayas probado la búsqueda optimizada y hayas decidido que quieres usarla para todas las consultas de búsqueda, puedes convertirla en el modelo de búsqueda predeterminado.

Consola

Para convertir el modelo optimizado en el modelo predeterminado y aplicarlo a la página principal de vista previa, al widget y a las llamadas a la API, sigue estos pasos:

  1. Ve a la pestaña Ajustes:

    1. En la Google Cloud consola, ve a la página Aplicaciones de IA.

      Aplicaciones de IA

    2. Haz clic en el nombre de la aplicación.

    3. Haz clic en Configurations (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 modelo predeterminado, no tienes que especificar el campo customFineTuningSpec en la consulta de búsqueda, como en el procedimiento anterior.

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

  1. Para definir la búsqueda optimizada como 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 AI Applications Python.

Para autenticarte en las aplicaciones de IA, configura las credenciales predeterminadas de la aplicación. Para obtener más información, consulta el artículo Configurar la autenticación en 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

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 incluso son peores que antes de la optimización), puedes inhabilitarla.

Consola

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

  1. Ve a la pestaña Ajustes:

    1. En la Google Cloud consola, ve a la página Aplicaciones de IA.

      Aplicaciones de IA

    2. Haz clic en el nombre de la aplicación.

    3. Haz clic en Configurations (Configuraciones).

    4. Haz clic en la pestaña Ajuste.

  2. Haga clic en Modelo base.

  3. Haz clic en Publicar.

REST

Para dejar de usar el modelo optimizado, ejecuta una llamada curl similar a la anterior, pero asigna el valor false a enableSearchAdaptor:

  1. 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": 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 AI Applications Python.

Para autenticarte en las aplicaciones de IA, configura las credenciales predeterminadas de la aplicación. Para obtener más información, consulta el artículo Configurar la autenticación en 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

Siguientes pasos

  • Para entender el impacto de la optimización 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 el artículo Evaluar la calidad de la búsqueda.