El paquete google-cloud-aiplatform incluye el SDK de Agent Platform para Python
y la biblioteca cliente de Agent Platform para Python. En esta página, se abarcan las siguientes categorías de cambios en el paquete google-cloud-aiplatform:
Los módulos de IA generativa se trasladan al SDK de IA generativa de Google: Los siguientes módulos de IA generativa del paquete
vertexaidejaron de estar disponibles y se migraron al SDK de IA generativa de Google (google-genai):vertexai.generative_modelsvertexai.language_modelsvertexai.vision_modelsvertexai.cachingvertexai.tuning
Para aprender a migrar los módulos obsoletos al SDK de IA generativa de Google, consulta Mueve módulos de IA generativa al SDK de IA generativa de Google.
Reestructuración de la plataforma del agente: Se realizaron los siguientes cambios en los módulos
agentplatformdegoogle-cloud-aiplatform:- Cambios de nombre
- Promociones al nivel superior
- Eliminación del inicializador global
Para aprender a migrar a la nueva estructura del SDK, consulta Reestructuración del SDK de Agent Platform.
Desvinculación de
agentplatform:google-cloud-agentplatformahora es una distribución ligera independiente y la instalación recomendada para las cargas de trabajo de agentes. Si solo compilas agentes, instalagoogle-cloud-agentplatform, que no contiene módulos de IA generativa. Los módulos deagentplatformabarcan las integraciones comunes, como[adk],[a2a],[agent_engines],[langchain],[ag2],[llama_index],[evaluation],[bigquery],[live]y[all].
Qué no se verá afectado
La plataforma de aprendizaje automático clásica (conjuntos de datos, entrenamiento, modelos, predicción, seguimiento y canalizaciones) es totalmente compatible, no se ve afectada por los cambios de la versión 2.0.1 y no tiene un equivalente en el SDK de IA generativa de Google. Puedes seguir accediendo a la evaluación, Agent Runtime, las instrucciones y las habilidades instalando google-cloud-aiplatform. Tanto google-cloud-aiplatform como google-genai coexisten en un entorno, y google-genai ahora es una dependencia estricta de 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 no está obsoleto, pero existe un equivalente del SDK de IA generativa de Google y es la herramienta recomendada.
Mover los módulos de IA generativa al SDK de IA generativa de Google
Si usas los módulos de IA generativa en el paquete google-cloud-aiplatform, sigue estas recomendaciones para migrar al SDK de IA generativa de Google (google-genai):
Establece
google-cloud-aiplatform < 2.0.0para que los aumentos de dependencias no relacionados no puedan quitar los módulos que se encuentran debajo de ti.Busca los módulos obsoletos en tu código:
vertexai.generative_modelsvertexai.language_modelsvertexai.vision_modelsvertexai.cachingvertexai.tuning
Si importas alguno de los módulos de Python afectados, recibirás la siguiente advertencia de baja:
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.Ejecuta tu paquete de pruebas con
-W error::UserWarningpara detectar las importaciones que te faltaron.Reemplaza
vertexai.init(...)por ungenai.Client(enterprise=True, project=..., location=...)explícito. Conservavertexai.init()si también usas la plataforma clásica de aprendizaje automático.Antes
# 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")Después
# pip install google-genai from google import genai from google.genai import types client = genai.Client( enterprise=True, project="my-project", location="global", )O bien, configura desde el entorno:
export GOOGLE_GENAI_USE_ENTERPRISE=true export GOOGLE_CLOUD_PROJECT=my-project export GOOGLE_CLOUD_LOCATION=globalfrom google import genai client = genai.Client()Consideraciones clave:
- El estado global se convierte en un cliente explícito.
vertexai.init()configura todo el proceso;genai.Client()es un objeto que pasas. Congenai.Client(), puedes usar dos proyectos o regiones en un proceso. - El campo
enterprise=Truees obligatorio. Si lo omites, el cliente se orienta de forma silenciosa a la API de Gemini Developer, que luego falla en las credenciales predeterminadas de la aplicación o exige una clave de API. - El nombre del modelo se mueve de la construcción a cada llamada. No hay un objeto de modelo de vinculación única.
model=es un argumento de palabra clave obligatorio en cada llamada aclient.models.*. - La autenticación no cambia. Las credenciales predeterminadas de la aplicación siguen aplicándose, y
credentials=acepta ungoogle.auth.credentials.Credentialsen ambos SDKs. vertexai.init()también incluía parámetros de configuración no generativos, comostaging_bucket,experiment,encryption_spec_key_name,service_accountynetwork.genai.Clientno tiene un equivalente para ellos.- La ortografía más reciente de
enterprise=Truese acepta a partir degoogle-genai2.20.0, pero la versión anteriorvertexai=Truefunciona en todas las versiones y es la opción más segura.
- El estado global se convierte en un cliente explícito.
Audita tu código para detectar cambios silenciosos en los que el comportamiento difiera sin un error. Estos se compilan y ejecutan, pero cambian de significado.
Comportamiento Antes Después response.texten una respuesta bloqueada o vacíaGenera ValueErrorDevuelve Noneresponse.textcon varios candidatosGenera ValueErrorRegistra una advertencia y devuelve el primer candidato Segmentación de clientes vertexai.init()de Agent Platform implícitosSi omites vertexai=True, se orienta de forma silenciosa a la API de Gemini DeveloperEmbeddings auto_truncateLa configuración predeterminada es TrueSin definir; se aplica la configuración predeterminada del servidor Una función de Python que se pasa como una herramienta No compatible El SDK lo ejecuta automáticamente. system_instructionSe vincula una vez en el modelo Se debe pasar en cada llamada. El cambio de
response.textes el primero que se debe buscar. Cadatry/except ValueErrorque se une a.textse convierte en código muerto, y cada.textsin protección ahora puede generarNonedonde antes se devolvía unstr:if response.text is None: print( "blocked or empty:", response.prompt_feedback, response.candidates[0].finish_reason if response.candidates else None, )Mantén
google-cloud-aiplatforminstalado si usas la evaluación, Agent Runtime, las instrucciones, los conjuntos de datos, las habilidades y toda la plataforma de aprendizaje automático clásica.Cambia las llamadas a las versiones nuevas. Comienza con los cambios de nombre mecánicos y, luego, continúa con la consolidación de
config=.
Cambios en las llamadas basadas en tareas
Consulta las llamadas modificadas según la tarea:
- Generación de texto
- Generación de transmisiones
- Generación asíncrona
- Sesiones de chat
- Configuración, parámetros de seguridad e instrucciones del sistema
- Entrada multimodal
- Llamada a funciones y fundamentación
- Embeddings
- Recuento de tokens
- Almacenamiento en caché de contexto
- Predicción por lotes y ajuste
Generación de texto
Para las tareas de generación de texto, todos los argumentos son solo de palabras clave. Las llamadas posicionales generan TypeError.
Antes
model = GenerativeModel("gemini-2.5-flash")
response = model.generate_content("Why is the sky blue?")
print(response.text)
Después
response = client.models.generate_content(
model="gemini-3.5-flash",
contents="Why is the sky blue?",
)
print(response.text)
Generación de transmisiones
Para las tareas de generación de transmisión, se quita la marca stream=True. La transmisión ahora es un método independiente que devuelve Iterator[types.GenerateContentResponse]. Usa if chunk.text: para verificar antes de acceder al texto, ya que cada fragmento es un objeto de respuesta completo y su atributo .text a veces puede ser None.
Antes
stream = model.generate_content("Tell me a story in 300 words.", stream=True)
for chunk in stream:
print(chunk.text, end="")
Después
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="")
Generación asíncrona
Para las tareas de generación asíncronas, se quitó el sufijo del nombre del método _async. Cada llamada asíncrona se encuentra en client.aio.<module> con el mismo nombre de método que su contraparte síncrona. Cierra el cliente con await client.aio.aclose() o usa async with genai.Client(...).aio as aclient:.
Antes
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="")
Después
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="")
Sesiones de chat
Ten en cuenta los siguientes cambios en las tareas de las sesiones de chat:
- Los chats se crean desde el cliente, no desde un objeto de modelo.
chat.history(propiedad) se convierte enchat.get_history()(método). El método nuevo tomacurated: bool = False. PasarTruesolo devuelve los turnos conservados, que no tienen un equivalente antiguo.client.aio.chats.create(...)devuelve unAsyncChatdirectamente. Solo se esperansend_messageysend_message_stream.- Las opciones por turno se contraen en un argumento:
send_message(message, config=types.GenerateContentConfig(...)). También se cambió el nombre del primer parámetro decontentamessage. start_chat(response_validation=False)es un método nuevo que no tiene equivalente en las versiones anteriores.
Antes
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)
Después
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)
Configuración, parámetros de seguridad e instrucciones del sistema
Ten en cuenta los siguientes cambios para las tareas de configuración, parámetros de seguridad y las instrucciones del sistema:
Los siguientes argumentos se contraen en un
config=como campos deGenerateContentConfig:generation_configsafety_settingstoolstool_configlabelssystem_instruction
Un
dictsimple funciona en cualquier lugar donde funcione un tipo de configuración.system_instructionse mueve del constructor del modelo a la configuración por llamada. En la versión anterior del SDK,system_instructionse configuraba una vez cuando se compilabaGenerativeModel. Ahora, se debe pasarsystem_instructionen cada llamada o incluirse enclient.chats.create(config=...).La configuración de seguridad cambia de
dictalist. Por ejemplo,[types.SafetySetting(category=c, threshold=t) for c, t in old_dict.items()].Los enums se aceptan como cadenas sin formato y se convierten.
De lo contrario, los nombres de los campos escalares no se modifican:
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.Entre los campos nuevos sin equivalente anterior, se incluyen
thinking_config,cached_content,automatic_function_calling,http_options,media_resolutionyspeech_config.
Antes
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,
},
)
Después
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,
),
],
),
)
Entrada multimodal
Ten en cuenta los siguientes cambios para las tareas de entrada multimodal:
| Antigua | Nuevo |
|---|---|
Part.from_uri(uri, mime_type), se permiten argumentos posicionales |
Se cambió el nombre del parámetro Part.from_uri(file_uri=, mime_type=), que solo acepta palabras clave |
Part.from_data(data, mime_type) |
Part.from_bytes(data=, mime_type=), se cambió el nombre del método |
Part.from_text(text) |
Part.from_text(text=), solo palabras clave |
Image.load_from_file(path) |
No hay equivalente; abre el archivo y usa Part.from_bytes |
mime_typees opcional entypes.Part.from_uri()(se infiere del lado del servidor), pero sigue siendo obligatorio entypes.Part.from_bytes().client.files.upload(...)solo se admite en la API de Gemini Developer. Para las cargas de trabajo de Agent Platform, sigue pasando los URIs de Cloud Storage confrom_urio los bytes intercalados confrom_bytes.
Antes
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",
)
Después
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",
)
Llamada a funciones y fundamentación
Ten en cuenta los siguientes cambios para las tareas de llamada a funciones y de fundamentación:
- Las herramientas se mueven a
config=. No hay ningún argumentotools=en la llamada ni en un objeto de modelo. Tool.from_google_search_retrieval(grounding.GoogleSearchRetrieval())se convierte entypes.Tool(google_search=types.GoogleSearch()). Un método de fábrica se convierte en un campo simple.types.Tooltambién tiene un campogoogle_search_retrievalindependiente.response.function_callses el descriptor de acceso idiomático y no falla cuando la parte cero es texto. El recorrido anterior sigue funcionando.- El esquema JSON sin procesar se especifica en
parameters_json_schema. Se especifica untypes.Schemacon tipo enparameters. - Ahora puedes pasar una función de Python como una herramienta, y la llamada a función automática está activada de forma predeterminada cuando pasas la función. Si portas un bucle de herramientas manual y pasas un objeto de función, el SDK comienza a ejecutar tu código. Inhabilita la llamada a funciones automática predeterminada con
automatic_function_calling=types.AutomaticFunctionCallingConfig(disable=True). Los siguientes tipos de herramientas nuevos no tienen equivalentes en las versiones anteriores:
code_execution,url_context,google_maps,computer_use,file_search,enterprise_web_searchymcp_servers.
Antes
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())
Después
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())
Incorporaciones
Ten en cuenta los siguientes cambios para las tareas de incorporación:
- Se quitó
TextEmbeddingInput.task_typeytitleahora se realizan por solicitud, por lo que los lotes de tareas mixtas se deben dividir en varias llamadas. - El tipo de datos que se devuelve cambió de una lista directa a un objeto de respuesta.
get_embeddings()devolvía directamente unlist[TextEmbedding], por lo que los emisores indexaban la lista directamente (embeddings[0].values). En la nueva versión,embed_content()devuelve un objetoEmbedContentResponseque contiene una lista.embeddings, lo que requiere que accedas aresponse.embeddings[0].values. Los campos de incorporación individuales (.valuesy.statistics) conservan sus nombres originales. auto_truncateya no se establece de forma predeterminada enTrue. El campo nuevo se establece de forma predeterminada enunset. Si dependes del truncamiento silencioso de entradas demasiado largas, configuraauto_truncatede forma explícita.
Antes
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)
Después
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)
Recuento de tokens
Ten en cuenta los siguientes cambios para las tareas de recuento de tokens:
- Se quitó
total_billable_charactersy no tiene reemplazo. Cualquier estimación de costos basada entotal_billable_charactersdebe volver a calcularse (por ejemplo, en función detotal_tokensoresponse.usage_metadata) a partir de una llamada de generación. - Se agregó
client.models.compute_tokens(...)para los IDs de tokens y las partes de cadenas. Se agregó el recuento sin conexión a través de
google.genai.local_tokenizer.LocalTokenizer.
Antes
model = GenerativeModel("gemini-2.5-flash")
response = model.count_tokens(["Why is the sky blue?"])
print(response.total_tokens)
print(response.total_billable_characters)
Después
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)
El almacenamiento de contexto en caché
Ten en cuenta los siguientes cambios en las tareas de almacenamiento en caché de contexto:
ttlcambia el tipo dedatetime.timedeltaa una cadena de duración, como"86400s".- Los métodos de objetos de recursos se convierten en llamadas de módulos de cliente.
updatedevuelve un objeto nuevo en lugar de mutar en el lugar.
Antes
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()
Después
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)
Predicción por lotes y ajuste
Ten en cuenta los siguientes cambios para las tareas de predicción por lotes y ajuste:
- El sondeo se basa en la revinculación, no en el lugar. No hay
job.refresh()nijob.has_ended. Recupera un objeto nuevo declient.batches.get(name=...)y comparajob.statecon las cadenasJOB_STATE_*. - Se cambiaron los nombres de los lotes:
source_modelpormodel,input_datasetporsrc,output_uri_prefixporconfig.destyjob_display_nameporconfig.display_name. - Se quitaron los controles de forma de máquina por lotes y no tienen un equivalente en la nueva versión del SDK.
machine_type,accelerator_type,accelerator_count,starting_replica_countymax_replica_countya no son campos deCreateBatchJobConfig. - Se cambiaron los nombres de los siguientes métodos:
- De
sft.trainaclient.tunings.tune - De
source_modelabase_model - De
train_datasetatraining_dataset - De
epochsaepoch_count
- De
- Los conjuntos de datos de ajuste se unen. Una cadena
"gs://..."simple se convierte entypes.TuningDataset(gcs_uri=...). adapter_sizecambia el tipo de uninta una cadena de enumeración, como"ADAPTER_SIZE_FOUR".
Antes
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,
)
Después
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",
),
)
Reestructuración del SDK de Agent Platform
Si usas los módulos agentplatform de google-cloud-aiplatform, sigue estas recomendaciones para migrar a la nueva estructura del SDK:
google-cloud-agentplatformahora es una distribución ligera independiente y la instalación recomendada para las cargas de trabajo de agentes. Si no necesitas la plataforma de aprendizaje automático clásica, cambia la instalación depip install google-cloud-aiplatformapip install google-cloud-agentplatform.Usa la siguiente tabla para actualizar las importaciones y las rutas de acceso de los atributos:
Anterior Nuevo client.agent_engines.createclient.runtimes.create(Implementa una instancia de Agent Runtime en Gemini Enterprise Agent Platform, que proporciona sesiones de Agent Platform integradas, ejecución de código de zona de pruebas y configuración de memoria de contexto)
client.memory_banks.create(Crea recursos independientes de Agent Platform Memory Bank para conservar, administrar y recuperar memorias en todas las interacciones)client.agent_engines.sandboxesclient.sandboxesclient.agent_engines.sandboxes.snapshotsclient.sandboxes.snapshotsclient.agent_engines.sandboxes.templatesclient.sandboxes.templatesclient.agent_engines.sessionsclient.sessionsclient.agent_engines.sessions.eventsclient.sessions.eventsclient.agent_engines.runtimes.revisionsclient.runtimes.revisionsclient.agent_engines.memoriesclient.memory_banks.memoriesagentplatform.agent_engines.templatesagentplatform.frameworksSe quita el inicializador global y los frameworks de agentes ya no leen el proyecto ni la ubicación del estado
aiplatform.init()overtexai.init(). Reemplaza la configuración derivada del inicializador por variables de entorno para todo lo que se ejecute dentro de un framework de agentes. El código que depende del inicializador para configurar los agentes implementados se interrumpe de forma silenciosa en lugar de generar un error.Actualiza los sitios de llamadas de
evals.run_inference(agent=...)para pasartypes.Runtime, ya que el SDK ya no aceptatypes.AgentEngine.Realiza los siguientes cambios:
- De
vertexai.Clientaagentplatform.Client - De
vertexai.ragaagentplatform.Client().rag
vertexai.Clientemite unFutureWarningen la primera creación de una instancia:The vertexai.Client class is deprecated. Please use agentplatform.Client instead.vertexai.ragemite unUserWarningen el momento de la importación del módulo, no en la llamada. Migra a lo siguiente:import agentplatform client = agentplatform.Client(project="your-project", location="global") client.rag.create_corpus(...)- De
Actualiza el manejo de errores en torno a las llamadas de
AdkAppy de sesión. Los métodos de sesión síncronos y las ejecuciones de agentes de transmisión ahora muestran el error de la API subyacente. Los emisores que detectan un error genérico unido ya no coinciden. Reemplaza las capturas de excepciones genéricas de wrapper de biblioteca porgoogle.api_core.exceptions.GoogleAPICallError(o errores de estado específicos, comoResourceExhaustedyNotFound).Actualiza los emisores de llamadas o el middleware del cliente para incluir el token de acceso de OAuth del usuario en cada solicitud, ya que los tokens ahora son efímeros y no se conservan con el estado de la sesión. Asegúrate de que la actualización de tokens se administre del lado del cliente.
Ten en cuenta que el módulo
a2a.tasksse quitó sin reemplazo.