El paquete google-cloud-aiplatform incluye el SDK de AI Platform para Python y la biblioteca cliente de Python de Gemini Enterprise Agent Platform. 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
vertexaiestán obsoletos y se migraron al SDK de IA generativa de Google (google-genai):vertexai.generative_modelsvertexai.language_modelsvertexai.vision_modelsvertexai.cachingvertexai.tuning
Si deseas obtener información para migrar los módulos en desuso al SDK de IA generativa de Google, consulta Cómo trasladar los módulos de IA generativa al SDK de IA generativa de Google.
Reestructuración de la superficie del agente: Se realizaron los siguientes cambios en los módulos de
agentplatformdegoogle-cloud-aiplatform:- Cambios de nombre
- Promociones a nivel superior
- Se quitó el inicializador global
Para obtener información sobre cómo migrar a la nueva estructura del SDK, consulta Reestructuración del SDK de Agent Platform.
Desacoplamiento de
agentplatform:google-cloud-agentplatformahora es una distribución independiente y ligera, y la instalación recomendada para las cargas de trabajo del agente. 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 superficie de aprendizaje automático clásica (conjuntos de datos, entrenamiento, modelos, predicción, seguimiento, 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. Aún puedes acceder a la evaluación, Agent Runtime, las instrucciones y las habilidades si instalas google-cloud-aiplatform. google-cloud-aiplatform y 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á en desuso, pero existe un equivalente del SDK de IA generativa de Google que es la herramienta recomendada.
Migración de 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 relacionadas no puedan quitar los módulos que están 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 omitiste.Reemplaza
vertexai.init(...)por ungenai.Client(enterprise=True, project=..., location=...)explícito. Conservavertexai.init()si también usas la versión clásica de la plataforma 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, configúralo 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()configuró todo el proceso;genai.Client()es un objeto que pasas. Congenai.Client(), puedes usar dos proyectos o regiones en un solo proceso. - El campo
enterprise=Truees obligatorio. Si lo omites, el cliente segmenta de forma silenciosa 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 ningún objeto de modelo de vinculación única.
model=es un argumento de palabra clave obligatorio en cada llamada aclient.models.*. - La autenticación no cambió. Las credenciales predeterminadas de la aplicación siguen vigentes, 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
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 diverge sin errores. Se compilan y ejecutan, pero cambian de significado.
Comportamiento Antes Después response.texten una respuesta bloqueada o vacíaSe genera el error ValueErrorDevuelve Noneresponse.textcon varios candidatosSe genera el error ValueErrorRegistra una advertencia y devuelve el primer candidato Segmentación por cliente vertexai.init()Agent Platform implícitaSi se omite vertexai=True, se segmenta de forma silenciosa la API de Gemini DeveloperIncorporaciones 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 herramienta No compatible El SDK lo ejecuta automáticamente system_instructionSe une una vez al modelo Se debe pasar en cada llamada. El cambio de
response.textes el que se debe buscar primero. Cadatry/except ValueErrorque se incluye en.textse convierte en código inactivo, 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 superficie clásica del aprendizaje automático.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 basados en tareas
Consulta las llamadas modificadas según la tarea:
- Generación de texto
- Generación de transmisión
- Generación asíncrona
- Sesiones de chat
- Configuración, parámetros de seguridad y consignas del sistema
- Entrada multimodal
- Llamadas a funciones y fundamentación
- Embeddings
- Recuento de tokens
- Almacenamiento en caché del contexto
- Predicción y ajuste por lotes
Generación de texto
Para las tareas de generación de texto, todos los argumentos son solo de palabras clave. Las llamadas posicionales aumentan 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 transmisión
Se quitó la marca stream=True para las tareas de generación de transmisión. 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
En el caso de las tareas de generación asíncronas, se quitó el sufijo _async del nombre del método. 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 sesiones de chat:
- Los chats se crean desde el cliente, no desde un objeto modelo.
chat.history(propiedad) se convierte enchat.get_history()(método). El nuevo método tomacurated: bool = False. Si se pasaTrue, solo se devuelven los giros conservados, que no tienen un equivalente anterior.client.aio.chats.create(...)devuelve unAsyncChatdirectamente. Solo se esperansend_messageysend_message_stream.- Las opciones por turno se contraen en un solo 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 un equivalente en 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 y sistema de instrucciones
Ten en cuenta los siguientes cambios en las tareas de configuración, los parámetros de seguridad y las instrucciones del sistema:
Los siguientes argumentos se contraen en un solo
config=como campos deGenerateContentConfig:generation_configsafety_settingstoolstool_configlabelssystem_instruction
Un
dictsimple funciona en cualquier lugar donde funciona 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,system_instructionse debe pasar en 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 simples y se coercionan.
Los nombres de los campos escalares no cambian:
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.Los campos nuevos sin un equivalente anterior 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 permite la posición |
Part.from_uri(file_uri=, mime_type=), solo palabras clave, se cambió el nombre del parámetro |
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 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 función y fundamentación
Ten en cuenta los siguientes cambios para las tareas de llamada a función y fundamentación:
- Las herramientas se mueven a
config=. No hay ningún argumentotools=en la llamada ni en un objeto del 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 resulta ser 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 herramienta, y la llamada automática a funciones está activada de forma predeterminada cuando pasas la función. Si transfieres un bucle de herramientas manual y pasas un objeto de función, el SDK comenzará a ejecutar tu código. Inhabilita la llamada a función automática predeterminada con
automatic_function_calling=types.AutomaticFunctionCallingConfig(disable=True). Los siguientes tipos de herramientas nuevas no tienen equivalentes en 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 son 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()devolvió directamente unlist[TextEmbedding], por lo que los llamadores indexaron 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 nuevo campo se establece comounsetde forma predeterminada. 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 en las tareas de recuento de tokens:
- Se quitó
total_billable_charactersy no tiene reemplazo. Cualquier estimación de costos basada entotal_billable_charactersdebe modificarse (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 para las tareas de almacenamiento en caché del contexto:
ttlcambia de 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 clientes.
updatedevuelve un objeto nuevo en lugar de mutar en su 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)
Ajuste y predicción por lotes
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 la vinculación in situ. No hay
job.refresh()nijob.has_ended. Recupera un objeto nuevo declient.batches.get(name=...)y comparajob.statecon las cadenas deJOB_STATE_*. - Cambios de nombre por lotes:
source_modelpormodel,input_datasetporsrc,output_uri_prefixporconfig.destyjob_display_nameporconfig.display_name. - Se quitaron los controles de forma automática 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 encapsulan. Una cadena
"gs://..."sin formato se convierte entypes.TuningDataset(gcs_uri=...). adapter_sizecambia 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 independiente y ligera, y la instalación recomendada para las cargas de trabajo del agente. Si no necesitas la experiencia clásica de aprendizaje automático, 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 atributos:
Anterior Nuevo client.agent_engines.createclient.runtimes.create(Implementa una instancia de Agent Runtime en Gemini Enterprise Agent Platform, que proporciona configuración integrada de sesiones, ejecución de código en zona de pruebas y memoria de contexto)
client.memory_banks.create(Crea recursos independientes de Memory Bank para conservar, administrar y recuperar recuerdos en 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 de
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 que pasentypes.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 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
Se actualizó 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. Las personas que llaman que detectan un error genérico encapsulado ya no coinciden. Reemplaza las capturas de excepciones genéricas del wrapper de la biblioteca porgoogle.api_core.exceptions.GoogleAPICallError(o errores de estado específicos, comoResourceExhaustedyNotFound).Actualiza los llamadores de clientes o el middleware 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 del token se administre del lado del cliente.
Ten en cuenta que el módulo
a2a.tasksse quitó sin reemplazo.