Surveiller les opérations de longue durée

Cette page explique comment gérer le cycle de vie d'une opération de longue durée (LRO) dans Vertex AI Agent Builder.

Un objet opération de longue durée est renvoyé lorsqu'un appel à une méthode peut prendre beaucoup de temps. Par exemple, l'API Vertex AI Agent Builder crée une opération de longue durée lorsque vous appelez documents.import via l'API ou les bibliothèques clientes. L'opération suit l'état de la tâche de traitement.

Vous pouvez utiliser les méthodes d'opérations de longue durée fournies par l'API Vertex AI Agent Builder pour vérifier l'état des opérations. Toi peut également répertorier ou interroger des opérations.

L'enregistrement d'une opération est conservé pendant environ 30 jours après l'opération. se termine, ce qui signifie que vous ne pouvez plus afficher ni répertorier une opération après ce délai.

Obtenir des informations sur une opération de longue durée

Vous trouverez ci-dessous la procédure à suivre pour obtenir les détails d'une opération.

REST

Pour connaître l'état d'une opération de longue durée et afficher ses détails, procédez comme suit :

  1. Recherchez le nom de l'opération de l'une des deux manières suivantes :

    • Après avoir appelé une méthode qui renvoie une opération de longue durée, examinez la réponse.

      Par exemple, si vous appelez documents.import, le début de la réponse se présente comme suit :

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

      La valeur name de la réponse fournit le nom de l'opération, qui peut être utilisée pour demander l'état de l'opération. N'incluez pas les citations lorsque vous copiez le nom de l'opération.

    • Obtenez le nom de l'opération en répertoriant les opérations de longue durée.

  2. Appelez la méthode operations.get sur la ressource ayant créé l'opération :

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

    OPERATION_NAME : nom de l'opération de l'étape précédente.

    Les premières lignes de la réponse de la commande GET se présentent comme suit:

    {
      "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

Pour en savoir plus, consultez les API Python de Vertex AI Agent Builder documentation de référence.

Pour vous authentifier auprès de Vertex AI Agent Builder, configurez les identifiants par défaut de l'application. Pour en savoir plus, consultez Configurer l'authentification pour un environnement de développement 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

Répertorier les opérations de longue durée

La procédure suivante montre comment lister les opérations d'une ressource Google Cloud.

REST

Pour lister les opérations de longue durée d'une ressource Google Cloud, procédez comme suit :

  • Appelez la méthode operations.list :

    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: ID du data store Vertex AI Agent Builder qui a été créée avec votre moteur. Dans l'URL de la console Google Cloud, l'ID du store de données apparaît après engines/ et avant /data.

Python

Pour en savoir plus, consultez la documentation de référence de l'API Python Vertex AI Agent Builder.

Pour vous authentifier auprès de Vertex AI Agent Builder, configurez le service Identifiants par défaut de l'application. Pour en savoir plus, consultez Configurer l'authentification pour un environnement de développement 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

Interrogez une opération de longue durée

Vous trouverez ci-dessous la procédure à suivre pour interroger l'état d'une opération.

REST

Pour interroger l'opération de longue durée jusqu'à ce qu'elle se termine, procédez comme suit:

  1. Exécutez la commande suivante, qui appelle la méthode operations.get à plusieurs reprises, en utilisant un délai de 10 secondes entre chaque requête :

    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: nom de l'opération, indiqué dans la section Obtenir les détails sur une opération de longue durée. Par exemple : projects/12345/locations/global/collections/default_collection/dataStores/my-datastore_4321/branches/0/operations/import-documents-56789.

  2. Arrêtez la tâche d'interrogation (Control+Z) lorsque l'état indique "done": true.

Python

Pour en savoir plus, consultez la documentation de référence de l'API Python Vertex AI Agent Builder.

Pour vous authentifier auprès de Vertex AI Agent Builder, configurez les identifiants par défaut de l'application. Pour en savoir plus, consultez Configurer l'authentification pour un environnement de développement 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