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

Il pacchetto google-cloud-aiplatform include sia l'SDK Agent Platform per Python sia la libreria client Python di Agent Platform. Questa pagina illustra 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 stati 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 Spostamento dei moduli di AI generativa all'SDK Google Gen AI.

  • Ristrutturazione della piattaforma per gli agenti: sono state apportate le seguenti modifiche ai moduli agentplatform di google-cloud-aiplatform:

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

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

  • Disaccoppiamento di agentplatform: google-cloud-agentplatform è ora una distribuzione autonoma e leggera, nonché l'installazione consigliata per i workload 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].

Cosa non è interessato

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 un equivalente nell'SDK Google Gen AI. Puoi comunque accedere alla valutazione, ad Agent Runtime, ai prompt e alle skill installando google-cloud-aiplatform. Sia google-cloud-aiplatform che 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 è deprecato, ma esiste un equivalente dell'SDK Google Gen AI ed è lo strumento consigliato.

Spostamento dei moduli di AI generativa nell'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 upgrade delle dipendenze non correlati non possano rimuovere i moduli sottostanti.

  2. Cerca i moduli deprecati nel 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 individuare le importazioni che hai dimenticato.

  3. Sostituisci vertexai.init(...) con un genai.Client(enterprise=True, project=..., location=...) esplicito. Mantieni vertexai.init() se utilizzi anche la piattaforma 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 passi. Con genai.Client(), puoi utilizzare due progetti o regioni in un unico processo.
    • enterprise=True è obbligatorio. Se lo ometti, il client sceglie automaticamente 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 passa dalla costruzione a ogni chiamata. Non esiste un oggetto modello bind-once. model= è un argomento di parola chiave obbligatorio per ogni chiamata client.models.*.
    • L'autenticazione rimane invariata. Le credenziali predefinite dell'applicazione rimangono valide 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 per questi elementi.
    • La nuova ortografia enterprise=True è accettata a partire da 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 individuare modifiche silenziose in cui il comportamento diverge senza un errore. 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 implicito Se ometti vertexai=True, l'API Gemini Developer viene scelta come target in modo silenzioso
    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 Bound once on the model Deve essere trasmesso a ogni chiamata

    La modifica response.text è quella da cercare per prima. Ogni try/except ValueError che racchiude .text diventa codice inattivo e ogni .text non protetto può ora restituire None dove in precedenza veniva restituito 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 installato google-cloud-aiplatform se utilizzi la valutazione, Agent Runtime, i prompt, i set di dati, le skill e l'intera superficie di machine learning classica.

  6. Modifica le chiamate alle nuove versioni. Inizia con le ridenominazioni meccaniche, poi continua con il consolidamento di config=.

Modifiche alle chiamate basate sulle attività

Di seguito sono riportate 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 generano 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 in streaming

Per le attività di generazione in streaming, il flag stream=True viene rimosso. Lo streaming è ora un metodo separato che restituisce Iterator[types.GenerateContentResponse]. Utilizza if chunk.text: per controllare prima di accedere al testo, perché ogni chunk è un oggetto di risposta completo e il suo 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, il suffisso del nome del metodo _async è stato rimosso. Ogni chiamata asincrona si trova in client.aio.<module> con lo stesso nome del metodo della sua 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. Se passi True, vengono restituiti solo i turni conservati, 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 turno vengono raggruppate 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 sono compressi in un unico config= come campi di GenerateContentConfig:

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

    Un semplice dict funziona ovunque funzioni un tipo di configurazione.

  • system_instruction passa dal costruttore del modello alla configurazione per chiamata. Nella versione precedente dell'SDK, system_instruction veniva impostato una 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 sono 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 per 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 per 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() (dedotto lato server), ma rimane obbligatorio in types.Part.from_bytes().
  • client.files.upload(...) è supportato solo nell'API Gemini Developer. Per i workload di Agent Platform, continua a passare gli URI Cloud Storage utilizzando from_uri o i byte in linea 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 funzione e grounding:

  • Gli strumenti vengono spostati in config=. Non esiste un 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 factory diventa un campo semplice. types.Tool ha anche un campo google_search_retrieval separato.
  • response.function_calls è l'accessor idiomatico e non genera errori quando la parte zero è un testo. La vecchia navigazione 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 di funzione automatica è attiva per impostazione predefinita quando passi la funzione. Se esegui il porting di un loop di strumenti manuale e passi un oggetto funzione, l'SDK inizia a eseguire il tuo codice. Disattiva la chiamata di funzione automatica predefinita con automatic_function_calling=types.AutomaticFunctionCallingConfig(disable=True).
  • I seguenti nuovi tipi di strumenti non hanno un equivalente 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 le attività di embedding:

  • 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() restituiva direttamente un list[TextEmbedding], quindi i chiamanti indicizzavano 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 embedding (.values e .statistics) mantengono i loro nomi originali.
  • auto_truncate non è più impostato come predefinito per True. Il valore predefinito del nuovo campo è 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 viene rimosso e non ha un sostituto. Qualsiasi stima dei costi basata su total_billable_characters deve essere rielaborata (ad esempio rispetto 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 in loco.

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 ottimizzazione e previsione in batch:

  • Il polling si basa sul riassociazione, non sul posto. 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_*.
  • Rinomina in batch: source_model in model, input_dataset in src, output_uri_prefix in config.dest, job_display_name in config.display_name.
  • I controlli della forma della macchina batch 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 di ottimizzazione sono aggregati. 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 i consigli riportati di seguito per eseguire la migrazione alla nuova struttura dell'SDK:

  1. google-cloud-agentplatform è ora una distribuzione leggera autonoma e l'installazione consigliata per i workload degli agenti. Se non hai bisogno della piattaforma di machine learning classica, passa l'installazione da pip install google-cloud-aiplatform a 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 (esegui il deployment di un runtime dell'agente nell'istanza di Gemini Enterprise Agent Platform, che fornisce sessioni di Agent Platform integrate, esecuzione di codice in sandbox e configurazione della memoria di contesto)
    client.memory_banks.create (crea risorse Agent Platform Memory Bank autonome per la persistenza, la gestione e il recupero delle memorie tra le 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 variabili di ambiente per tutto ciò che viene eseguito all'interno di un framework di agenti. 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 passare 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 istanza:

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

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

    import agentplatform
    
    client = agentplatform.Client(project="your-project", location="global")
    client.rag.create_corpus(...)
    
  6. Aggiorna la gestione degli errori relativi alle chiamate AdkApp e di sessione. I metodi di sessione sincrona e le esecuzioni degli agenti di streaming ora mostrano l'errore dell'API sottostante. I chiamanti che rilevano un errore generico con wrapping non corrispondono più. Sostituisci i blocchi catch 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 o il middleware del client in modo da includere il token di accesso OAuth dell'utente in ogni richiesta, poiché i token ora sono temporanei e non vengono mantenuti con lo stato della sessione. Assicurati che l'aggiornamento dei token sia gestito lato client.

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