Agent Platform SDK für Python: Migrationsleitfaden für Version 2.0.1

Das Paket google-cloud-aiplatform enthält sowohl das AI Platform SDK for Python als auch die Python-Clientbibliothek für die Gemini Enterprise Agent Platform. Auf dieser Seite werden die folgenden Kategorien von Änderungen im google-cloud-aiplatform-Paket behandelt:

  • Generative AI-Module werden zum Google Gen AI SDK migriert: Die folgenden generativen AI-Module im Paket vertexai sind veraltet und werden zum Google Gen AI SDK (google-genai) migriert:

    • vertexai.generative_models
    • vertexai.language_models
    • vertexai.vision_models
    • vertexai.caching
    • vertexai.tuning

    Informationen zum Migrieren der eingestellten Module zum Google Gen AI SDK finden Sie unter Generative AI-Module zum Google Gen AI SDK migrieren.

  • Umstrukturierung der Agent-Oberfläche:An den agentplatform-Modulen von google-cloud-aiplatform wurden die folgenden Änderungen vorgenommen:

    • Umbenennungen
    • Werbeaktionen auf oberster Ebene
    • Entfernen des globalen Initialisierers

    Informationen zur Migration zur neuen SDK-Struktur finden Sie unter Umstrukturierung des Agent Platform SDK.

  • Entkopplung von agentplatform: google-cloud-agentplatform ist jetzt eine eigenständige, schlanke Distribution und die empfohlene Installation für Agent-Arbeitslasten. Wenn Sie nur Agents erstellen, installieren Sie google-cloud-agentplatform, das keine generativen KI-Module enthält. agentplatform-Module decken die gängigen Integrationen wie [adk], [a2a], [agent_engines], [langchain], [ag2], [llama_index], [evaluation], [bigquery], [live] und [all] ab.

Was ist nicht betroffen?

Die klassische Machine-Learning-Oberfläche (Datasets, Training, Modelle, Vorhersage, Tracking, Pipelines) wird vollständig unterstützt, ist von den Änderungen in Version 2.0.1 nicht betroffen und hat kein Äquivalent im Google Gen AI SDK. Sie können weiterhin auf die Bewertung, die Agent Runtime, Prompts und Skills zugreifen, indem Sie google-cloud-aiplatform installieren. Sowohl google-cloud-aiplatform als auch google-genai sind in einer Umgebung vorhanden und google-genai ist jetzt eine feste Abhängigkeit von google-cloud-aiplatform:

import agentplatform

client = agentplatform.Client(project="my-project", location="global")
# client.evals                  client.prompts
# client.prompt_optimizer client.datasets           client.skills

vertexai.batch_prediction ist nicht veraltet, aber es gibt ein Google Gen AI SDK-Äquivalent, das das empfohlene Tool ist.

Generative AI-Module zum Google Gen AI SDK migrieren

