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

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

  • Generative AI-Module werden in das Google Gen AI SDK verschoben: Die folgenden Generative AI-Module im Paket vertexai wurden eingestellt und in das Google Gen AI SDK (google-genai) migriert:

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

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

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

    • Umbenennungen
    • Beförderungen auf die oberste Ebene
    • Entfernen des globalen Initialisierers

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

  • Entkopplung von agentplatform: google-cloud-agentplatform ist jetzt eine eigenständige, schlanke Distribution und die empfohlene Installation für Agent-Arbeitslasten. Wenn Sie nur Agenten 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 Oberfläche für maschinelles Lernen (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 harte 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 wurde nicht eingestellt, aber es gibt ein entsprechendes Google Gen AI SDK, das empfohlen wird.

Module für generative KI in das Google Gen AI SDK verschieben

Wenn Sie die Module für generative KI im Paket google-cloud-aiplatform verwenden, beachten Sie die folgenden Empfehlungen für die Migration zum Google Gen AI SDK (google-genai):

  1. Legen Sie google-cloud-aiplatform < 2.0.0 fest, damit nicht zusammenhängende Abhängigkeitserhöhungen die Module unter Ihnen nicht entfernen können.

  2. Suchen Sie in Ihrem Code nach den verworfenen 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 Einstellungswarnung:

    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 Test-Suite mit -W error::UserWarning aus, um fehlende Importe zu finden.

  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:

    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 weitergeben. Mit genai.Client() können Sie zwei Projekte oder Regionen in einem Prozess verwenden.
    • Das Feld „enterprise=True“ darf nicht leer sein. Wenn Sie ihn weglassen, wird die Gemini Developer API im Hintergrund als Ziel verwendet. Dies schlägt dann bei Standardanmeldedaten für Anwendungen fehl oder erfordert einen API-Schlüssel.
    • Der Modellname wird von der Konstruktion zu jedem Aufruf verschoben. Es gibt kein einmalig gebundenes Modellobjekt. model= ist ein erforderliches Keyword-Argument für jeden client.models.*-Aufruf.
    • Die Authentifizierung bleibt unverändert. Standardanmeldedaten für Anwendungen gelten weiterhin und credentials= akzeptiert in beiden SDKs einen google.auth.credentials.Credentials.
    • vertexai.init() enthielt auch nicht generative Einstellungen wie staging_bucket, experiment, encryption_spec_key_name, service_account, network. genai.Client hat kein Äquivalent für sie.
    • Die neuere Schreibweise enterprise=True wird ab google-genai 2.20.0 akzeptiert, aber die ältere Version vertexai=True funktioniert in jedem Release und ist die sicherere Wahl.
  4. Prüfen Sie Ihren Code auf unbemerkte Änderungen, bei denen das Verhalten ohne Fehler abweicht. Diese werden kompiliert und ausgeführt, ändern aber die 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 Protokolliert eine Warnung und gibt den ersten Kandidaten zurück
    Client-Targeting vertexai.init() implizierte Agent Platform-KI-Agenten Wenn Sie vertexai=True weglassen, wird die Gemini Developer API automatisch als Ziel verwendet.
    Einbettungen auto_truncate Die Standardeinstellung ist True. Nicht festgelegt; Serverstandard gilt
    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 Aufruf übergeben werden

    Die Änderung response.text ist die erste, nach der gesucht werden sollte. Jeder try/except ValueError, der um .text herum verwendet wird, wird zu totem Code, und jeder ungeschützte .text kann jetzt None zurückgeben, wo zuvor ein 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, 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 Anrufe

Hier finden Sie die geänderten Aufrufe nach Aufgabe:

Textgenerierung

Bei Aufgaben zur Textgenerierung sind alle Argumente reine Schlüsselwortargumente. 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 dies zu prüfen, bevor Sie auf den Text zugreifen, da jeder Block ein vollständiges Antwortobjekt ist und das Attribut .text 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 für den Methodennamen entfernt. Jeder asynchrone Aufruf befindet sich unter client.aio.<module> und hat denselben Methodennamen wie sein synchrones Gegenstück. 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 und nicht von einem Modellobjekt erstellt.
  • chat.history (Attribut) wird zu chat.get_history() (Methode). Die neue Methode dauert 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 pro Runde werden zu 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 keine Entsprechung gibt.

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 für Konfigurations-, Sicherheitseinstellungs- und Systemanweisungsaufgaben:

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

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

    Ein einfacher 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()]

  • Enums werden als einfache Strings akzeptiert und implizit umgewandelt.

  • Die Namen der Skalarfelder bleiben 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 alte Entsprechung 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), positional 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), in types.Part.from_bytes() aber weiterhin erforderlich.
  • client.files.upload(...) wird nur in der Gemini Developer API unterstützt. Übergeben Sie für Agent Platform-Arbeitslasten weiterhin Cloud Storage-URIs mit from_uri oder Inline-Byte mit from_bytes.

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 Fundierungsaufgaben:

  • 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 die idiomatische Zugriffsfunktion und schlägt nicht fehl, wenn der erste Teil Text ist. Die alte Durchsuchung funktioniert weiterhin.
  • Das JSON-Rohschema wird in parameters_json_schema angegeben. Ein typisierter 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 Toolschleife portieren und ein Funktionsobjekt übergeben, beginnt das SDK mit der Ausführung Ihres Codes. Deaktivieren Sie die standardmäßigen automatischen Funktionsaufrufe mit automatic_function_calling=types.AutomaticFunctionCallingConfig(disable=True).
  • Die folgenden neuen Tooltypen haben keine Entsprechung in früheren Versionen: 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 gelten jetzt pro Anfrage. Batches mit gemischten Aufgaben müssen daher 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 zurück, das eine .embeddings-Liste enthält. Sie müssen also auf response.embeddings[0].values zugreifen. Die einzelnen Einbettungsfelder (.values und .statistics) behalten ihre ursprünglichen Namen.
  • auto_truncate ist nicht mehr standardmäßig auf True festgelegt. Das neue Feld ist standardmäßig auf unset gesetzt. Wenn Sie sich auf das automatische Kürzen zu langer 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)

