Obtener resultados de búsqueda

En esta página se explica cómo previsualizar los resultados de búsqueda con la consola Google Cloud y cómo obtenerlos con la API.

Además, en lugar de crear un widget de búsqueda para añadirlo a tu página web, puedes hacer llamadas a la API e integrarlas en tu servidor o aplicación. En esta página se incluyen ejemplos de código sobre cómo hacer consultas de búsqueda con las bibliotecas de cliente de gRPC y una cuenta de servicio.

Obtener resultados de búsqueda de una aplicación con datos de sitios web

Consola

Para usar la Google Cloud consola y previsualizar los resultados de búsqueda de una aplicación con datos de sitio web, sigue estos pasos:

  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 editar.

  3. Haz clic en Vista previa.

  4. Abre la página Vista previa en la consola.

  5. Opcional: Si has conectado varias tiendas de datos a tu aplicación, pero solo quieres obtener resultados de una tienda de datos específica, selecciona la tienda de datos de la que quieras obtener resultados.

  6. Escribe una consulta de búsqueda.

    Si has habilitado la función Autocompletar, aparecerá una lista de sugerencias debajo de la barra de búsqueda a medida que escribas.

  7. Pulsa Intro para enviar la consulta.

    • Debajo de la barra de búsqueda, aparece una lista de resultados.
    • Cada resultado contiene un título, un fragmento y una URL.
    • Si haces clic en un resultado, se abre esa URL.
    • Si las funciones avanzadas de LLM están habilitadas en la aplicación, también puede aparecer una respuesta generada.

REST

Para usar la API y obtener resultados de búsqueda de una aplicación con datos de sitio web, usa el método engines.servingConfigs.search:

  1. Busca el ID de tu aplicación. Si ya tienes el ID de tu aplicación, ve al siguiente paso.

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

      Ir a Aplicaciones

    2. En la página Aplicaciones, busca el nombre de tu aplicación y consulta su ID en la columna ID.

  2. Obtener resultados de búsqueda.

    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 '{
    "servingConfig": "projects/PROJECT_ID/locations/global/collections/default_collection/engines/APP_ID/servingConfigs/default_search",
    "query": "QUERY",
    "pageSize": "PAGE_SIZE",
    "offset": "OFFSET",
    "orderBy": "ORDER_BY",
    "params": {"user_country_code": "USER_COUNTRY_CODE",
    "searchType": "SEARCH_TYPE"},
    "filter": "FILTER",
    "boostSpec": "BOOST_SPEC",
    "contentSearchSpec": {
       "searchResultMode": "RESULT_MODE"
     },
     "userPseudoId": "USER_PSEUDO_ID",
     "dataStoreSpecs": [{"DATA_STORE_SPEC"}]
    }'
    

    Haz los cambios siguientes:

    • PROJECT_ID: el ID de tu proyecto de Google Cloud .
    • APP_ID: el ID de la aplicación de Vertex AI Search que quieres consultar.
    • QUERY: el texto de la consulta que se va a buscar.
    • PAGE_SIZE: el número de resultados devueltos por la búsqueda. El tamaño máximo de página permitido depende del tipo de datos. Los tamaños de página superiores al valor máximo se convertirán al valor máximo.

      • Sitios web con indexación básica: predeterminado 10, máximo 25
      • Sitios web con indexación avanzada: predeterminado 25 y máximo 50
      • Otros: predeterminado 50 y máximo 100
    • OFFSET: el índice inicial de los resultados. El valor predeterminado es 0.

      Por ejemplo, si el desplazamiento es 2, el tamaño de la página es 10 y hay 15 resultados que devolver, los resultados del 2 al 12 se devuelven en la primera página.

    • ORDER_BY: el orden en el que se organizan los resultados. El atributo por el que se debe ordenar debe tener una interpretación numérica; por ejemplo, date. Para obtener más información, consulta Ordenar resultados de búsqueda web.

    • USER_COUNTRY_CODE: la ubicación del usuario. Este par clave-valor es la única entrada admitida para el campo de mapa params. El valor predeterminado está vacío. Para ver los valores aceptables, consulta los códigos de país en la documentación de referencia de la API JSON del Buscador Programable.

    • SEARCH_TYPE: el tipo de búsqueda que se va a realizar. El valor predeterminado es 0 para la búsqueda de documentos. El otro valor admitido es 1 para la búsqueda de imágenes.

    • FILTER: un campo de texto para filtrar la búsqueda mediante una expresión de filtro. El valor predeterminado es una cadena vacía. Para obtener más información sobre cómo usar el campo filter, consulta Filtrar la búsqueda de un sitio web.

    • BOOST_SPEC: opcional. Una especificación para potenciar o ocultar documentos. Valores:

      • BOOST: un número de punto flotante en el intervalo [-1,1]. Si el valor es negativo, los resultados se degradan (aparecen más abajo en los resultados). Si el valor es positivo, los resultados se promocionan (aparecen más arriba en los resultados).
      • CONDITION: una expresión de filtro de texto para seleccionar los documentos a los que se aplica el aumento. El filtro debe dar como resultado un valor booleano. Para obtener información sobre la mejora de la búsqueda estructurada, consulta Mejorar los resultados de búsqueda.
    • RESULT_MODE: determina si los resultados de búsqueda se devuelven como documentos completos o en fragmentos. Para obtener fragmentos, el almacén de datos debe tener activada la fragmentación de documentos. Los valores aceptados son documents y chunks. Cuando la fragmentación está activada en un almacén de datos, el valor predeterminado es chunks. De lo contrario, el valor predeterminado es documents. Para obtener información sobre la fragmentación de documentos, consulta Analizar y fragmentar documentos. Este campo está en Vista Previa Pública. Para usarlo, cambia v1 por v1alpha en el comando curl.

    • USER_PSEUDO_ID: una cadena codificada en UTF-8 que actúa como identificador seudonimizado único que monitoriza a los usuarios. Puede tener una longitud máxima de 128 caracteres. Google recomienda encarecidamente usar este campo porque mejora el rendimiento del modelo y la calidad de la personalización. Puede usar una cookie HTTP para este campo, que identifica de forma única a un visitante en un solo dispositivo. Estas son algunas consideraciones importantes:

      • Este identificador no cambia cuando el visitante inicia o cierra sesión en un sitio web.
      • Este campo no debe tener el mismo identificador para varios usuarios. De lo contrario, el mismo ID de usuario puede combinar los historiales de eventos de diferentes usuarios y reducir la calidad del modelo.
      • Este campo no debe incluir información personal identificable (IPI).
      • En una solicitud de búsqueda o de navegación determinada, este campo debe corresponderse con el campo userPseudoId correspondiente de los eventos de usuario.

      Para obtener más información, consulta userPseudoId.

    • DATA_STORE_SPEC: filtra una tienda de datos específica en la que buscar. Usa dataStoreSpecs si tu aplicación de búsqueda está conectada a varios almacenes de datos, pero quieres obtener resultados de un almacén de datos específico. Para obtener más información, consulta DataStoreSpec.