Wenn Sie die generativen KI-Module im Paket google-cloud-aiplatform verwenden, folgen Sie den folgenden Empfehlungen, um zum Google Gen AI SDK (google-genai) zu migrieren:

  1. Legen Sie google-cloud-aiplatform < 2.0.0 fest, damit durch nicht verwandte Abhängigkeitsaktualisierungen die Module unter Ihnen nicht entfernt werden können.

  2. Suchen Sie in Ihrem Code nach den eingestellten Modulen:

    • vertexai.generative_models
    • vertexai.language_models
    • vertexai.vision_models
    • vertexai.caching
    • vertexai.tuning

    Wenn Sie eines der betroffenen Python-Module importieren, erhalten Sie die folgende Warnung zur Einstellung:

    UserWarning: This feature is deprecated as of June 24, 2025 and will be removed on
    June 24, 2026. For details, see
    https://cloud.google.com/vertex-ai/generative-ai/docs/deprecations/genai-vertexai-sdk.
    

    Führen Sie Ihre Testsuite mit -W error::UserWarning aus, um fehlende Importe zu erkennen.

  3. Ersetzen Sie vertexai.init(...) durch einen expliziten genai.Client(enterprise=True, project=..., location=...). Behalten Sie vertexai.init() bei, wenn Sie auch die klassische Oberfläche für maschinelles Lernen verwenden.

    Vorher

    # pip install google-cloud-aiplatform
    
    import vertexai
    from vertexai.generative_models import GenerativeModel
    
    vertexai.init(project="my-project", location="us-central1")
    
    # Model identity and config are bound at construction time.
    model = GenerativeModel("gemini-2.5-flash")
    

    Nach

    # pip install google-genai
    
    from google import genai
    from google.genai import types
    
    client = genai.Client(
        enterprise=True,
        project="my-project",
        location="global",
    )
    

    Oder konfigurieren Sie die Umgebung so:

    export GOOGLE_GENAI_USE_ENTERPRISE=true
    export GOOGLE_CLOUD_PROJECT=my-project
    export GOOGLE_CLOUD_LOCATION=global
    
    from google import genai
    
    client = genai.Client()
    

    Wichtige Überlegungen:

    • Der globale Status wird zu einem expliziten Client. vertexai.init() konfiguriert den gesamten Prozess. genai.Client() ist ein Objekt, das Sie übergeben. Mit genai.Client() können Sie zwei Projekte oder Regionen in einem Prozess verwenden.
    • Das Feld „enterprise=True“ darf nicht leer sein. Wenn Sie sie weglassen, wird die Gemini Developer API im Hintergrund aufgerufen, was zu einem Fehler bei den Standardanmeldedaten für Anwendungen führt oder einen API-Schlüssel erfordert.
    • Der Modellname wird von der Konstruktion zu jedem Aufruf verschoben. Es gibt kein „bind-once“-Modellobjekt. model= ist ein erforderliches Keyword-Argument für jeden client.models.*-Aufruf.
    • Die Authentifizierung ist unverändert. Standardanmeldedaten für Anwendungen gelten weiterhin und credentials= akzeptiert in beiden SDKs ein google.auth.credentials.Credentials.
    • vertexai.init() enthielt auch nicht generative Einstellungen wie staging_bucket, experiment, encryption_spec_key_name, service_account und network. genai.Client hat für sie keine Entsprechung.
    • Die neuere Schreibweise enterprise=True wird ab google-genai 2.20.0 akzeptiert, die ältere Version vertexai=True funktioniert jedoch in jeder Version und ist die sicherere Wahl.
  4. Prüfen Sie Ihren Code auf stille Änderungen, bei denen das Verhalten ohne Fehler abweicht. Diese werden kompiliert und ausgeführt, ändern aber ihre Bedeutung.

    Verhalten Vorher Nach
    response.text bei einer blockierten oder leeren Antwort Löst ValueError aus Gibt None zurück
    response.text mit mehreren Kandidaten Löst ValueError aus Gibt eine Warnung aus und gibt den ersten Kandidaten zurück
    Client-Targeting vertexai.init() Implizite Agent Platform Wenn vertexai=True weggelassen wird, wird die Gemini Developer API im Hintergrund verwendet.
    Einbettungen auto_truncate Die Standardeinstellung ist True. Nicht festgelegt; Serverstandard wird angewendet
    Eine Python-Funktion, die als Tool übergeben wird Nicht unterstützt Wird automatisch vom SDK ausgeführt
    system_instruction Einmal an das Modell gebunden Muss bei jedem Anruf übergeben werden

    Die Änderung response.text sollte zuerst untersucht werden. Jedes try/except ValueError, das .text umschließt, wird zu nicht mehr benötigtem Code. Jedes ungeschützte .text kann jetzt None zurückgeben, wo zuvor str zurückgegeben wurde:

    if response.text is None:
        print(
            "blocked or empty:",
            response.prompt_feedback,
            response.candidates[0].finish_reason if response.candidates else None,
        )
    
  5. Lassen Sie google-cloud-aiplatform installiert, wenn Sie die Bewertung, die Agent Runtime, Prompts, Datasets, Skills und die gesamte klassische Oberfläche für maschinelles Lernen verwenden.

  6. Ändern Sie die Aufrufe in die neuen Versionen. Beginnen Sie mit mechanischen Umbenennungen und fahren Sie dann mit der config=-Konsolidierung fort.

Aufgabenbasierte Anrufänderungen

Hier sehen Sie die geänderten Aufrufe basierend auf der Aufgabe:

Textgenerierung

Bei Aufgaben zur Textgenerierung sind alle Argumente nur als Schlüsselwort verfügbar. Positionsaufrufe lösen TypeError aus.

Vorher

model = GenerativeModel("gemini-2.5-flash")

response = model.generate_content("Why is the sky blue?")
print(response.text)

