Supervisa las operaciones de larga duración

En esta página, se describe cómo administrar el ciclo de vida de una operación de larga duración (LRO) en Vertex AI Agent Builder.

Se muestra un objeto de operación de larga duración cuando una llamada a un método puede tardar mucho tiempo en completarse. Por ejemplo, la API de Vertex AI Agent Builder crea una operación de larga duración cuando llamas a documents.import a través de la API o las bibliotecas cliente. La operación realiza un seguimiento del estado del trabajo de procesamiento.

Puedes usar los métodos de operaciones de larga duración que proporciona la API de Vertex AI Agent Builder para verificar el estado de las operaciones. También puedes enumerar o sondear operaciones.

El registro de una operación se conserva aproximadamente 30 días después de que esta finaliza, lo que significa que no puedes ver ni enumerar una operación después de ese tiempo.

Obtén detalles sobre una operación de larga duración

A continuación, se muestra cómo obtener detalles sobre una operación.

REST

Para obtener el estado de una operación de larga duración y ver sus detalles, sigue estos pasos:

  1. Busca el nombre de la operación de una de estas dos maneras:

    • Después de realizar una llamada a un método que muestra una operación de larga duración, revisa la respuesta.

      Por ejemplo, si llamas a documents.import, el comienzo de la respuesta se ve de la siguiente manera:

      {
        "name": "projects/12345/locations/global/collections/default_collection/dataStores/my-datastore_4321/branches/0/operations/import-documents-56789",
        "metadata": {
          "@type": "type.googleapis.com/google.cloud.discoveryengine.v1beta.ImportDocumentsMetadata"
        }
      }
      

      El valor name en la respuesta proporciona el nombre de la operación, que se puede usar para consultar el estado de la operación. No incluyas las comillas cuando copies el nombre de la operación.

    • Para obtener el nombre de la operación, enumera las operaciones de larga duración.

  2. Llama al método operations.get en el recurso que creó la operación:

    curl -X GET \
        -H "Authorization: Bearer $(gcloud auth print-access-token)" \
        "https://discoveryengine.googleapis.com/v1beta/OPERATION_NAME"
    

    OPERATION_NAME: Es el nombre de la operación del paso anterior.

    Las primeras líneas de la respuesta del comando GET se ven de la siguiente manera:

    {
      "operations": [
        {
          "name": "projects/12345/locations/global/collections/default_collection/dataStores/my-datastore_4321/branches/0/operations/import-documents-56789",
          "metadata": {
            "@type": "type.googleapis.com/google.cloud.discoveryengine.v1alpha.ImportDocumentsMetadata",
          }
        }
      ]
    }
    

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.cloud import discoveryengine
from google.longrunning import operations_pb2

# TODO(developer): Uncomment these variables before running the sample.
# Example: `projects/{project}/locations/{location}/collections/{default_collection}/dataStores/{search_engine_id}/branches/{0}/operations/{operation_id}`
# operation_name = "YOUR_OPERATION_NAME"


def get_operation_sample(operation_name: str) -> operations_pb2.Operation:
    # Create a client
    client = discoveryengine.DocumentServiceClient()

    # Make GetOperation request
    request = operations_pb2.GetOperationRequest(name=operation_name)
    operation = client.get_operation(request=request)

    # Print the Operation Information
    print(operation)

    return operation

Enumerar las operaciones de larga duración

A continuación, se muestra cómo enumerar las operaciones de un recurso de Google Cloud.

REST

Para generar una lista de las operaciones de larga duración de un recurso de Google Cloud, sigue estos pasos:

  • Llama al método operations.list de la siguiente forma:

    curl -X GET \
        -H "Authorization: Bearer $(gcloud auth print-access-token)" \
        "https://discoveryengine.googleapis.com/v1beta/projects/PROJECT_ID/locations/global/collections/default_collection/dataStores/DATA_STORE_ID/operations"
    

    DATA_STORE_ID: El ID del almacén de datos de Vertex AI Agent Builder que se creó con tu motor. En la URL de la consola de Google Cloud, el ID del almacén de datos aparece después de engines/ y antes de /data.

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 typing import Optional

from google.cloud import discoveryengine
from google.longrunning import operations_pb2

# TODO(developer): Uncomment these variables before running the sample.
# project_id = "YOUR_PROJECT_ID"
# location = "YOUR_PROCESSOR_LOCATION"  # Options: "global"
# search_engine_id = "YOUR_SEARCH_ENGINE_ID"

# Create filter in https://google.aip.dev/160 syntax
# operations_filter = "YOUR_FILTER"


def list_operations_sample(
    project_id: str,
    location: str,
    search_engine_id: str,
    operations_filter: Optional[str] = None,
) -> operations_pb2.ListOperationsResponse:
    # Create a client
    client = discoveryengine.DocumentServiceClient()

    # The full resource name of the search engine branch.
    name = f"projects/{project_id}/locations/{location}/collections/default_collection/dataStores/{search_engine_id}"

    # Make ListOperations request
    request = operations_pb2.ListOperationsRequest(
        name=name,
        filter=operations_filter,
    )

    # Make ListOperations request
    response = client.list_operations(request=request)

    # Print the Operation Information
    for operation in response.operations:
        print(operation)

    return response

Cómo sondear una operación de larga duración

A continuación, se muestra cómo sondear el estado de una operación.

REST

Para sondear la operación de larga duración hasta que finalice, sigue estos pasos:

  1. Ejecuta el siguiente comando, que llama al método operations.get de forma reiterada, con una retirada de 10 segundos entre cada solicitud:

    while true; \
        do curl -X GET \
        -H "Authorization: Bearer $(gcloud auth print-access-token)" \
        "https://discoveryengine.googleapis.com/v1beta/OPERATION_NAME"; \
        sleep 10; \
        done
    

    OPERATION_NAME: El nombre de la operación, que se encuentra en Obtén detalles sobre una operación de larga duración. Por ejemplo: projects/12345/locations/global/collections/default_collection/dataStores/my-datastore_4321/branches/0/operations/import-documents-56789

  2. Detén el trabajo de sondeo (Control+Z) después de que el estado muestre "done": true.

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 time import sleep

from google.cloud import discoveryengine
from google.longrunning import operations_pb2

# TODO(developer): Uncomment these variables before running the sample.
# Example: `projects/{project}/locations/{location}/collections/{default_collection}/dataStores/{search_engine_id}/branches/{0}/operations/{operation_id}`
# operation_name = "YOUR_OPERATION_NAME"


def poll_operation_sample(
    operation_name: str, limit: int = 10
) -> operations_pb2.Operation:
    # Create a client
    client = discoveryengine.DocumentServiceClient()

    # Make GetOperation request
    request = operations_pb2.GetOperationRequest(name=operation_name)

    for _ in range(limit):
        operation = client.get_operation(request=request)
        # Print the Operation Information
        print(operation)

        # Stop polling when Operation is no longer running
        if operation.done:
            break

        # Wait 10 seconds before polling again
        sleep(10)

    return operation