SDK Agent Platform per Python: guida alla migrazione alla versione 2.0.1

Il pacchetto google-cloud-aiplatform include sia l'SDK AI Platform per Python sia la libreria client Python di Gemini Enterprise Agent Platform. Questa pagina tratta le seguenti categorie di modifiche nel pacchetto google-cloud-aiplatform:

  • I moduli di AI generativa vengono spostati nell'SDK Google Gen AI: i seguenti moduli di AI generativa nel pacchetto vertexai sono ritirati e migrati all'SDK Google Gen AI (google-genai):

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

    Per scoprire come eseguire la migrazione dei moduli deprecati all'SDK Google Gen AI, consulta Spostare i moduli di AI generativa nell'SDK Google Gen AI.

  • Ristrutturazione della superficie dell'agente:sono state apportate le seguenti modifiche ai moduli agentplatform di google-cloud-aiplatform:

    • Rinomina
    • Promozioni al primo livello
    • Rimozione dell'inizializzatore globale

    Per scoprire come eseguire la migrazione alla nuova struttura dell'SDK, consulta Ristrutturazione dell'SDK Agent Platform.

  • Separazione di agentplatform: google-cloud-agentplatform è ora una distribuzione leggera autonoma e l'installazione consigliata per i carichi di lavoro degli agenti. Se crei solo agenti, installa google-cloud-agentplatform, che non contiene moduli di AI generativa. I moduli agentplatform coprono le integrazioni comuni come [adk], [a2a], [agent_engines], [langchain], [ag2], [llama_index], [evaluation], [bigquery], [live] e [all].

Elementi non interessati

La superficie di machine learning classica (set di dati, addestramento, modelli, previsione, monitoraggio, pipeline) è completamente supportata, non è interessata dalle modifiche della versione 2.0.1 e non ha equivalenti nell'SDK Google Gen AI. Puoi comunque accedere a valutazione, Agent Runtime, prompt e skill installando google-cloud-aiplatform. google-cloud-aiplatform e google-genai coesistono in un unico ambiente e google-genai è ora una dipendenza rigida di 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 non è ritirato, ma esiste un equivalente dell'SDK Google Gen AI ed è lo strumento consigliato.

Migrazione dei moduli di AI generativa all'SDK Google Gen AI

Se utilizzi i moduli di AI generativa nel pacchetto google-cloud-aiplatform, segui questi consigli per eseguire la migrazione all'SDK Google Gen AI (google-genai):

  1. Imposta google-cloud-aiplatform < 2.0.0 in modo che gli incrementi delle dipendenze non correlate non possano rimuovere i moduli sottostanti.

  2. Cerca i moduli ritirati nel tuo codice:

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

    Se importi uno dei moduli Python interessati, ricevi il seguente avviso di ritiro:

    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.
    

    Esegui la suite di test con -W error::UserWarning per rilevare le importazioni che hai omesso.

  3. Sostituisci vertexai.init(...) con un genai.Client(enterprise=True, project=..., location=...) esplicito. Mantieni vertexai.init() se utilizzi anche la superficie di machine learning classica.

    Prima

    # 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")
    

    Dopo

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

    In alternativa, configura dall'ambiente:

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

    Considerazioni principali:

    • Lo stato globale diventa un client esplicito. vertexai.init() ha configurato l'intero processo; genai.Client() è un oggetto che viene passato. Con genai.Client(), puoi utilizzare due progetti o regioni in un unico processo.
    • enterprise=True è obbligatorio. Se lo ometti, il client ha come target l'API Gemini Developer, che poi non riesce a utilizzare le credenziali predefinite dell'applicazione o richiede una chiave API.
    • Il nome del modello viene spostato dalla costruzione a ogni chiamata. Non esiste alcun oggetto modello di associazione singola. model= è un argomento di parola chiave obbligatorio in ogni chiamata client.models.*.
    • L'autenticazione è invariata. Le credenziali predefinite dell'applicazione vengono comunque applicate e credentials= accetta un google.auth.credentials.Credentials in entrambi gli SDK.
    • vertexai.init() includeva anche impostazioni non generative come staging_bucket, experiment, encryption_spec_key_name, service_account, network. genai.Client non ha un equivalente.
    • La nuova ortografia enterprise=True è accettata a partire dalla versione google-genai 2.20.0, ma la versione precedente vertexai=True funziona su ogni release ed è la scelta più sicura.
  4. Controlla il codice per rilevare modifiche silenziose in cui il comportamento diverge senza errori. Questi vengono compilati ed eseguiti, ma cambiano significato.

    Comportamento Prima Dopo
    response.text su una risposta bloccata o vuota Aumenta ValueError Restituisce None
    response.text con più candidati Aumenta ValueError Registra un avviso, restituisce il primo candidato
    Targeting dei clienti vertexai.init() Agent Platform implicita L'omissione di vertexai=True ha come target silenzioso l'API Gemini Developer
    Embedding auto_truncate Il valore predefinito è True Non impostato; viene applicato il valore predefinito del server
    Una funzione Python passata come strumento Non supportata Eseguito automaticamente dall'SDK
    system_instruction Vincolato una volta al modello Deve essere passato a ogni chiamata

    La modifica response.text è quella da cercare per prima. Ogni try/except ValueError racchiuso in .text diventa codice inutilizzato e ogni .text non protetto ora può generare None dove in precedenza veniva restituito un str:

    if response.text is None:
        print(
            "blocked or empty:",
            response.prompt_feedback,
            response.candidates[0].finish_reason if response.candidates else None,
        )
    
  5. Mantieni google-cloud-aiplatform installato se utilizzi la valutazione, Agent Runtime, prompt, set di dati, competenze e l'intera superficie del machine learning classico.

  6. Modifica le chiamate alle nuove versioni. Inizia con i cambi di nome meccanici, poi continua con il consolidamento di config=.