Nach

response = client.models.generate_content(
    model="gemini-3.5-flash",
    contents="Why is the sky blue?",
)
print(response.text)

Streaming-Generierung

Bei Streaming-Generierungsaufgaben wird das Flag stream=True entfernt. Streaming ist jetzt eine separate Methode, die Iterator[types.GenerateContentResponse] zurückgibt. Verwenden Sie if chunk.text:, um vor dem Zugriff auf den Text zu prüfen, da jeder Chunk ein vollständiges Antwortobjekt ist und sein .text-Attribut manchmal None sein kann.

Vorher

stream = model.generate_content("Tell me a story in 300 words.", stream=True)
for chunk in stream:
    print(chunk.text, end="")

Nach

for chunk in client.models.generate_content_stream(
    model="gemini-3.5-flash",
    contents="Tell me a story in 300 words.",
):
    if chunk.text:
        print(chunk.text, end="")

Asynchrone Generierung

Bei asynchronen Generierungsaufgaben wurde das Suffix _async-Methodenname entfernt. Jeder asynchrone Aufruf befindet sich unter client.aio.<module> und hat denselben Methodennamen wie sein synchrones Pendant. Schließen Sie den Client mit await client.aio.aclose() oder verwenden Sie async with genai.Client(...).aio as aclient:.

Vorher

response = await model.generate_content_async("Why is the sky blue?")

async_stream = await model.generate_content_async("Why is the sky blue?", stream=True)
async for chunk in async_stream:
    print(chunk.text, end="")

Nach

response = await client.aio.models.generate_content(
    model="gemini-3.5-flash",
    contents="Why is the sky blue?",
)

# Note the `await` in front of the async iterator.
async for chunk in await client.aio.models.generate_content_stream(
    model="gemini-3.5-flash",
    contents="Tell me a story in 300 words.",
):
    print(chunk.text, end="")

Chatsitzungen

Beachten Sie die folgenden Änderungen für Aufgaben in Chatsitzungen:

  • Chats werden vom Client erstellt, nicht von einem Modellobjekt.
  • chat.history (Attribut) wird zu chat.get_history() (Methode). Die neue Methode verwendet curated: bool = False. Wenn Sie True übergeben, werden nur die beibehaltenen Turns zurückgegeben. Dafür gibt es kein altes Äquivalent.
  • client.aio.chats.create(...) gibt direkt ein AsyncChat zurück. Es werden nur send_message und send_message_stream erwartet.
  • Die Optionen für die einzelnen Züge werden in einem Argument zusammengefasst: send_message(message, config=types.GenerateContentConfig(...)). Der erste Parameter wird ebenfalls von content in message umbenannt.
  • start_chat(response_validation=False) ist eine neue Methode, für die es in früheren Versionen kein Äquivalent gab.

Vorher

model = GenerativeModel("gemini-2.5-flash")
chat = model.start_chat()

print(chat.send_message("Tell me a story").text)

for content in chat.history:
    print(content.role, content.parts)

Nach

chat = client.chats.create(model="gemini-3.5-flash")

print(chat.send_message("Tell me a story").text)

for content in chat.get_history():
    print(content.role, content.parts)

Konfiguration, Sicherheitseinstellungen und Systemanweisungen

Beachten Sie die folgenden Änderungen bei Aufgaben für Konfiguration, Sicherheitseinstellungen und Systemanweisungen:

  • Die folgenden Argumente werden als Felder von GenerateContentConfig in einem config= zusammengefasst:

    • generation_config
    • safety_settings
    • tools
    • tool_config
    • labels
    • system_instruction

    Ein einfaches dict funktioniert überall dort, wo ein Konfigurationstyp funktioniert.

  • system_instruction wird vom Modellkonstruktor in die Konfiguration pro Aufruf verschoben. In der früheren SDK-Version wurde system_instruction einmal beim Erstellen von GenerativeModel festgelegt. system_instruction muss jetzt bei jedem Aufruf übergeben oder in client.chats.create(config=...) enthalten sein.

  • Die Sicherheitseinstellungen ändern sich von dict zu list. Beispiel: [types.SafetySetting(category=c, threshold=t) for c, t in old_dict.items()]

  • Enumerationen werden als einfache Strings akzeptiert und umgewandelt.

  • Skalare Feldnamen bleiben ansonsten unverändert: temperature, top_p, top_k, candidate_count, max_output_tokens, stop_sequences, presence_penalty, frequency_penalty, seed, response_mime_type, response_schema, response_logprobs, logprobs.

  • Zu den neuen Feldern ohne altes Äquivalent gehören thinking_config, cached_content, automatic_function_calling, http_options, media_resolution und speech_config.