C#

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

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.

using Google.Api.Gax;
using Google.Cloud.DiscoveryEngine.V1Beta;
using Google.Protobuf.WellKnownTypes;
using System;

public sealed partial class GeneratedSearchServiceClientSnippets
{
    /// <summary>Snippet for Search</summary>
    /// <remarks>
    /// This snippet has been automatically generated and should be regarded as a code template only.
    /// It will require modifications to work:
    /// - It may require correct/in-range values for request initialization.
    /// - It may require specifying regional endpoints when creating the service client as shown in
    ///   https://cloud.google.com/dotnet/docs/reference/help/client-configuration#endpoint.
    /// </remarks>
    public void SearchRequestObject()
    {
        // Create client
        SearchServiceClient searchServiceClient = SearchServiceClient.Create();
        // Initialize request argument(s)
        SearchRequest request = new SearchRequest
        {
            ServingConfigAsServingConfigName = ServingConfigName.FromProjectLocationDataStoreServingConfig("[PROJECT]", "[LOCATION]", "[DATA_STORE]", "[SERVING_CONFIG]"),
            BranchAsBranchName = BranchName.FromProjectLocationDataStoreBranch("[PROJECT]", "[LOCATION]", "[DATA_STORE]", "[BRANCH]"),
            Query = "",
            Offset = 0,
            Filter = "",
            OrderBy = "",
            FacetSpecs =
            {
                new SearchRequest.Types.FacetSpec(),
            },
            BoostSpec = new SearchRequest.Types.BoostSpec(),
            Params = { { "", new Value() }, },
            QueryExpansionSpec = new SearchRequest.Types.QueryExpansionSpec(),
            SpellCorrectionSpec = new SearchRequest.Types.SpellCorrectionSpec(),
            UserPseudoId = "",
            ImageQuery = new SearchRequest.Types.ImageQuery(),
            SafeSearch = false,
            UserInfo = new UserInfo(),
            UserLabels = { { "", "" }, },
            EmbeddingSpec = new SearchRequest.Types.EmbeddingSpec(),
            ContentSearchSpec = new SearchRequest.Types.ContentSearchSpec(),
            RankingExpression = "",
            NaturalLanguageQueryUnderstandingSpec = new SearchRequest.Types.NaturalLanguageQueryUnderstandingSpec(),
            CanonicalFilter = "",
            SearchAsYouTypeSpec = new SearchRequest.Types.SearchAsYouTypeSpec(),
            DataStoreSpecs =
            {
                new SearchRequest.Types.DataStoreSpec(),
            },
            LanguageCode = "",
            RegionCode = "",
            SessionAsSessionName = SessionName.FromProjectLocationDataStoreSession("[PROJECT]", "[LOCATION]", "[DATA_STORE]", "[SESSION]"),
            SessionSpec = new SearchRequest.Types.SessionSpec(),
            RelevanceThreshold = SearchRequest.Types.RelevanceThreshold.Unspecified,
            PersonalizationSpec = new SearchRequest.Types.PersonalizationSpec(),
            OneBoxPageSize = 0,
        };
        // Make the request
        PagedEnumerable<SearchResponse, SearchResponse.Types.SearchResult> response = searchServiceClient.Search(request);

        // Iterate over all response items, lazily performing RPCs as required
        foreach (SearchResponse.Types.SearchResult item in response)
        {
            // Do something with each item
            Console.WriteLine(item);
        }

        // Or iterate over pages (of server-defined size), performing one RPC per page
        foreach (SearchResponse page in response.AsRawResponses())
        {
            // Do something with each page of items
            Console.WriteLine("A page of results:");
            foreach (SearchResponse.Types.SearchResult item in page)
            {
                // Do something with each item
                Console.WriteLine(item);
            }
        }

        // Or retrieve a single page of known size (unless it's the final page), performing as many RPCs as required
        int pageSize = 10;
        Page<SearchResponse.Types.SearchResult> singlePage = response.ReadPage(pageSize);
        // Do something with the page of items
        Console.WriteLine($"A page of {pageSize} results (unless it's the final page):");
        foreach (SearchResponse.Types.SearchResult item in singlePage)
        {
            // Do something with each item
            Console.WriteLine(item);
        }
        // Store the pageToken, for when the next page is required.
        string nextPageToken = singlePage.NextPageToken;
    }
}

Java

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

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.


import com.google.cloud.discoveryengine.v1.SearchRequest;
import com.google.cloud.discoveryengine.v1.SearchResponse;
import com.google.cloud.discoveryengine.v1.SearchServiceClient;
import com.google.cloud.discoveryengine.v1.SearchServiceSettings;
import com.google.cloud.discoveryengine.v1.ServingConfigName;
import java.io.IOException;
import java.util.concurrent.ExecutionException;