Modifiche alle chiamate basate sulle attività

Visualizza le chiamate modificate in base all'attività:

Generazione di testo

Per le attività di generazione di testo, tutti gli argomenti sono solo parole chiave. Le chiamate posizionali aumentano TypeError.

Prima

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

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

Dopo

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

Generazione di streaming

Per le attività di generazione di streaming, il flag stream=True viene rimosso. Lo streaming è ora un metodo separato che restituisce Iterator[types.GenerateContentResponse]. Utilizza if chunk.text: per eseguire il controllo prima di accedere al testo, perché ogni blocco è un oggetto di risposta completo e il relativo attributo .text a volte può essere None.

Prima

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

Dopo

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="")

Generazione asincrona

Per le attività di generazione asincrona, è stato rimosso il suffisso _async method-name. Ogni chiamata asincrona si trova in client.aio.<module> con lo stesso nome del metodo della controparte sincrona. Chiudi il client con await client.aio.aclose() o utilizza async with genai.Client(...).aio as aclient:.

Prima

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="")

Dopo

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="")

Sessioni di chat

Tieni presente le seguenti modifiche per le attività delle sessioni di chat:

  • Le chat vengono create dal client, non da un oggetto modello.
  • chat.history (proprietà) diventa chat.get_history() (metodo). Il nuovo metodo richiede curated: bool = False. L'argomento True restituisce solo le giocate mantenute, che non hanno un equivalente precedente.
  • client.aio.chats.create(...) restituisce direttamente un AsyncChat. Sono attesi solo send_message e send_message_stream.
  • Le opzioni per svolta vengono compresse in un unico argomento: send_message(message, config=types.GenerateContentConfig(...)). Anche il primo parametro viene rinominato da content a message.
  • start_chat(response_validation=False) è un nuovo metodo senza equivalenti nelle versioni precedenti.

Prima

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)

Dopo

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)

Configurazione, impostazioni di sicurezza e istruzioni di sistema

Tieni presente le seguenti modifiche per le attività di configurazione, impostazioni di sicurezza e istruzioni di sistema:

  • I seguenti argomenti vengono compressi in un unico config= come campi di GenerateContentConfig:

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

    Un dict semplice funziona ovunque funzioni un tipo di configurazione.

  • system_instruction si sposta dal costruttore del modello alla configurazione per chiamata. Nella versione precedente dell'SDK, system_instruction veniva impostato una sola volta durante la creazione di GenerativeModel. Ora system_instruction deve essere passato a ogni chiamata o incluso in client.chats.create(config=...).

  • Le impostazioni di sicurezza cambiano da dict a list. Ad esempio: [types.SafetySetting(category=c, threshold=t) for c, t in old_dict.items()].

  • Gli enum vengono accettati come stringhe semplici e forzati.

  • I nomi dei campi scalari rimangono invariati: 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.

  • I nuovi campi senza un equivalente precedente includono thinking_config, cached_content, automatic_function_calling, http_options, media_resolution e speech_config.