Vorher

from vertexai.generative_models import (
    GenerativeModel, GenerationConfig, HarmCategory, HarmBlockThreshold,
)

model = GenerativeModel(
    "gemini-2.5-flash",
    system_instruction=["Talk like a pirate.", "Don't use rude words."],
)

response = model.generate_content(
    contents="Why is the sky blue?",
    generation_config=GenerationConfig(temperature=0, top_p=0.95, max_output_tokens=100),
    safety_settings={
        HarmCategory.HARM_CATEGORY_HATE_SPEECH: HarmBlockThreshold.BLOCK_MEDIUM_AND_ABOVE,
        HarmCategory.HARM_CATEGORY_DANGEROUS_CONTENT: HarmBlockThreshold.BLOCK_ONLY_HIGH,
    },
)

Nach

from google.genai import types

response = client.models.generate_content(
    model="gemini-3.5-flash",
    contents="Why is the sky blue?",
    config=types.GenerateContentConfig(
      system_instruction="Talk like a pirate. Don't use rude words.",
      temperature=0,
      top_p=0.95,
      max_output_tokens=100,
      safety_settings=[
          types.SafetySetting(
              category="HARM_CATEGORY_HATE_SPEECH",
              threshold="BLOCK_MEDIUM_AND_ABOVE",
          ),
          types.SafetySetting(
              category=types.HarmCategory.HARM_CATEGORY_DANGEROUS_CONTENT,
              threshold=types.HarmBlockThreshold.BLOCK_ONLY_HIGH,
          ),
      ],
    ),
)

Multimodale Eingabe

Beachten Sie die folgenden Änderungen für Aufgaben mit multimodaler Eingabe:

Alt Neu
Part.from_uri(uri, mime_type), positionell zulässig Part.from_uri(file_uri=, mime_type=), nur Schlüsselwort, Parameter umbenannt
Part.from_data(data, mime_type) Part.from_bytes(data=, mime_type=), Methode umbenannt
Part.from_text(text) Part.from_text(text=), nur Keyword
Image.load_from_file(path) Kein Äquivalent. Öffnen Sie die Datei und verwenden Sie Part.from_bytes.
  • mime_type ist in types.Part.from_uri() optional (wird serverseitig abgeleitet), bleibt aber in types.Part.from_bytes() erforderlich.
  • client.files.upload(...) wird nur in der Gemini Developer API unterstützt. Für Agent Platform-Arbeitslasten können Sie Cloud Storage-URIs weiterhin mit from_uri oder Inline-Bytes mit from_bytes übergeben.

Vorher

from vertexai.generative_models import GenerativeModel, Part, Image

image = Image.load_from_file("image.jpg")
print(model.generate_content(["What is shown in this image?", image]).text)

image_part = Part.from_uri(
    "gs://cloud-samples-data/generative-ai/image/scones.jpg",
    mime_type="image/jpeg",
)

Nach

from google.genai import types

# Image.load_from_file has no equivalent: read the bytes yourself.
with open("image.jpg", "rb") as f:
    image = types.Part.from_bytes(data=f.read(), mime_type="image/jpeg")

response = client.models.generate_content(
    model="gemini-3.5-flash",
    contents=["What is shown in this image?", image],
)

image_part = types.Part.from_uri(
    file_uri="gs://cloud-samples-data/generative-ai/image/scones.jpg",
    mime_type="image/jpeg",
)

Funktionsaufrufe und Fundierung