public class Search {
  public static void main() throws IOException, ExecutionException {
    // TODO(developer): Replace these variables before running the sample.
    // Project ID or project number of the Cloud project you want to use.
    String projectId = "PROJECT_ID";
    // Location of the data store. Options: "global", "us", "eu"
    String location = "global";
    // Collection containing the data store.
    String collectionId = "default_collection";
    // Data store ID.
    String dataStoreId = "DATA_STORE_ID";
    // Serving configuration. Options: "default_search"
    String servingConfigId = "default_search";
    // Search Query for the data store.
    String searchQuery = "Google";
    search(projectId, location, collectionId, dataStoreId, servingConfigId, searchQuery);
  }

  /** Performs a search on a given datastore. */
  public static void search(
      String projectId,
      String location,
      String collectionId,
      String dataStoreId,
      String servingConfigId,
      String searchQuery)
      throws IOException, ExecutionException {
    // For more information, refer to:
    // https://cloud.google.com/generative-ai-app-builder/docs/locations#specify_a_multi-region_for_your_data_store
    String endpoint = (location.equals("global")) 
        ? String.format("discoveryengine.googleapis.com:443", location) 
        : String.format("%s-discoveryengine.googleapis.com:443", location);
    SearchServiceSettings settings =
        SearchServiceSettings.newBuilder().setEndpoint(endpoint).build();
    // Initialize client that will be used to send requests. This client only needs to be created
    // once, and can be reused for multiple requests. After completing all of your requests, call
    // the `searchServiceClient.close()` method on the client to safely
    // clean up any remaining background resources.
    try (SearchServiceClient searchServiceClient = SearchServiceClient.create(settings)) {
      SearchRequest request =
          SearchRequest.newBuilder()
              .setServingConfig(
                  ServingConfigName.formatProjectLocationCollectionDataStoreServingConfigName(
                      projectId, location, collectionId, dataStoreId, servingConfigId))
              .setQuery(searchQuery)
              .setPageSize(10)
              .build();
      SearchResponse response = searchServiceClient.search(request).getPage().getResponse();
      for (SearchResponse.SearchResult element : response.getResultsList()) {
        System.out.println("Response content: " + element);
      }
    }
  }
}

Node.js

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

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.

/**
 * TODO(developer): Uncomment these variables before running the sample.
 */
// const projectId = 'YOUR_PROJECT_ID';
// const location = 'YOUR_LOCATION';              // Options: 'global', 'us', 'eu'
// const collectionId = 'default_collection';     // Options: 'default_collection'
// const dataStoreId = 'YOUR_DATA_STORE_ID'       // Create in Cloud Console
// const servingConfigId = 'default_config';      // Options: 'default_config'
// const searchQuery = 'Google';

const {SearchServiceClient} = require('@google-cloud/discoveryengine').v1beta;

// For more information, refer to:
// https://cloud.google.com/generative-ai-app-builder/docs/locations#specify_a_multi-region_for_your_data_store
const apiEndpoint =
  location === 'global'
    ? 'discoveryengine.googleapis.com'
    : `${location}-discoveryengine.googleapis.com`;

// Instantiates a client
const client = new SearchServiceClient({apiEndpoint: apiEndpoint});

async function search() {
  // The full resource name of the search engine serving configuration.
  // Example: projects/{projectId}/locations/{location}/collections/{collectionId}/dataStores/{dataStoreId}/servingConfigs/{servingConfigId}
  // You must create a search engine in the Cloud Console first.
  const name = client.projectLocationCollectionDataStoreServingConfigPath(
    projectId,
    location,
    collectionId,
    dataStoreId,
    servingConfigId
  );

  const request = {
    pageSize: 10,
    query: searchQuery,
    servingConfig: name,
  };

  const IResponseParams = {
    ISearchResult: 0,
    ISearchRequest: 1,
    ISearchResponse: 2,
  };

  // Perform search request
  const response = await client.search(request, {
    // Warning: Should always disable autoPaginate to avoid iterate through all pages.
    //
    // By default NodeJS SDK returns an iterable where you can iterate through all
    // search results instead of only the limited number of results requested on
    // pageSize, by sending multiple sequential search requests page-by-page while
    // iterating, until it exhausts all the search results. This will be unexpected and
    // may cause high Search API usage and long wait time, especially when the matched
    // document numbers are huge.
    autoPaginate: false,
  });
  const results = response[IResponseParams.ISearchResponse].results;

  for (const result of results) {
    console.log(result);
  }
}

PHP

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

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.

use Google\ApiCore\ApiException;
use Google\ApiCore\PagedListResponse;
use Google\Cloud\DiscoveryEngine\V1beta\Client\SearchServiceClient;
use Google\Cloud\DiscoveryEngine\V1beta\SearchRequest;
use Google\Cloud\DiscoveryEngine\V1beta\SearchResponse\SearchResult;

/**
 * Performs a search.
 *
 * @param string $formattedServingConfig The resource name of the Search serving config, such as
 *                                       `projects/&#42;/locations/global/collections/default_collection/engines/&#42;/servingConfigs/default_serving_config`,
 *                                       or
 *                                       `projects/&#42;/locations/global/collections/default_collection/dataStores/default_data_store/servingConfigs/default_serving_config`.
 *                                       This field is used to identify the serving configuration name, set
 *                                       of models used to make the search. Please see
 *                                       {@see SearchServiceClient::servingConfigName()} for help formatting this field.
 */
function search_sample(string $formattedServingConfig): void
{
    // Create a client.
    $searchServiceClient = new SearchServiceClient();

    // Prepare the request message.
    $request = (new SearchRequest())
        ->setServingConfig($formattedServingConfig);

    // Call the API and handle any network failures.
    try {
        /** @var PagedListResponse $response */
        $response = $searchServiceClient->search($request);

        /** @var SearchResult $element */
        foreach ($response as $element) {
            printf('Element data: %s' . PHP_EOL, $element->serializeToJsonString());
        }
    } catch (ApiException $ex) {
        printf('Call failed with message: %s' . PHP_EOL, $ex->getMessage());
    }
}

