Cómo obtener resultados de la búsqueda

En esta página, se muestra cómo obtener una vista previa de los resultados de la búsqueda con la consola de Google Cloud y obtenerlos con la API.

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

El resumen de búsquedas difiere según el modelo

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

  • Para cambiar o ver el modelo de LLM que se usa en la página Preview de la IU, ve a la página Configurations > pestaña UI de tu app.

  • Para las llamadas a métodos, si quieres usar un modelo LLM que no sea el estable, consulta Especifica el modelo de resumen.

Cómo obtener resultados de la búsqueda de una app con datos de sitios web

Console

Para usar la consola de Google Cloud y obtener una vista previa de los resultados de la búsqueda de una app con datos de sitios web, sigue estos pasos:

  1. En la consola de Google Cloud, ve a la página Agent Builder.

    Agent Builder

  2. Haz clic en el nombre de la app que deseas editar.

  3. Haz clic en Vista previa.

  4. Abre la página Preview en la consola.

  5. Opcional: Si conectaste varios almacenes de datos a tu app, pero solo quieres obtener resultados de un almacén de datos específico, selecciona el almacén de datos del que deseas obtener resultados.

  6. Escribe una búsqueda.

    1. Si habilitaste la función de autocompletado, verás una lista de sugerencias debajo de la barra de búsqueda a medida que escribes.
  7. Haz clic en Intro para enviar la consulta.

    1. Debajo de la barra de búsqueda, aparece una lista de resultados de la búsqueda.
    2. Cada resultado contiene un título, un fragmento y una URL.
    3. Si haces clic en un resultado, se abrirá esa URL.
  8. Haz clic en la flecha debajo de la lista de resultados para cargar la siguiente página de resultados.

REST

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

  1. Busca el ID de tu app. Si ya tienes el ID de tu app, ve al siguiente paso.

    1. En la consola de Google Cloud, ve a la página Agent Builder.

      Ve a Apps.

    2. En la página Apps, busca el nombre de tu app y obtén su ID de la columna ID.

  2. Obtén resultados de la 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"
     },
     "dataStoreSpecs": [{"DATA_STORE_SPEC"}]
    }'
    

    Reemplaza lo siguiente:

    • PROJECT_ID: Es el ID de tu Google Cloud proyecto.
    • APP_ID: El ID de la app de Vertex AI Search que quieres consultar.
    • QUERY: Es el texto de la búsqueda.
    • PAGE_SIZE: Es la cantidad de resultados que muestra la búsqueda. El tamaño de página máximo permitido depende del tipo de datos. Los tamaños de página superiores al valor máximo se convierten al valor máximo.

      • Sitios web con indexación básica: 10 predeterminado, 25 máximo
      • Sitios web con indexación avanzada: 25 predeterminado, 50 máximo
      • Otro: 50 predeterminado, 100 máximo
    • 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 para mostrar, los resultados del 2 al 12 se muestran en la primera página.

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

    • USER_COUNTRY_CODE: Es la ubicación del usuario. Este par clave-valor es la única entrada admitida para el campo de mapa params. El valor predeterminado es vacío. Para conocer los valores aceptables, consulta Códigos de país en la documentación de referencia de la API de JSON de Programmable Search Engine.

    • SEARCH_TYPE: Es el tipo de búsqueda que se 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: Es un campo de texto para filtrar tu búsqueda con una expresión de filtro. El valor predeterminado es una string vacía. Para obtener más información sobre el uso del campo filter, consulta Cómo filtrar la búsqueda de sitios web.

    • BOOST_SPEC: es opcional. Es una especificación para mejorar o ocultar documentos. Valores:

      • BOOST: Un número de punto flotante en el rango [-1,1]. Cuando el valor es negativo, los resultados se degradan (aparecen más abajo en los resultados). Cuando el valor es positivo, los resultados se promocionan (aparecen más arriba en los resultados).
      • CONDITION: Es una expresión de filtro de texto para seleccionar los documentos a los que se aplica la mejora. El filtro debe evaluarse como un valor booleano. Para obtener información sobre la mejora de la búsqueda estructurada, consulta Cómo mejorar los resultados de la búsqueda.
    • RESULT_MODE: Determina si los resultados de la búsqueda se muestran 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 se activa el fragmentación para un almacén de datos, el valor predeterminado es chunks. De lo contrario, el valor predeterminado es documents. Para obtener información sobre el corte de documentos, consulta Cómo analizar y dividir documentos. Este campo está en versión preliminar pública. Para usarlo, cambia v1 a v1alpha en el comando curl.

    • DATA_STORE_SPEC: Filtra un almacén de datos específico para realizar la búsqueda. Usa dataStoreSpecs si tu app de búsqueda está conectada a varios almacenes de datos, pero deseas obtener resultados de un almacén de datos específico.