Beachten Sie die folgenden Änderungen für Funktionsaufrufe und Grounding-Aufgaben:

  • Tools werden in config= verschoben. Es gibt kein tools=-Argument im Aufruf oder in einem Modellobjekt.
  • Tool.from_google_search_retrieval(grounding.GoogleSearchRetrieval()) wird zu types.Tool(google_search=types.GoogleSearch()). Eine Factory-Methode wird zu einem einfachen Feld. types.Tool hat auch ein separates google_search_retrieval-Feld.
  • response.function_calls ist der idiomatische Accessor und schlägt nicht fehl, wenn Teil 0 Text ist. Die alte Methode funktioniert weiterhin.
  • Das Roh-JSON-Schema wird in parameters_json_schema angegeben. Ein typisiertes types.Schema wird in parameters angegeben.
  • Sie können jetzt eine Python-Funktion als Tool übergeben. Der automatische Funktionsaufruf ist standardmäßig aktiviert, wenn Sie die Funktion übergeben. Wenn Sie eine manuelle Tool-Schleife portieren und ein Funktionsobjekt übergeben, beginnt das SDK mit der Ausführung Ihres Codes. Deaktivieren Sie den standardmäßigen automatischen Funktionsaufruf mit automatic_function_calling=types.AutomaticFunctionCallingConfig(disable=True).
  • Die folgenden neuen Tooltypen haben in früheren Versionen kein Äquivalent: code_execution, url_context, google_maps, computer_use, file_search, enterprise_web_search, mcp_servers.

Vorher

from vertexai.generative_models import GenerativeModel, FunctionDeclaration, Tool, grounding

weather_tool = Tool(function_declarations=[
    FunctionDeclaration(
        name="get_current_weather",
        description="Get the current weather in a given location",
        parameters={
            "type": "object",
            "properties": {"location": {"type": "string"}},
            "required": ["location"],
        },
    )
])

model = GenerativeModel("gemini-2.5-flash", tools=[weather_tool])
response = model.generate_content("What is the weather in Boston?")
call = response.candidates[0].content.parts[0].function_call

# Grounding
search_tool = Tool.from_google_search_retrieval(grounding.GoogleSearchRetrieval())

Nach

from google.genai import types

weather_tool = types.Tool(function_declarations=[
    types.FunctionDeclaration(
        name="get_current_weather",
        description="Get the current weather in a given location",
        parameters_json_schema={
            "type": "object",
            "properties": {"location": {"type": "string"}},
            "required": ["location"],
        },
    )
])

response = client.models.generate_content(
    model="gemini-3.5-flash",
    contents="What is the weather in Boston?",
    config=types.GenerateContentConfig(tools=[weather_tool]),
)
call = response.function_calls[0]

# Grounding
search_tool = types.Tool(google_search=types.GoogleSearch())

Einbettungen

Beachten Sie die folgenden Änderungen für Einbettungsaufgaben:

  • TextEmbeddingInput“ wurde entfernt. task_type und title sind jetzt pro Anfrage verfügbar. Batchanfragen mit gemischten Aufgaben müssen also in mehrere Aufrufe aufgeteilt werden.
  • Der Rückgabetyp wurde von einer direkten Liste in ein Antwortobjekt geändert. get_embeddings() hat direkt ein list[TextEmbedding] zurückgegeben, sodass Aufrufer die Liste direkt indexiert haben (embeddings[0].values). In der neuen Version gibt embed_content() ein EmbedContentResponse-Objekt mit einer .embeddings-Liste zurück, sodass Sie auf response.embeddings[0].values zugreifen müssen. Die einzelnen Einbettungsfelder (.values und .statistics) behalten ihre ursprünglichen Namen.
  • auto_truncate ist nicht mehr standardmäßig auf True eingestellt. Das neue Feld ist standardmäßig auf unset gesetzt. Wenn Sie sich auf das automatische Kürzen von zu langen Eingaben verlassen, legen Sie auto_truncate explizit fest.

Vorher

from vertexai.language_models import TextEmbeddingModel, TextEmbeddingInput

model = TextEmbeddingModel.from_pretrained("gemini-embedding-001")

text_input = TextEmbeddingInput(
    text="How do I get a driver's license?",
    task_type="RETRIEVAL_DOCUMENT",   # per input
    title="Driver's License",         # per input
)

embeddings = model.get_embeddings([text_input], output_dimensionality=3072, auto_truncate=True)
print(embeddings[0].values)

Nach

from google.genai import types

response = client.models.embed_content(
    model="gemini-embedding-2",
    contents="How do I get a driver's license?",
    config=types.EmbedContentConfig(
        task_type="RETRIEVAL_DOCUMENT",   # now per request
        title="Driver's License",         # now per request
        output_dimensionality=3072,
        auto_truncate=True,
    ),
)
print(response.embeddings[0].values)

Tokens zählen