Prima

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,
    },
)

Dopo

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,
          ),
      ],
    ),
)

Input multimodale

Tieni presente le seguenti modifiche per le attività di input multimodale:

Precedente Nuovo
Part.from_uri(uri, mime_type), posizionale consentito Part.from_uri(file_uri=, mime_type=), solo parole chiave, parametro rinominato
Part.from_data(data, mime_type) Part.from_bytes(data=, mime_type=), metodo rinominato
Part.from_text(text) Part.from_text(text=), solo parole chiave
Image.load_from_file(path) Nessun equivalente; apri il file e utilizza Part.from_bytes
  • mime_type è facoltativo in types.Part.from_uri() (lato server dedotto), ma rimane obbligatorio in types.Part.from_bytes().
  • client.files.upload(...) è supportato solo dall'API Gemini Developer. Per i carichi di lavoro di Agent Platform, continua a passare gli URI Cloud Storage utilizzando from_uri o i byte incorporati utilizzando from_bytes.

Prima

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",
)

Dopo

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",
)

Chiamata di funzione e grounding

Tieni presente le seguenti modifiche per le attività di chiamata di funzioni e grounding:

  • Gli strumenti vengono spostati in config=. Non esiste alcun argomento tools= nella chiamata o in un oggetto modello.
  • Tool.from_google_search_retrieval(grounding.GoogleSearchRetrieval()) diventa types.Tool(google_search=types.GoogleSearch()). Un metodo di fabbrica diventa un campo semplice. types.Tool ha anche un campo google_search_retrieval separato.
  • response.function_calls è la funzione di accesso idiomatica e non genera errori quando la parte zero è un testo. Il vecchio attraversamento funziona ancora.
  • Lo schema JSON non elaborato è specificato in parameters_json_schema. Un types.Schema digitato è specificato in parameters.
  • Ora puoi passare una funzione Python come strumento e la chiamata automatica di funzioni è attiva per impostazione predefinita quando passi la funzione. Se esegui il porting di un ciclo di strumenti manuale e passi un oggetto funzione, l'SDK inizia a eseguire il codice. Disattiva la chiamata automatica di funzioni predefinita con automatic_function_calling=types.AutomaticFunctionCallingConfig(disable=True).
  • I seguenti nuovi tipi di strumenti non hanno equivalenti nelle versioni precedenti: code_execution, url_context, google_maps, computer_use, file_search, enterprise_web_search, mcp_servers.

Prima

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())

Dopo

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())

Incorporamenti

Tieni presente le seguenti modifiche per l'incorporamento delle attività:

  • TextEmbeddingInput rimosso. task_type e title ora sono per richiesta, quindi i batch di attività miste devono essere suddivisi in più chiamate.
  • Il tipo restituito è cambiato da un elenco diretto a un oggetto di risposta. get_embeddings() ha restituito direttamente un list[TextEmbedding], quindi i chiamanti hanno indicizzato direttamente l'elenco (embeddings[0].values). Nella nuova versione, embed_content() restituisce un oggetto EmbedContentResponse contenente un elenco .embeddings, che richiede l'accesso a response.embeddings[0].values. I singoli campi di incorporamento (.values e .statistics) mantengono i nomi originali.
  • auto_truncate non è più impostato come valore predefinito di True. Il nuovo campo ha come valore predefinito unset. Se ti affidi al troncamento silenzioso degli input troppo lunghi, imposta auto_truncate in modo esplicito.

Prima

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)

Dopo

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)

Conteggio dei token

Tieni presente le seguenti modifiche per le attività di conteggio dei token:

  • total_billable_characters è stato rimosso e non è stato sostituito. Qualsiasi stima dei costi basata su total_billable_characters deve essere rielaborata (ad esempio in base a total_tokens o response.usage_metadata) da una chiamata di generazione.
  • È stato aggiunto client.models.compute_tokens(...) per gli ID token e le parti di stringa.
  • Il conteggio offline è stato aggiunto tramite google.genai.local_tokenizer.LocalTokenizer.

Prima

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

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

Dopo

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)

Memorizzazione nella cache del contesto

Tieni presente le seguenti modifiche per le attività di memorizzazione nella cache del contesto:

  • ttl cambia tipo da datetime.timedelta a una stringa di durata come "86400s".
  • I metodi degli oggetti risorsa diventano chiamate ai moduli client.
  • update restituisce un nuovo oggetto anziché modificarlo sul posto.

