Lang andauernde Vorgänge überwachen

Auf dieser Seite wird beschrieben, wie Sie den Lebenszyklus eines lang laufenden Vorgangs (Long-Running Operation, LRO) in Vertex AI Agent Builder verwalten.

Ein Objekt vom Typ long-running operation wird zurückgegeben, wenn ein Methodenaufruf sehr lange dauern kann. Die Vertex AI Agent Builder API erstellt beispielsweise einen Vorgang mit langer Ausführungszeit, wenn Sie documents.import über die API oder Clientbibliotheken aufrufen. Der Vorgang verfolgt den Status des Verarbeitungsjobs.

Sie können die Methoden für Vorgänge mit langer Ausführungszeit verwenden, die von der Vertex AI Agent Builder API bereitgestellt werden, um den Status der Vorgänge zu prüfen. Sie können auch Vorgänge auflisten oder abfragen.

Der Datensatz eines Vorgangs wird für etwa 30 Tage gespeichert, nachdem der Vorgang abgeschlossen wurde. Dies bedeutet, dass Sie nach diesem Zeitpunkt den Vorgang nicht mehr aufrufen oder auflisten können.

Details zu einem lang andauernden Vorgang abrufen

Im Folgenden wird gezeigt, wie Sie Details zu einem Vorgang abrufen.

REST

So rufen Sie den Status und Details zu einem lang andauernden Vorgang auf:

  1. Sie haben zwei Möglichkeiten, den Namen des Vorgangs zu ermitteln:

    • Nachdem Sie eine Methode aufgerufen haben, die einen lang andauernden Vorgang zurückgibt, prüfen Sie die Antwort.

      Wenn du beispielsweise documents.import aufrufst, sieht der Anfang der Antwort in etwa so aus:

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

      Der Wert name in der Antwort ist der Vorgangsname, mit dem der Vorgangsstatus abgefragt werden kann. Kopieren Sie den Vorgangsnamen ohne Anführungszeichen.

    • Sie können den Vorgangsnamen abrufen, indem Sie Vorgänge mit langer Ausführungszeit auflisten.

  2. Rufen Sie die Methode operations.get für die Ressource auf, mit der der Vorgang erstellt wurde:

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

    OPERATION_NAME: Der Name des Vorgangs aus dem vorherigen Schritt.

    Die ersten Zeilen der Antwort des Befehls GET sehen in etwa so aus:

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

Weitere Informationen finden Sie in der Referenzdokumentation zur Vertex AI Agent Builder Python API.

Richten Sie zur Authentifizierung bei Vertex AI Agent Builder Standardanmeldedaten für Anwendungen ein. Weitere Informationen finden Sie unter Authentifizierung für eine lokale Entwicklungsumgebung einrichten.

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

Lange laufende Vorgänge auflisten

Im Folgenden wird gezeigt, wie Sie die Vorgänge für eine Google Cloud-Ressource auflisten.

REST

So listen Sie die lang andauernden Vorgänge für eine Google Cloud-Ressource auf:

  • Rufen Sie die Methode operations.list auf.

    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: Die ID des Vertex AI Agent Builder-Datenspeichers, der mit Ihrer Engine erstellt wurde. In der URL der Google Cloud Console wird die Datenspeicher-ID nach engines/ und vor /data angezeigt.

Python

Weitere Informationen finden Sie in der Referenzdokumentation zur Vertex AI Agent Builder Python API.

Richten Sie zur Authentifizierung bei Vertex AI Agent Builder Standardanmeldedaten für Anwendungen ein. Weitere Informationen finden Sie unter Authentifizierung für eine lokale Entwicklungsumgebung einrichten.

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

Lang andauernden Vorgang abfragen

Im Folgenden wird gezeigt, wie der Status eines Vorgangs abgefragt wird.

REST

So können Sie den Vorgang mit langer Ausführungszeit so lange abfragen, bis er abgeschlossen ist:

  1. Führen Sie den folgenden Befehl aus, um die Methode operations.get wiederholt aufzurufen und dabei zwischen den einzelnen Anfragen einen Backoff von 10 Sekunden zu verwenden:

    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: Der Vorgangsname, siehe Details zu einem lang andauernden Vorgang abrufen. Beispiel: projects/12345/locations/global/collections/default_collection/dataStores/my-datastore_4321/branches/0/operations/import-documents-56789

  2. Beenden Sie den Abfragejob (Control+Z), wenn der Status "done": true lautet.

Python

Weitere Informationen finden Sie in der Referenzdokumentation zur Vertex AI Agent Builder Python API.

Richten Sie zur Authentifizierung bei Vertex AI Agent Builder Standardanmeldedaten für Anwendungen ein. Weitere Informationen finden Sie unter Authentifizierung für eine lokale Entwicklungsumgebung einrichten.

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