Beachten Sie die folgenden Änderungen für Aufgaben zur Tokenzählung:

  • total_billable_characters wurde entfernt und es gibt keinen Ersatz. Alle Kostenschätzungen, die auf total_billable_characters basieren, müssen aus einem Generierungsaufruf heraus überarbeitet werden (z. B. anhand von total_tokens oder response.usage_metadata).
  • client.models.compute_tokens(...) wurde für Token-IDs und String-Teile hinzugefügt.
  • Die Offline-Zählung wurde über google.genai.local_tokenizer.LocalTokenizer hinzugefügt.

Vorher

model = GenerativeModel("gemini-2.5-flash")

response = model.count_tokens(["Why is the sky blue?"])
print(response.total_tokens)
print(response.total_billable_characters)

Nach

response = client.models.count_tokens(
    model="gemini-3.5-flash",
    contents=["Why is the sky blue?"],
)
print(response.total_tokens)
print(response.cached_content_token_count)

Kontext-Caching

Beachten Sie die folgenden Änderungen für Aufgaben zum Zwischenspeichern von Kontext:

  • ttl ändert den Typ von datetime.timedelta in einen Dauerstring wie "86400s".
  • Methoden für Ressourcenobjekte werden zu Clientmodulaufrufen.
  • update gibt ein neues Objekt zurück, anstatt das vorhandene zu ändern.

Vorher

import datetime
from vertexai.caching import CachedContent

cache = CachedContent.create(
    model_name="gemini-2.5-flash",
    system_instruction="Please answer my question formally",
    contents=contents,
    ttl=datetime.timedelta(days=1),
)
cache.update(ttl=datetime.timedelta(days=2))
cache.delete()

Nach

from google.genai import types

cache = client.caches.create(
    model="gemini-3.5-flash",
    config=types.CreateCachedContentConfig(
        contents=contents,
        system_instruction="Please answer my question formally",
        ttl="86400s",
    ),
)
cache = client.caches.update(
    name=cache.name, config=types.UpdateCachedContentConfig(ttl="172800s")
)
client.caches.delete(name=cache.name)

Batch-Vorhersage und ‑optimierung

Beachten Sie die folgenden Änderungen für Batchvorhersage- und Abstimmungsaufgaben:

  • Das Polling basiert auf dem erneuten Binden, nicht auf dem In-Place-Verfahren. Es gibt kein job.refresh() und kein job.has_ended. Rufe ein neues Objekt von client.batches.get(name=...) ab und vergleiche job.state mit den JOB_STATE_*-Strings.
  • Batch-Umbenennungen: source_model in model, input_dataset in src, output_uri_prefix in config.dest, job_display_name in config.display_name.
  • Batch-Steuerelemente für die maschinelle Form werden entfernt und haben in der neuen SDK-Version kein Äquivalent. machine_type, accelerator_type, accelerator_count, starting_replica_count und max_replica_count sind keine Felder von CreateBatchJobConfig mehr.
  • Die folgenden Methoden wurden umbenannt:
    • sft.train bis client.tunings.tune
    • source_model nach base_model
    • train_dataset nach training_dataset
    • epochs bis epoch_count
  • Abstimmungs-Datasets werden umschlossen. Ein einfacher "gs://..."-String wird zu types.TuningDataset(gcs_uri=...).
  • adapter_size ändert den Typ von int in einen Enum-String wie "ADAPTER_SIZE_FOUR".

Vorher

from vertexai.batch_prediction import BatchPredictionJob
from vertexai.tuning import sft

job = BatchPredictionJob.submit(
    source_model="gemini-2.5-flash",
    input_dataset="bq://my-project.my-dataset.my-table",
    output_uri_prefix="bq://my-project.my-dataset.output",
)
while not job.has_ended:
    job.refresh()

tuning_job = sft.train(
    source_model="gemini-2.5-flash",
    train_dataset="gs://bucket/train.jsonl",
    epochs=1,
    adapter_size=4,
)

Nach

from google.genai import types

job = client.batches.create(
    model="gemini-3.5-flash",
    src="bq://my-project.my-dataset.my-table",
    config=types.CreateBatchJobConfig(dest="bq://my-project.my-dataset.output"),
)
completed = {"JOB_STATE_SUCCEEDED", "JOB_STATE_FAILED", "JOB_STATE_CANCELLED", "JOB_STATE_PAUSED"}
while job.state not in completed:
    job = client.batches.get(name=job.name)