Prima

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()

Dopo

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)

Previsioni in batch e ottimizzazione

Tieni presente le seguenti modifiche per le attività di previsioni in batch e ottimizzazione:

  • Il polling è basato sul rebind, non in loco. Non esiste job.refresh() e non esiste job.has_ended. Recupera un nuovo oggetto da client.batches.get(name=...) e confronta job.state con le stringhe JOB_STATE_*.
  • Rinomine batch: source_model in model, input_dataset in src, output_uri_prefix in config.dest, job_display_name in config.display_name.
  • I controlli batch della forma della macchina vengono rimossi e non hanno un equivalente nella nuova versione dell'SDK. machine_type, accelerator_type, accelerator_count, starting_replica_count e max_replica_count non sono più campi di CreateBatchJobConfig.
  • I seguenti metodi sono stati rinominati:
    • Da sft.train a client.tunings.tune
    • Da source_model a base_model
    • Da train_dataset a training_dataset
    • Da epochs a epoch_count
  • I set di dati per l'ottimizzazione sono inclusi. Una stringa "gs://..." semplice diventa types.TuningDataset(gcs_uri=...).
  • adapter_size cambia tipo da int a una stringa enum come "ADAPTER_SIZE_FOUR".

Prima

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,
)

Dopo

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",
    ),
)

Ristrutturazione dell'SDK Agent Platform

Se utilizzi i moduli agentplatform di google-cloud-aiplatform, segui questi consigli per eseguire la migrazione alla nuova struttura dell'SDK:

  1. google-cloud-agentplatform è ora una distribuzione leggera autonoma e l'installazione consigliata per i carichi di lavoro degli agenti. Se non hai bisogno della superficie di machine learning classica, passa dall'installazione di pip install google-cloud-aiplatform a quella di pip install google-cloud-agentplatform.

  2. Utilizza la seguente tabella per aggiornare le importazioni e i percorsi degli attributi:

    Indietro Nuovo
    client.agent_engines.create client.runtimes.create (Deploy di un runtime dell'agente su un'istanza di Gemini Enterprise Agent Platform, che fornisce sessioni, esecuzione di codice sandbox e configurazione della memoria contestuale integrate)
    client.memory_banks.create (Crea risorse Memory Bank autonome per archiviare, gestire e recuperare i ricordi nelle interazioni)
    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. L'inizializzatore globale viene rimosso e i framework degli agenti non leggono più il progetto e la località dallo stato aiplatform.init() o vertexai.init(). Sostituisci la configurazione derivata dall'inizializzatore con le variabili di ambiente per qualsiasi elemento in esecuzione all'interno di un framework dell'agente. Il codice che si basa sull'inizializzatore per configurare gli agenti di cui è stato eseguito il deployment si interrompe automaticamente anziché generare un errore.

  4. Aggiorna i siti di chiamata evals.run_inference(agent=...) per trasmettere types.Runtime, poiché l'SDK non accetta più types.AgentEngine.

  5. Apporta le seguenti modifiche:

    • Da vertexai.Client a agentplatform.Client
    • Da vertexai.rag a agentplatform.Client().rag

    vertexai.Client emette un FutureWarning alla prima creazione di un'istanza:

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

    vertexai.rag emette un UserWarning al momento dell'importazione del modulo, non durante la chiamata. Esegui la migrazione a quanto segue:

    import agentplatform
    
    client = agentplatform.Client(project="your-project", location="global")
    client.rag.create_corpus(...)
    
  6. Aggiorna la gestione degli errori relativi a AdkApp e alle chiamate di sessione. I metodi di sessione sincrona e le esecuzioni dell'agente di streaming ora mostrano l'errore API sottostante. I chiamanti che rilevano un errore generico di wrapping non corrispondono più. Sostituisci le intercettazioni per le eccezioni generiche del wrapper della libreria con google.api_core.exceptions.GoogleAPICallError (o errori di stato specifici come ResourceExhausted e NotFound).

  7. Aggiorna i chiamanti client o il middleware in modo da includere il token di accesso OAuth dell'utente in ogni richiesta, poiché i token ora sono effimeri e non vengono mantenuti con lo stato della sessione. Assicurati che l'aggiornamento del token sia gestito lato client.

  8. Tieni presente che il modulo a2a.tasks è stato rimosso senza sostituzione.