Token zählen

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

  • total_billable_characters wurde entfernt und nicht ersetzt. Alle Kostenschätzungen, die auf total_billable_characters basieren, müssen aus einem Generierungsaufruf überarbeitet werden (z. B. für total_tokens oder response.usage_metadata).
  • client.models.compute_tokens(...) wurde für Token-IDs und Stringteile hinzugefügt.
  • Die Offlinezä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 Kontext-Caching-Aufgaben:

  • ttl ändert den Typ von datetime.timedelta in einen Dauerstring wie "86400s".
  • Methoden von Ressourcenobjekten werden zu Aufrufen von Clientmodulen.
  • update gibt ein neues Objekt zurück, anstatt es direkt 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)

Batchvorhersage und -abstimmung

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

  • Das Polling basiert auf einer erneuten Bindung, nicht auf einer direkten Aktualisierung. Es gibt kein job.refresh() und kein job.has_ended. Rufen Sie ein neues Objekt aus client.batches.get(name=...) ab und vergleichen Sie 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.
  • Die Steuerelemente für Batch-Maschinenformen wurden 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 umgebrochen. 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, beachten Sie die folgenden Empfehlungen für die Migration zur neuen SDK-Struktur:

  1. google-cloud-agentplatform ist jetzt eine eigenständige, schlanke Distribution und die empfohlene Installation für Agent-Arbeitslasten. Wenn Sie die klassische Oberfläche für maschinelles Lernen nicht benötigen, wechseln Sie bei der Installation 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 (Agent Runtime auf einer Gemini Enterprise Agent Platform-Instanz bereitstellen, die integrierte Agent Platform-Sitzungen, Sandbox-Codeausführung und Kontextspeicherkonfiguration bietet)
    client.memory_banks.create (Eigenständige Agent Platform Memory Bank-Ressourcen erstellen, um gemerkte Informationen über Interaktionen hinweg zu speichern, zu verwalten und abzurufen)
    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 vom Initialisierer abgeleitete Konfiguration durch Umgebungsvariablen für alles, was in einem Agent-Framework ausgeführt wird. Code, der sich auf den Initialisierer verlässt, um bereitgestellte Agents zu konfigurieren, bricht ohne Fehlermeldung ab.

  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 Importieren des Moduls einen UserWarning aus, nicht beim Aufruf. Migrieren Sie zu Folgendem:

    import agentplatform
    
    client = agentplatform.Client(project="your-project", location="global")
    client.rag.create_corpus(...)
    
  6. Fehlerbehandlung für AdkApp- und Sitzungsaufrufe aktualisieren. Synchrone Sitzungsmethoden und Streaming-Agent-Ausführungen geben jetzt den zugrunde liegenden API-Fehler aus. Aufrufer, die einen allgemeinen verpackten Fehler abfangen, stimmen nicht mehr überein. Ersetzen Sie Catches für generische Wrapper-Ausnahmen der Bibliothek durch google.api_core.exceptions.GoogleAPICallError (oder spezifische Statusfehler wie ResourceExhausted und NotFound).

  7. Aktualisieren Sie Clientaufrufer oder Middleware, damit das OAuth-Zugriffstoken des Nutzers bei jeder Anfrage enthalten ist. Tokens sind jetzt flüchtig und werden nicht mit dem Sitzungsstatus beibehalten. Achten Sie darauf, dass die Tokenaktualisierung clientseitig verwaltet wird.

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