tuning_job = client.tunings.tune(
    base_model="gemini-3.5-flash",
    training_dataset=types.TuningDataset(gcs_uri="gs://bucket/train.jsonl"),
    config=types.CreateTuningJobConfig(
        epoch_count=1,
        adapter_size="ADAPTER_SIZE_FOUR",
    ),
)

Umstrukturierung des Agent Platform SDK

Wenn Sie die agentplatform-Module von google-cloud-aiplatform verwenden, folgen Sie den folgenden Empfehlungen, um zur neuen SDK-Struktur zu migrieren:

  1. google-cloud-agentplatform ist jetzt eine eigenständige, schlanke Distribution und die empfohlene Installation für Agent-Arbeitslasten. Wenn Sie die klassische Benutzeroberfläche für maschinelles Lernen nicht benötigen, wechseln Sie von pip install google-cloud-aiplatform zu pip install google-cloud-agentplatform.

  2. Verwenden Sie die folgende Tabelle, um Importe und Attributpfade zu aktualisieren:

    Zurück Neu
    client.agent_engines.create client.runtimes.create (Bereitstellen einer Agent Runtime-Instanz auf der Gemini Enterprise Agent Platform, die integrierte Sitzungen, Sandbox-Codeausführung und Kontextspeicherkonfiguration bietet)
    client.memory_banks.create (Erstellen von eigenständigen Memory Bank-Ressourcen zum Speichern, Verwalten und Abrufen von Erinnerungen über Interaktionen hinweg)
    client.agent_engines.sandboxes client.sandboxes
    client.agent_engines.sandboxes.snapshots client.sandboxes.snapshots
    client.agent_engines.sandboxes.templates client.sandboxes.templates
    client.agent_engines.sessions client.sessions
    client.agent_engines.sessions.events client.sessions.events
    client.agent_engines.runtimes.revisions client.runtimes.revisions
    client.agent_engines.memories client.memory_banks.memories
    agentplatform.agent_engines.templates agentplatform.frameworks
  3. Der globale Initialisierer wird entfernt und Agent-Frameworks lesen Projekt und Standort nicht mehr aus dem aiplatform.init()- oder vertexai.init()-Status. Ersetzen Sie die aus dem Initialisierer abgeleitete Konfiguration durch Umgebungsvariablen für alles, was in einem Agent-Framework ausgeführt wird. Code, der sich auf den Initialisierer zum Konfigurieren bereitgestellter Agents verlässt, wird ohne Fehlermeldung unterbrochen.

  4. Aktualisieren Sie die Aufrufstellen von evals.run_inference(agent=...), um types.Runtime zu übergeben, da das SDK types.AgentEngine nicht mehr akzeptiert.

  5. Nehmen Sie die folgenden Änderungen vor:

    • vertexai.Client bis agentplatform.Client
    • vertexai.rag bis agentplatform.Client().rag

    vertexai.Client gibt bei der ersten Instanziierung ein FutureWarning aus:

    The vertexai.Client class is deprecated. Please use agentplatform.Client instead.
    

    vertexai.rag gibt beim Import des Moduls eine UserWarning aus, nicht beim Aufruf. Migrieren Sie zu Folgendem:

    import agentplatform
    
    client = agentplatform.Client(project="your-project", location="global")
    client.rag.create_corpus(...)
    
  6. Die Fehlerbehandlung bei AdkApp- und Sitzungsaufrufen wurde verbessert. Bei synchronen Sitzungsmethoden und Streaming-Agent-Ausführungen wird jetzt der zugrunde liegende API-Fehler angezeigt. Anrufer, bei denen ein allgemeiner umschlossener Fehler auftritt, werden nicht mehr zugeordnet. Ersetzen Sie Catch-Anweisungen für generische Wrapper-Ausnahmen der Bibliothek durch google.api_core.exceptions.GoogleAPICallError oder durch bestimmte Statusfehler wie ResourceExhausted und NotFound.

  7. Aktualisieren Sie Clientaufrufer oder Middleware, damit das OAuth-Zugriffstoken des Nutzers in jede Anfrage aufgenommen wird. Tokens sind jetzt kurzlebig und werden nicht mit dem Sitzungsstatus gespeichert. Achten Sie darauf, dass die Aktualisierung von Tokens clientseitig erfolgt.

  8. Das Modul a2a.tasks wurde ohne Ersatz entfernt.