C#

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

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

using Google.Api.Gaxs="devsite-xref-link" href="https://cloud.google.com/dotnet/docs/reference/Google.Protobuf/latest/Google.Protobuf.WellKnownTypes.Api.html" track-type="exampleCode" track-nam<e="xref>Link" track-metada<ta-lang=>"DOTNET" <track-m>etadata-modifier="Google.Protobuf.WellKnownTypes" track-metadata-href="https://cloud.google.com/dotnet/docs/reference/Google.Protobuf/latest/Google.Protobuf.WellKnownTypes.Api.html">Api.Gax;
using Google.Cloud.DiscoveryEngine.V1Beta;
using Google.Protobuf.WellKnownTypes;
using System;

public sealed partial class GeneratedSearchServiceClientSnippets
{
    /// summarySnippet 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/refere"nce/help/"cl"ient-confi"gu"ration#endpo"in"t.
    /// /rema"rks
    public void SearchRequestObject()
    {
        // Create client
        S"earchServ"ic"eClient se"ar"chServiceCli"en"t = Sear"chServiceClient.Create("");
        // Initialize request argument(s)
  ""      SearchRequest requ""est = 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.T""yp""es.BoostSpec(),
            Params = { { , new Value() }, },
            QueryExpansionSpec = new SearchRequest.Types.QueryExpansionSpec(),
            SpellCorrectionSpec = new SearchR""equest.Types.SpellCorrectionSpec(),
            UserPseudoId = ,
            ImageQuery = new SearchRequest.Types.ImageQuery(),
            SafeSearc""h = false,
            UserInfo = new UserInfo(),
            UserLabels = { { ,  }, },
            EmbeddingSpec = new SearchRequest.Types.EmbeddingSpec(),
            ContentSearchSpec = new SearchRequest.Types.ContentSearc""hSpec(),
            Rankin""gExpression = ,
            NaturalLanguageQueryUnderstandingSpec = new SearchRequest".Types.Na"tu"ralLanguag"eQ"ueryUndersta"nd"ingSpec()",
            CanonicalFilter = ,
            SearchAsYouTypeSpec = new SearchRequest.Types.SearchAsYouTypeSpec(),
            DataStoreSpecs =
            {
                new SearchRequest.Types.DataStoreSpec(),
            },
            LanguageCode = ,
            RegionCode = ,
            SessionAsSessionName = Session<Name.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
        PagedEnumerableSearchResponse, SearchResponse.Types.SearchResult response = searchServiceClient.Search(request);

        // Iterate over all response items, lazily performing RPCs as required
 "       foreach (Se"archResponse.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 (Searc'hResponse page in response.AsRawResponses())
        {
            // Do something with each p<age 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 its the final page), performing as many RPCs as required
        int pageSize = 10;
        PageSearchResponse.Types.SearchResult singlePage = response.ReadPage(pageSize);
        // Do something with the page of items
        Console.WriteLine($A page of {pageSize} results (unless its 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 de Java del compilador de agentes de Vertex AI.

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


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 de Node.js del compilador de agentes de Vertex AI.

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

/**
 * 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 de PHP del compilador de agentes de Vertex AI.

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

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

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

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

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


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

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

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

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

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

    page_result = client.search(request)

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

    return page_result

Ruby

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

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

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

Cómo obtener resultados de la búsqueda de una app con datos de sitios web (clave de API)

Si deseas 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, excepto que solo se puede usar para buscar sitios web públicos.

El método searchLite es particularmente 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 de usuario.

  • Migraste a Vertex AI Search desde la API de Custom Search Site Restricted JSON del Motor de Búsqueda Programable.

  • No quieres usar el widget de búsqueda.

Antes de comenzar

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 Implementa la app de búsqueda (clave de API).

Procedimiento

REST

Para usar la API y obtener resultados de la búsqueda de una app con datos de sitios web públicos autenticados con una clave de API, usa el método engines.servingConfigs.searchLite:

  1. Busca el ID de tu app. Si ya tienes el ID de tu app, ve al siguiente paso.

    1. En la consola de Google Cloud, ve a la página Agent Builder.

      Ve a Apps.

    2. En la página Apps, busca el nombre de tu app y obtén su ID de la columna ID.

  2. Ejecuta el siguiente comando de curl para obtener resultados de la 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",
    }'
    

    Reemplaza lo siguiente:

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

    • API_KEY: Es la cadena de tu clave de API.

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

    • APP_ID: El ID de la app de Vertex AI Search que quieres consultar.

    • QUERY: Es el texto de la búsqueda.

Python

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

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


from google.api_core.client_options import ClientOptions
from google.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

Obtén resultados de la búsqueda de una app con datos estructurados o no estructurados

Puedes obtener una vista previa de los resultados de la búsqueda desde la consola de Google Cloud o obtenerlos con la API.

Console

Para usar la consola de Google Cloud y obtener una vista previa de los resultados de la búsqueda de una app con datos estructurados o no estructurados, sigue estos pasos:

  1. Abre la página Preview en la consola.
  2. Escribe una búsqueda.
    1. Si habilitaste el autocompletado en el paso 1, verás una lista de sugerencias de autocompletado debajo de la barra de búsqueda a medida que escribas.
  3. Opcional: Si conectaste varios almacenes de datos a tu app, pero solo quieres obtener resultados de un almacén de datos específico, selecciona el almacén de datos del que deseas obtener resultados.
  4. Haz clic en Intro para enviar la consulta.
    1. Debajo de la barra de búsqueda, aparece una lista de resultados de la búsqueda.
    2. Si no se define ninguna asignación de atributos en la página Configuraciones, cada resultado de la búsqueda aparecerá como una lista de nombres y valores de atributos sin procesar.
    3. Si se guardaron asignaciones de atributos en la página Configuraciones, los resultados de la búsqueda mostrarán las mismas imágenes que ves en la vista previa de la página Configuraciones.
  5. Si se especificaron facetas en la página Configuraciones, se mostrarán de la misma manera.
  6. Haz clic en la flecha debajo de la lista de resultados para cargar la siguiente página de resultados.

REST

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

  1. Busca el ID de tu app. Si ya tienes el ID de tu app, ve al siguiente paso.

    1. En la consola de Google Cloud, ve a la página Agent Builder.

      Ve a Apps.

    2. En la página Apps, busca el nombre de tu app y obtén su ID de la columna ID.

  2. Obtén resultados de la 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"}],
    }'
    

    Reemplaza lo siguiente:

    • PROJECT_ID: Es el ID de tu Google Cloud proyecto.
    • PROJECT_ID: Es el ID de tu Google Cloud proyecto.
    • APP_ID: El ID de la app de Vertex AI Search que quieres consultar.
    • QUERY: Es el texto de la búsqueda.
    • USER_PSEUDO_ID: es opcional. Este es un identificador seudónimo para hacer un seguimiento de un visitante de búsqueda. Google recomienda usar este campo, que mejora el rendimiento del modelo y la calidad de la personalización. Puedes usar una cookie HTTP para este campo, que identifica de forma única a un visitante en un solo dispositivo. Este identificador no cambia cuando el visitante accede o sale de un sitio web. No configures este campo con el mismo identificador para varios usuarios, ya que esto combinaría sus historias de eventos y degradaría la calidad del modelo. No incluyas información de identificación personal (PII) en este campo.
    • PAGE_SIZE: Es la cantidad de resultados que muestra la búsqueda. El tamaño de página máximo permitido depende del tipo de datos. Los tamaños de página superiores al valor máximo se convierten al valor máximo.

      • Sitios web con indexación básica: 10 predeterminado, 25 máximo
      • Sitios web con indexación avanzada: 25 predeterminado, 50 máximo
      • Otro: 50 predeterminado, 100 máximo
    • OFFSET: es opcional. Es 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 se mostrarán, los resultados del 2 al 11 se mostrarán en la primera página.

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

    • FILTER: es opcional. Es 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 Cómo filtrar la búsqueda de datos estructurados o no estructurados.

    • BOOST_SPEC: es opcional. Es una especificación para mejorar o ocultar documentos. Valores:

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

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

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

    • QUERY_EXPANSION_SPEC: es opcional. Es una especificación para determinar en qué condiciones debe ocurrir la expansión de la consulta. El valor predeterminado es DISABLED.

    • SPELL_CORRECTION_SPEC: es opcional. Es una especificación para determinar en qué condiciones debe ocurrir la corrección ortográfica. El valor predeterminado es AUTO.

    • CONTENT_SEARCH_SPEC: es opcional. Para obtener fragmentos, respuestas extractivas, segmentos extractivos y resúmenes de búsqueda. Solo para datos no estructurados. Para obtener más información, consulte:

    • DATA_STORE_SPEC: Filtra un almacén de datos específico para realizar la búsqueda. Esto se puede usar si tu app de búsqueda está conectada a varios almacenes de datos.

    • Cómo ver los resultados de la búsqueda guiada en la respuesta de búsqueda:

      Los resultados de la búsqueda guiada se muestran con respuestas de búsqueda para la búsqueda no estructurada y la búsqueda estructurada. El resultado de la búsqueda guiada contiene una lista de pares clave-valor de atributos extraídos según los documentos de resultados de la búsqueda. Esto permite a los usuarios definir mejor sus resultados de la búsqueda usando algunas claves de atributos y valores como filtros.

      En esta respuesta de ejemplo, se usó el color verde para definir mejor los resultados de la búsqueda mediante la emisión de 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 de C# del compilador de agentes de Vertex AI.

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

using Google.Api.Gaxs="devsite-xref-link" href="https://cloud.google.com/dotnet/docs/reference/Google.Protobuf/latest/Google.Protobuf.WellKnownTypes.Api.html" track-type="exampleCode" track-nam<e="xref>Link" track-metada<ta-lang=>"DOTNET" <track-m>etadata-modifier="Google.Protobuf.WellKnownTypes" track-metadata-href="https://cloud.google.com/dotnet/docs/reference/Google.Protobuf/latest/Google.Protobuf.WellKnownTypes.Api.html">Api.Gax;
using Google.Cloud.DiscoveryEngine.V1Beta;
using Google.Protobuf.WellKnownTypes;
using System;

public sealed partial class GeneratedSearchServiceClientSnippets
{
    /// summarySnippet 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/refere"nce/help/"cl"ient-confi"gu"ration#endpo"in"t.
    /// /rema"rks
    public void SearchRequestObject()
    {
        // Create client
        S"earchServ"ic"eClient se"ar"chServiceCli"en"t = Sear"chServiceClient.Create("");
        // Initialize request argument(s)
  ""      SearchRequest requ""est = 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.T""yp""es.BoostSpec(),
            Params = { { , new Value() }, },
            QueryExpansionSpec = new SearchRequest.Types.QueryExpansionSpec(),
            SpellCorrectionSpec = new SearchR""equest.Types.SpellCorrectionSpec(),
            UserPseudoId = ,
            ImageQuery = new SearchRequest.Types.ImageQuery(),
            SafeSearc""h = false,
            UserInfo = new UserInfo(),
            UserLabels = { { ,  }, },
            EmbeddingSpec = new SearchRequest.Types.EmbeddingSpec(),
            ContentSearchSpec = new SearchRequest.Types.ContentSearc""hSpec(),
            Rankin""gExpression = ,
            NaturalLanguageQueryUnderstandingSpec = new SearchRequest".Types.Na"tu"ralLanguag"eQ"ueryUndersta"nd"ingSpec()",
            CanonicalFilter = ,
            SearchAsYouTypeSpec = new SearchRequest.Types.SearchAsYouTypeSpec(),
            DataStoreSpecs =
            {
                new SearchRequest.Types.DataStoreSpec(),
            },
            LanguageCode = ,
            RegionCode = ,
            SessionAsSessionName = Session<Name.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
        PagedEnumerableSearchResponse, SearchResponse.Types.SearchResult response = searchServiceClient.Search(request);

        // Iterate over all response items, lazily performing RPCs as required
 "       foreach (Se"archResponse.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 (Searc'hResponse page in response.AsRawResponses())
        {
            // Do something with each p<age 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 its the final page), performing as many RPCs as required
        int pageSize = 10;
        PageSearchResponse.Types.SearchResult singlePage = response.ReadPage(pageSize);
        // Do something with the page of items
        Console.WriteLine($A page of {pageSize} results (unless its 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 de Java del compilador de agentes de Vertex AI.

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


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 de Node.js del compilador de agentes de Vertex AI.

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

/**
 * 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 de PHP del compilador de agentes de Vertex AI.

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

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

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

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

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


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

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

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

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

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

    page_result = client.search(request)

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

    return page_result

Ruby

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

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

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

En el caso de la búsqueda de contenido multimedia, Vertex AI Agent Builder ofrece dos tipos de comportamiento de búsqueda:

  • El usuario escribe la búsqueda y presiona Intro. Esta es la opción predeterminada y tiene el mismo comportamiento que la búsqueda en el widget y la búsqueda de apps no multimedia (genéricas). Consulta Cómo obtener resultados de la búsqueda de una app con datos estructurados o no estructurados.

  • Se muestra un nuevo resultado de la búsqueda después de cada letra que ingresa el usuario. Esto se denomina búsqueda mientras escribes y es especialmente útil para los usuarios que ingresan sus búsquedas a través de interfaces más incómodas, como el control remoto de una televisión.

Para obtener resultados de la búsqueda mientras escribes en una app de música, sigue estos pasos:

Console

Para usar la consola de Google Cloud y habilitar la búsqueda mientras escribes para una app de widget, sigue estos pasos:

  1. En la consola de Google Cloud, ve a la página Agent Builder.

    Agent Builder

  2. Haz clic en el nombre de la app de búsqueda de contenido multimedia en la que quieres usar la función de escribir para buscar.

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

  4. Haz clic en la pestaña IU.

  5. Haz clic en el botón de activación Habilitar la búsqueda mientras escribes.

  6. En el panel Vista previa, comienza a escribir una consulta.

    Los resultados de la búsqueda se actualizan después de cada pulsación de tecla.

  7. Para mantener la configuración de búsqueda mientras escribes, haz clic en Guardar y publicar.

REST

Usa el método dataStores.servingConfigs.search para obtener resultados de la búsqueda de una app de música:

  1. Busca el ID de tu app. Si ya tienes el ID de tu app, ve al siguiente paso.

    1. En la consola de Google Cloud, ve a la página Agent Builder.

      Ve a Apps.

    2. En la página Apps, busca el nombre de tu app y obtén su ID de la columna ID.

  2. Ejecuta el siguiente comando de curl para obtener resultados de la búsqueda mientras escribes.

    Todos los campos, excepto contentSearchSpec, se pueden usar junto con el campo searchAsYouTypeSpec. Para mayor claridad, se omitieron los campos opcionales del comando curl. Para conocer los campos opcionales, consulta Cómo obtener resultados de la búsqueda de una app con datos estructurados o no estructurados.

    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",
    "searchAsYouTypeSpec": {"condition": "ENABLED"}
    }'
    

    Reemplaza lo siguiente:

    • PROJECT_ID: Es el ID de tu Google Cloud proyecto.
    • PROJECT_ID: Es el ID de tu Google Cloud proyecto.
    • APP_ID: El ID de la app de Vertex AI Search que quieres consultar.
    • QUERY: Es el texto de la búsqueda.

    Haz clic para ver un ejemplo de comando curl.

    curl -X POST -H "Authorization: Bearer $(gcloud auth print-access-token)"
    -H "Content-Type: application/json"
    "https://discoveryengine.googleapis.com/v1/projects/12345/locations/global/collections/default_collection/engines/my-app_4321/servingConfigs/default_search:search"
    -d '{
         "query": "midsummer night",
         "searchAsYouTypeSpec": {"condition": "ENABLED"}
        }'

Próximos pasos