/**
 * Helper to execute the sample.
 *
 * This sample has been automatically generated and should be regarded as a code
 * template only. It will require modifications to work:
 *  - It may require correct/in-range values for request initialization.
 *  - It may require specifying regional endpoints when creating the service client,
 *    please see the apiEndpoint client configuration option for more details.
 */
function callSample(): void
{
    $formattedServingConfig = SearchServiceClient::servingConfigName(
        '[PROJECT]',
        '[LOCATION]',
        '[DATA_STORE]',
        '[SERVING_CONFIG]'
    );

    search_sample($formattedServingConfig);
}

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

Ruby

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

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.

require "google/cloud/discovery_engine/v1beta"

##
# Snippet for the search call in the SearchService service
#
# This snippet has been automatically generated and should be regarded as a code
# template only. It will require modifications to work:
# - It may require correct/in-range values for request initialization.
# - It may require specifying regional endpoints when creating the service
# client as shown in https://cloud.google.com/ruby/docs/reference.
#
# This is an auto-generated example demonstrating basic usage of
# Google::Cloud::DiscoveryEngine::V1beta::SearchService::Client#search.
#
def search
  # Create a client object. The client can be reused for multiple calls.
  client = Google::Cloud::DiscoveryEngine::V1beta::SearchService::Client.new

  # Create a request. To set request fields, pass in keyword arguments.
  request = Google::Cloud::DiscoveryEngine::V1beta::SearchRequest.new

  # Call the search method.
  result = client.search request

  # The returned object is of type Gapic::PagedEnumerable. You can iterate
  # over elements, and API calls will be issued to fetch pages as needed.
  result.each do |item|
    # Each element is of type ::Google::Cloud::DiscoveryEngine::V1beta::SearchResponse::SearchResult.
    p item
  end
end

Obtener resultados de búsqueda de una aplicación con datos de sitios web (clave de API)

Si quieres autenticar la llamada al método de búsqueda con una clave de API en lugar de usar OAuth 2.0 a través de una cuenta de servicio o de usuario, sigue este procedimiento, que usa el método searchLite. El método searchLite tiene las mismas funciones que el método search, pero solo se puede usar para buscar sitios web públicos.

El método searchLite es especialmente adecuado en las siguientes condiciones:

  • Tienes un sitio web estático para el que no es práctico configurar OAuth 2.0 a través de una cuenta de servicio o una cuenta de usuario.

  • Has migrado a Vertex AI Search desde la API JSON Custom Search Site Restricted de Buscador Programable.

  • No quieres usar el widget de búsqueda.

Antes de empezar

Para poder llamar al método servingConfigs.searchLite, necesitas una clave de API. Si no tienes una clave de API, completa el paso 1 de Desplegar la aplicación de búsqueda (clave de API).

Procedimiento

REST

Para usar la API y obtener resultados de búsqueda de una aplicación con datos de un sitio web público autenticada con una clave de API, usa el método engines.servingConfigs.searchLite:

  1. Busca el ID de tu aplicación. Si ya tienes el ID de tu aplicación, ve al siguiente paso.

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

      Ir a Aplicaciones

    2. En la página Aplicaciones, busca el nombre de tu aplicación y consulta su ID en la columna ID.

  2. Ejecuta el siguiente comando curl para obtener los resultados de búsqueda:

    curl -X POST -H "Content-Type: application/json" \
    "https://discoveryengine.googleapis.com/v1/projects/PROJECT_ID/locations/global/collections/default_collection/engines/APP_ID/servingConfigs/default_search:searchLite?key=API_KEY" \
    -d '{
    "servingConfig": "projects/PROJECT_ID/locations/global/collections/default_collection/engines/APP_ID/servingConfigs/default_search",
    "query": "QUERY",
    "userPseudoId": "USER_PSEUDO_ID"
    }'
    

    Haz los cambios siguientes:

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

    • API_KEY: tu cadena de clave de API.

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

    • APP_ID: el ID de la aplicación de Vertex AI Search que quieres consultar.

    • QUERY: el texto de la consulta que se va a buscar.

    • USER_PSEUDO_ID: una cadena codificada en UTF-8 que actúa como identificador seudonimizado único que monitoriza a los usuarios. Puede tener una longitud máxima de 128 caracteres. Google recomienda encarecidamente usar este campo porque mejora el rendimiento del modelo y la calidad de la personalización. Puede usar una cookie HTTP para este campo, que identifica de forma única a un visitante en un solo dispositivo. Estas son algunas consideraciones importantes:

      • Este identificador no cambia cuando el visitante inicia o cierra sesión en un sitio web.
      • Este campo no debe tener el mismo identificador para varios usuarios. De lo contrario, el mismo ID de usuario puede combinar los historiales de eventos de diferentes usuarios y reducir la calidad del modelo.
      • Este campo no debe incluir información personal identificable (IPI).
      • En una solicitud de búsqueda o de navegación determinada, este campo debe corresponderse con el campo userPseudoId correspondiente de los eventos de usuario.

      Para obtener más información, consulta userPseudoId.

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"
# api_key = "YOUR_API_KEY"
# search_query = "YOUR_SEARCH_QUERY"


def search_lite_sample(
    project_id: str,
    location: str,
    engine_id: str,
    api_key: str,
    search_query: str,
) -> discoveryengine.services.search_service.pagers.SearchLitePager:

    client_options = ClientOptions(
        # For information on API Keys, refer to:
        # https://cloud.google.com/generative-ai-app-builder/docs/migrate-from-cse#api-key-deploy
        api_key=api_key,
        #  For more information, refer to:
        # https://cloud.google.com/generative-ai-app-builder/docs/locations#specify_a_multi-region_for_your_data_store
        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"

    # 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_result = client.search_lite(request)

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

    return page_result

Obtener resultados de búsqueda de una aplicación con datos estructurados o sin estructurar

Puedes previsualizar los resultados de búsqueda desde la Google Cloud consola u obtenerlos mediante la API.

Consola

.

Para usar la Google Cloud consola y previsualizar los resultados de búsqueda de una aplicación con datos estructurados o sin estructurar, sigue estos pasos:

  1. Abre la página Vista previa en la consola.
  2. Escribe una consulta de búsqueda.

    Si has habilitado la función Autocompletar, aparecerá una lista de sugerencias debajo de la barra de búsqueda a medida que escribas.

  3. (Opcional) Si has conectado varios almacenes de datos a tu aplicación, pero solo quieres obtener resultados de un almacén de datos específico, selecciona el almacén de datos del que quieras obtener los resultados.

  4. Pulsa Intro para enviar la consulta.

    Debajo de la barra de búsqueda, aparece una lista de resultados.

    En el caso de los datos estructurados, se aplican las siguientes condiciones:

    • Si las asignaciones de atributos no se definen en Configuraciones > Configurar campos en los resultados, los resultados de búsqueda se muestran como una lista de nombres y valores de atributos sin procesar.

    • Si se ha guardado alguna asignación de atributos en Configuraciones > Configurar campos en los resultados, los resultados de búsqueda se mostrarán de la misma forma que en la vista previa de la página Configuraciones.

    • Si se ha especificado alguna faceta en Configuraciones > Configuración de facetas, se mostrarán de la misma forma.

REST

Para usar la API y obtener resultados de búsqueda de una aplicación con datos estructurados o no estructurados, usa el método engines.servingConfigs.search:

  1. Busca el ID de tu aplicación. Si ya tienes el ID de tu aplicación, ve al siguiente paso.

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

      Ir a Aplicaciones

    2. En la página Aplicaciones, busca el nombre de tu aplicación y consulta su ID en la columna ID.

  2. Obtener resultados de búsqueda.

    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",
    "userPseudoId": "USER_PSEUDO_ID",
    "pageSize": "PAGE_SIZE",
    "offset": "OFFSET",
    "orderBy": "ORDER_BY",
    "filter": "FILTER",
    "boostSpec": "BOOST_SPEC",
    "facetSpec": "FACET_SPEC",
    "queryExpansionSpec": "QUERY_EXPANSION_SPEC",
    "spellCorrectionSpec": "SPELL_CORRECTION_SPEC",
    "contentSearchSpec": "CONTENT_SEARCH_SPEC",
    "dataStoreSpecs": [{"DATA_STORE_SPEC"}],
    }'
    

    Haz los cambios siguientes:

    • PROJECT_ID: el ID de tu proyecto de Google Cloud .
    • APP_ID: el ID de la aplicación de Vertex AI Search que quieres consultar.
    • QUERY: el texto de la consulta que se va a buscar.
    • USER_PSEUDO_ID: una cadena codificada en UTF-8 que actúa como identificador seudonimizado único que monitoriza a los usuarios. Puede tener una longitud máxima de 128 caracteres. Google recomienda encarecidamente usar este campo porque mejora el rendimiento del modelo y la calidad de la personalización. Puede usar una cookie HTTP para este campo, que identifica de forma única a un visitante en un solo dispositivo. Estas son algunas consideraciones importantes:

      • Este identificador no cambia cuando el visitante inicia o cierra sesión en un sitio web.
      • Este campo no debe tener el mismo identificador para varios usuarios. De lo contrario, el mismo ID de usuario puede combinar los historiales de eventos de diferentes usuarios y reducir la calidad del modelo.
      • Este campo no debe incluir información personal identificable (IPI).
      • En una solicitud de búsqueda o de navegación determinada, este campo debe corresponderse con el campo userPseudoId correspondiente de los eventos de usuario.

      Para obtener más información, consulta userPseudoId.

    • PAGE_SIZE: el número de resultados devueltos por la búsqueda. El tamaño máximo de página permitido depende del tipo de datos. Los tamaños de página superiores al valor máximo se ajustan a este valor.

      • Sitios web con indexación básica: predeterminado 10, máximo 25
      • Sitios web con indexación avanzada: predeterminado 25 y máximo 50
      • Otros: predeterminado 50 y máximo 100
    • OFFSET: opcional. Índice de inicio de los resultados. El valor predeterminado es 0.

      Por ejemplo, si el desplazamiento es 2, el tamaño de la página es 10 y hay 15 resultados que devolver, los resultados del 2 al 11 se devuelven en la primera página.

    • ORDER_BY: opcional. El orden en el que se organizan los resultados.

    • FILTER: opcional. Un campo de texto para filtrar tu búsqueda con una expresión de filtro. El valor predeterminado es una cadena vacía, lo que significa que no se aplica ningún filtro.

      Ejemplo: color: ANY("red", "blue") AND score: IN(*, 100.0e)

      Para obtener más información, consulta Filtrar búsquedas de datos estructurados o no estructurados.

    • BOOST_SPEC: opcional. Una especificación para impulsar o ocultar documentos. Valores:

      • BOOST: un número de punto flotante en el intervalo [-1,1]. Si el valor es negativo, los resultados se degradan (aparecen más abajo en los resultados). Si el valor es positivo, los resultados se promocionan (aparecen más arriba en los resultados).
      • CONDITION: una expresión de filtro de texto para seleccionar los documentos a los que se aplica el aumento. El filtro debe dar como resultado un valor booleano.

      Para obtener información sobre la mejora de la búsqueda estructurada, consulta Mejorar los resultados de búsqueda.

    • FACET_SPEC: opcional. Una especificación de faceta para realizar una búsqueda por facetas.

    • QUERY_EXPANSION_SPEC: opcional. Especificación para determinar en qué condiciones se debe producir la ampliación de la consulta. El valor predeterminado es DISABLED.

    • SPELL_CORRECTION_SPEC: opcional. Especificación para determinar en qué condiciones se debe realizar la corrección ortográfica. El valor predeterminado es AUTO.

    • CONTENT_SEARCH_SPEC: opcional. Para obtener fragmentos, respuestas extractivas, segmentos extractivos y resúmenes de búsqueda. Solo para datos sin estructurar. Para obtener más información, consulta estos artículos:

    • DATA_STORE_SPEC: filtra un almacén de datos específico en el que buscar. Puede usarlo si su aplicación de búsqueda está conectada a varios almacenes de datos.

    • Para ver los resultados de búsqueda guiada en la respuesta de búsqueda, sigue estos pasos:

      Los resultados de búsqueda guiada se devuelven con las respuestas de búsqueda estructurada y no estructurada. El resultado de la búsqueda guiada contiene una lista de pares clave-valor de atributos extraídos en función de los documentos de resultados de búsqueda. De esta forma, los usuarios pueden acotar los resultados de búsqueda usando algunas claves y valores de atributos como filtros.

      En este ejemplo de respuesta, se ha usado el color verde para acotar los resultados de búsqueda. Para ello, se ha enviado una nueva solicitud de búsqueda con el campo de filtro especificado como _gs.color: ANY("green"):

      {
      "guidedSearchResult": {
        "refinementAttributes": [
          {
            "attributeKey": "_gs.color",
            "attributeValue" : "green"
          },
          {
            "attributeKey": "_gs.category",
            "attributeValue" : "shoe"
          }
        ]
      }
      }
      

C#

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

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.

using Google.Api.Gax;
using Google.Cloud.DiscoveryEngine.V1Beta;
using Google.Protobuf.WellKnownTypes;
using System;

public sealed partial class GeneratedSearchServiceClientSnippets
{
    /// <summary>Snippet for Search</summary>
    /// <remarks>
    /// This snippet has been automatically generated and should be regarded as a code template only.
    /// It will require modifications to work:
    /// - It may require correct/in-range values for request initialization.
    /// - It may require specifying regional endpoints when creating the service client as shown in
    ///   https://cloud.google.com/dotnet/docs/reference/help/client-configuration#endpoint.
    /// </remarks>
    public void SearchRequestObject()
    {
        // Create client
        SearchServiceClient searchServiceClient = SearchServiceClient.Create();
        // Initialize request argument(s)
        SearchRequest request = new SearchRequest
        {
            ServingConfigAsServingConfigName = ServingConfigName.FromProjectLocationDataStoreServingConfig("[PROJECT]", "[LOCATION]", "[DATA_STORE]", "[SERVING_CONFIG]"),
            BranchAsBranchName = BranchName.FromProjectLocationDataStoreBranch("[PROJECT]", "[LOCATION]", "[DATA_STORE]", "[BRANCH]"),
            Query = "",
            Offset = 0,
            Filter = "",
            OrderBy = "",
            FacetSpecs =
            {
                new SearchRequest.Types.FacetSpec(),
            },
            BoostSpec = new SearchRequest.Types.BoostSpec(),
            Params = { { "", new Value() }, },
            QueryExpansionSpec = new SearchRequest.Types.QueryExpansionSpec(),
            SpellCorrectionSpec = new SearchRequest.Types.SpellCorrectionSpec(),
            UserPseudoId = "",
            ImageQuery = new SearchRequest.Types.ImageQuery(),
            SafeSearch = false,
            UserInfo = new UserInfo(),
            UserLabels = { { "", "" }, },
            EmbeddingSpec = new SearchRequest.Types.EmbeddingSpec(),
            ContentSearchSpec = new SearchRequest.Types.ContentSearchSpec(),
            RankingExpression = "",
            NaturalLanguageQueryUnderstandingSpec = new SearchRequest.Types.NaturalLanguageQueryUnderstandingSpec(),
            CanonicalFilter = "",
            SearchAsYouTypeSpec = new SearchRequest.Types.SearchAsYouTypeSpec(),
            DataStoreSpecs =
            {
                new SearchRequest.Types.DataStoreSpec(),
            },
            LanguageCode = "",
            RegionCode = "",
            SessionAsSessionName = SessionName.FromProjectLocationDataStoreSession("[PROJECT]", "[LOCATION]", "[DATA_STORE]", "[SESSION]"),
            SessionSpec = new SearchRequest.Types.SessionSpec(),
            RelevanceThreshold = SearchRequest.Types.RelevanceThreshold.Unspecified,
            PersonalizationSpec = new SearchRequest.Types.PersonalizationSpec(),
            OneBoxPageSize = 0,
        };
        // Make the request
        PagedEnumerable<SearchResponse, SearchResponse.Types.SearchResult> response = searchServiceClient.Search(request);

        // Iterate over all response items, lazily performing RPCs as required
        foreach (SearchResponse.Types.SearchResult item in response)
        {
            // Do something with each item
            Console.WriteLine(item);
        }

        // Or iterate over pages (of server-defined size), performing one RPC per page
        foreach (SearchResponse page in response.AsRawResponses())
        {
            // Do something with each page of items
            Console.WriteLine("A page of results:");
            foreach (SearchResponse.Types.SearchResult item in page)
            {
                // Do something with each item
                Console.WriteLine(item);
            }
        }

        // Or retrieve a single page of known size (unless it's the final page), performing as many RPCs as required
        int pageSize = 10;
        Page<SearchResponse.Types.SearchResult> singlePage = response.ReadPage(pageSize);
        // Do something with the page of items
        Console.WriteLine($"A page of {pageSize} results (unless it's the final page):");
        foreach (SearchResponse.Types.SearchResult item in singlePage)
        {
            // Do something with each item
            Console.WriteLine(item);
        }
        // Store the pageToken, for when the next page is required.
        string nextPageToken = singlePage.NextPageToken;
    }
}

Java

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

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.


import com.google.cloud.discoveryengine.v1.SearchRequest;
import com.google.cloud.discoveryengine.v1.SearchResponse;
import com.google.cloud.discoveryengine.v1.SearchServiceClient;
import com.google.cloud.discoveryengine.v1.SearchServiceSettings;
import com.google.cloud.discoveryengine.v1.ServingConfigName;
import java.io.IOException;
import java.util.concurrent.ExecutionException;

public class Search {
  public static void main() throws IOException, ExecutionException {
    // TODO(developer): Replace these variables before running the sample.
    // Project ID or project number of the Cloud project you want to use.
    String projectId = "PROJECT_ID";
    // Location of the data store. Options: "global", "us", "eu"
    String location = "global";
    // Collection containing the data store.
    String collectionId = "default_collection";
    // Data store ID.
    String dataStoreId = "DATA_STORE_ID";
    // Serving configuration. Options: "default_search"
    String servingConfigId = "default_search";
    // Search Query for the data store.
    String searchQuery = "Google";
    search(projectId, location, collectionId, dataStoreId, servingConfigId, searchQuery);
  }

  /** Performs a search on a given datastore. */
  public static void search(
      String projectId,
      String location,
      String collectionId,
      String dataStoreId,
      String servingConfigId,
      String searchQuery)
      throws IOException, ExecutionException {
    // For more information, refer to:
    // https://cloud.google.com/generative-ai-app-builder/docs/locations#specify_a_multi-region_for_your_data_store
    String endpoint = (location.equals("global")) 
        ? String.format("discoveryengine.googleapis.com:443", location) 
        : String.format("%s-discoveryengine.googleapis.com:443", location);
    SearchServiceSettings settings =
        SearchServiceSettings.newBuilder().setEndpoint(endpoint).build();
    // Initialize client that will be used to send requests. This client only needs to be created
    // once, and can be reused for multiple requests. After completing all of your requests, call
    // the `searchServiceClient.close()` method on the client to safely
    // clean up any remaining background resources.
    try (SearchServiceClient searchServiceClient = SearchServiceClient.create(settings)) {
      SearchRequest request =
          SearchRequest.newBuilder()
              .setServingConfig(
                  ServingConfigName.formatProjectLocationCollectionDataStoreServingConfigName(
                      projectId, location, collectionId, dataStoreId, servingConfigId))
              .setQuery(searchQuery)
              .setPageSize(10)
              .build();
      SearchResponse response = searchServiceClient.search(request).getPage().getResponse();
      for (SearchResponse.SearchResult element : response.getResultsList()) {
        System.out.println("Response content: " + element);
      }
    }
  }
}

Node.js

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

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.

/**
 * TODO(developer): Uncomment these variables before running the sample.
 */
// const projectId = 'YOUR_PROJECT_ID';
// const location = 'YOUR_LOCATION';              // Options: 'global', 'us', 'eu'
// const collectionId = 'default_collection';     // Options: 'default_collection'
// const dataStoreId = 'YOUR_DATA_STORE_ID'       // Create in Cloud Console
// const servingConfigId = 'default_config';      // Options: 'default_config'
// const searchQuery = 'Google';

const {SearchServiceClient} = require('@google-cloud/discoveryengine').v1beta;

// For more information, refer to:
// https://cloud.google.com/generative-ai-app-builder/docs/locations#specify_a_multi-region_for_your_data_store
const apiEndpoint =
  location === 'global'
    ? 'discoveryengine.googleapis.com'
    : `${location}-discoveryengine.googleapis.com`;

// Instantiates a client
const client = new SearchServiceClient({apiEndpoint: apiEndpoint});

async function search() {
  // The full resource name of the search engine serving configuration.
  // Example: projects/{projectId}/locations/{location}/collections/{collectionId}/dataStores/{dataStoreId}/servingConfigs/{servingConfigId}
  // You must create a search engine in the Cloud Console first.
  const name = client.projectLocationCollectionDataStoreServingConfigPath(
    projectId,
    location,
    collectionId,
    dataStoreId,
    servingConfigId
  );

  const request = {
    pageSize: 10,
    query: searchQuery,
    servingConfig: name,
  };

  const IResponseParams = {
    ISearchResult: 0,
    ISearchRequest: 1,
    ISearchResponse: 2,
  };

  // Perform search request
  const response = await client.search(request, {
    // Warning: Should always disable autoPaginate to avoid iterate through all pages.
    //
    // By default NodeJS SDK returns an iterable where you can iterate through all
    // search results instead of only the limited number of results requested on
    // pageSize, by sending multiple sequential search requests page-by-page while
    // iterating, until it exhausts all the search results. This will be unexpected and
    // may cause high Search API usage and long wait time, especially when the matched
    // document numbers are huge.
    autoPaginate: false,
  });
  const results = response[IResponseParams.ISearchResponse].results;

  for (const result of results) {
    console.log(result);
  }
}

PHP

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

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.

use Google\ApiCore\ApiException;
use Google\ApiCore\PagedListResponse;
use Google\Cloud\DiscoveryEngine\V1beta\Client\SearchServiceClient;
use Google\Cloud\DiscoveryEngine\V1beta\SearchRequest;
use Google\Cloud\DiscoveryEngine\V1beta\SearchResponse\SearchResult;

/**
 * Performs a search.
 *
 * @param string $formattedServingConfig The resource name of the Search serving config, such as
 *                                       `projects/&#42;/locations/global/collections/default_collection/engines/&#42;/servingConfigs/default_serving_config`,
 *                                       or
 *                                       `projects/&#42;/locations/global/collections/default_collection/dataStores/default_data_store/servingConfigs/default_serving_config`.
 *                                       This field is used to identify the serving configuration name, set
 *                                       of models used to make the search. Please see
 *                                       {@see SearchServiceClient::servingConfigName()} for help formatting this field.
 */
function search_sample(string $formattedServingConfig): void
{
    // Create a client.
    $searchServiceClient = new SearchServiceClient();

    // Prepare the request message.
    $request = (new SearchRequest())
        ->setServingConfig($formattedServingConfig);

    // Call the API and handle any network failures.
    try {
        /** @var PagedListResponse $response */
        $response = $searchServiceClient->search($request);

        /** @var SearchResult $element */
        foreach ($response as $element) {
            printf('Element data: %s' . PHP_EOL, $element->serializeToJsonString());
        }
    } catch (ApiException $ex) {
        printf('Call failed with message: %s' . PHP_EOL, $ex->getMessage());
    }
}

/**
 * Helper to execute the sample.
 *
 * This sample has been automatically generated and should be regarded as a code
 * template only. It will require modifications to work:
 *  - It may require correct/in-range values for request initialization.
 *  - It may require specifying regional endpoints when creating the service client,
 *    please see the apiEndpoint client configuration option for more details.
 */
function callSample(): void
{
    $formattedServingConfig = SearchServiceClient::servingConfigName(
        '[PROJECT]',
        '[LOCATION]',
        '[DATA_STORE]',
        '[SERVING_CONFIG]'
    );

    search_sample($formattedServingConfig);
}

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

Ruby

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

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.

require "google/cloud/discovery_engine/v1beta"

##
# Snippet for the search call in the SearchService service
#
# This snippet has been automatically generated and should be regarded as a code
# template only. It will require modifications to work:
# - It may require correct/in-range values for request initialization.
# - It may require specifying regional endpoints when creating the service
# client as shown in https://cloud.google.com/ruby/docs/reference.
#
# This is an auto-generated example demonstrating basic usage of
# Google::Cloud::DiscoveryEngine::V1beta::SearchService::Client#search.
#
def search
  # Create a client object. The client can be reused for multiple calls.
  client = Google::Cloud::DiscoveryEngine::V1beta::SearchService::Client.new

  # Create a request. To set request fields, pass in keyword arguments.
  request = Google::Cloud::DiscoveryEngine::V1beta::SearchRequest.new

  # Call the search method.
  result = client.search request

  # The returned object is of type Gapic::PagedEnumerable. You can iterate
  # over elements, and API calls will be issued to fetch pages as needed.
  result.each do |item|
    # Each element is of type ::Google::Cloud::DiscoveryEngine::V1beta::SearchResponse::SearchResult.
    p item
  end
end

Obtener puntuaciones de relevancia de documentos con los resultados de búsqueda

Las puntuaciones de relevancia de los documentos se basan en la similitud de la consulta con el documento. Las puntuaciones se dividen en 11 grupos en el intervalo de 0 a 1,0 (0, 0,1, 0,2, etc.). Cuanto mayor sea la puntuación, más relevante será el documento.

Ten en cuenta las puntuaciones de relevancia de los documentos en estos casos prácticos:

  • Filtrado posterior a la búsqueda basado en la puntuación de relevancia para eliminar los resultados irrelevantes

  • Clasificación posterior a la búsqueda o como entrada para otras aplicaciones

  • Depuración: las puntuaciones de relevancia pueden proporcionar información sobre por qué se devuelven algunos resultados de búsqueda

En cada resultado de búsqueda se puede devolver una puntuación de relevancia:

  "results": [
    {
      "id": "DOCUMENT_ID",
      "document": {
      ...
      },
      "modelScores": {
        "relevance_score": {
          "values": [
            DOCUMENT-RELEVANCE-SCORE
          ]
        }
      }
    },
  ...
  ]

También puedes consultar el comando de ejemplo en el procedimiento que se indica más abajo.

Antes de empezar: asegúrate de que la aplicación de búsqueda esté asociada a un almacén de datos estructurados o no estructurados. Es decir, no se pueden devolver puntuaciones de relevancia de documentos para la aplicación de búsqueda de sitios web.

REST

Para solicitar que se devuelvan las puntuaciones de relevancia de los documentos con los resultados de búsqueda, utiliza el método engines.servingConfigs.search de la siguiente manera:

  1. Busca el ID de tu aplicación. Si ya tienes el ID de tu aplicación, ve al siguiente paso.

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

      Ir a Aplicaciones

    2. En la página Aplicaciones, busca el nombre de tu aplicación y consulta su ID en la columna ID.

  2. Ejecuta el siguiente comando curl para obtener las puntuaciones devueltas con los resultados de búsqueda.

    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 '{
         "servingConfig": "projects/PROJECT_ID/locations/global/collections/default_collection/engines/APP_ID/servingConfigs/default_search",
         "query": "QUERY",
         "relevanceScoreSpec": {
           "returnRelevanceScore": true
         }
    }'
    
    • PROJECT_ID: el ID de tu proyecto de Google Cloud .
    • APP_ID: el ID de la aplicación de Vertex AI Search que quieres consultar.
    • QUERY: el texto de la consulta que se va a buscar.

El resumen de búsqueda varía según el modelo

Si generas resúmenes de búsqueda para tus consultas, es posible que observes que los resúmenes difieren entre los resultados de la consola y los de la API. Si ves este mensaje, lo más probable es que la consola esté usando un modelo LLM diferente al de la API. Los ejemplos de curl y de código de esta página usan el modelo LLM estable.

  • Para cambiar o ver el modelo de LLM usado en la página Vista previa de la interfaz de usuario (solo se admite en aplicaciones de búsqueda avanzada y aplicaciones sanitarias).

    1. Ve a la página Configuraciones de tu aplicación > pestaña Interfaz de usuario.
    2. Selecciona un Tipo de búsqueda:

      • Selecciona Buscar con una respuesta para mostrar un resumen generativo encima de los resultados de búsqueda.
      • Selecciona Buscar con seguimiento para habilitar la búsqueda conversacional con resúmenes generativos y preguntas de seguimiento.
    3. En la sección Modelos de lenguaje extensos para crear resúmenes, selecciona un modelo.

  • En el caso de las llamadas a métodos, el modelo estable es el predeterminado. Para usar un modelo de LLM que no sea el modelo estable, consulta Especificar el modelo de resumen y Especificar el modelo de respuesta.

    Pasos siguientes

  • Añade el widget de búsqueda a una página web.

  • Usa la API de búsqueda para consultar datos en tus aplicaciones de búsqueda genéricas.