Agent Platform SDK untuk Python: panduan migrasi versi 2.0.1

Paket google-cloud-aiplatform mencakup Agent Platform SDK untuk Python dan library klien Python Agent Platform. Halaman ini membahas kategori perubahan berikut dalam paket google-cloud-aiplatform:

  • Modul AI generatif dipindahkan ke Google Gen AI SDK: Modul AI generatif berikut dalam paket vertexai tidak digunakan lagi dan dimigrasikan ke Google Gen AI SDK (google-genai):

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

    Untuk mempelajari cara memigrasikan modul yang tidak digunakan lagi ke Google Gen AI SDK, lihat Memindahkan modul AI Generatif ke Google Gen AI SDK.

  • Restrukturisasi platform agen: Perubahan berikut dilakukan pada modul agentplatform dari google-cloud-aiplatform:

    • Mengganti nama
    • Promosi ke tingkat atas
    • Penghapusan penginisialisasi global

    Untuk mempelajari cara bermigrasi ke struktur SDK baru, lihat Restrukturisasi SDK Agent Platform.

  • Pemisahan agentplatform: google-cloud-agentplatform kini menjadi distribusi mandiri yang ringan dan merupakan penginstalan yang direkomendasikan untuk workload agen. Jika Anda hanya membangun agen, instal google-cloud-agentplatform, yang tidak berisi modul AI generatif. Modul agentplatform mencakup integrasi umum seperti [adk], [a2a], [agent_engines], [langchain], [ag2], [llama_index], [evaluation], [bigquery], [live], dan [all].

Yang tidak terpengaruh

Platform machine learning klasik (set data, pelatihan, model, prediksi, pelacakan, pipeline) didukung sepenuhnya, tidak terpengaruh oleh perubahan versi 2.0.1, dan tidak memiliki padanan di Google Gen AI SDK. Anda masih dapat mengakses evaluasi, Agent Runtime, perintah, dan keahlian dengan menginstal google-cloud-aiplatform. google-cloud-aiplatform dan google-genai berdampingan dalam satu lingkungan, dan google-genai kini menjadi dependensi tetap 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 tidak dihentikan penggunaannya, tetapi ada Google Gen AI SDK yang setara dan merupakan alat yang direkomendasikan.

Memindahkan modul AI Generatif ke Google Gen AI SDK

Jika Anda menggunakan modul AI generatif dalam paket google-cloud-aiplatform, gunakan rekomendasi berikut untuk bermigrasi ke Google Gen AI SDK (google-genai):

  1. Tetapkan google-cloud-aiplatform < 2.0.0 agar peningkatan dependensi yang tidak terkait tidak dapat menghapus modul di bawah Anda.

  2. Telusuri modul yang tidak digunakan lagi dalam kode Anda:

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

    Jika Anda mengimpor salah satu modul Python yang terpengaruh, Anda akan menerima peringatan penghentian penggunaan berikut:

    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.
    

    Jalankan suite pengujian Anda dengan -W error::UserWarning untuk menemukan impor yang terlewat.

  3. Ganti vertexai.init(...) dengan genai.Client(enterprise=True, project=..., location=...) eksplisit. Pertahankan vertexai.init() jika Anda juga menggunakan platform machine learning klasik.

    Sebelum

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

    Setelah

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

    Atau konfigurasikan dari lingkungan:

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

    Pertimbangan utama:

    • Status global menjadi klien eksplisit. vertexai.init() mengonfigurasi seluruh proses; genai.Client() adalah objek yang Anda teruskan. Dengan genai.Client(), Anda dapat menggunakan dua project atau region dalam satu proses.
    • enterprise=True wajib diisi. Jika Anda menghilangkannya, klien akan otomatis menargetkan Gemini Developer API, yang kemudian akan gagal pada kredensial default aplikasi atau meminta kunci API.
    • Nama model berpindah dari konstruksi ke setiap panggilan. Tidak ada objek model bind-once. model= adalah argumen kata kunci yang diperlukan pada setiap panggilan client.models.*.
    • Autentikasi tidak berubah. Kredensial default aplikasi masih berlaku, dan credentials= menerima google.auth.credentials.Credentials di kedua SDK.
    • vertexai.init() juga membawa setelan non-generatif seperti staging_bucket, experiment, encryption_spec_key_name, service_account, network. genai.Client tidak memiliki padanan untuk keduanya.
    • Ejaan enterprise=True yang lebih baru diterima mulai google-genai 2.20.0, tetapi versi lama vertexai=True berfungsi di setiap rilis dan merupakan pilihan yang lebih aman.
  4. Audit kode Anda untuk menemukan perubahan otomatis yang menyebabkan perilaku berbeda tanpa error. Kode ini dikompilasi dan dijalankan, tetapi mengubah makna.

    Perilaku Sebelum Setelah
    response.text pada respons yang diblokir atau kosong Memunculkan ValueError Menampilkan None
    response.text dengan beberapa kandidat Memunculkan ValueError Mencatat peringatan ke dalam log, menampilkan kandidat pertama
    Penargetan klien vertexai.init() Agent Platform tersirat Menghilangkan vertexai=True akan secara otomatis menargetkan Gemini Developer API
    Embedding auto_truncate Setelan defaultnya adalah True Tidak disetel; default server berlaku
    Fungsi Python yang diteruskan sebagai alat Tidak didukung Dieksekusi secara otomatis oleh SDK
    system_instruction Terikat sekali pada model Harus diteruskan pada setiap panggilan

    Perubahan response.text adalah perubahan yang harus ditelusuri terlebih dahulu. Setiap try/except ValueError yang digabungkan dengan .text akan menjadi kode mati, dan setiap .text yang tidak dilindungi kini dapat menghasilkan None, sedangkan str sebelumnya ditampilkan:

    if response.text is None:
        print(
            "blocked or empty:",
            response.prompt_feedback,
            response.candidates[0].finish_reason if response.candidates else None,
        )
    
  5. Tetap instal google-cloud-aiplatform jika Anda menggunakan evaluasi, Agent Runtime, perintah, set data, keterampilan, dan seluruh platform machine learning klasik.

  6. Ubah panggilan ke versi baru. Mulai dengan penggantian nama mekanis, lalu lanjutkan dengan konsolidasi config=.

Perubahan panggilan berbasis tugas

Lihat panggilan yang diubah berdasarkan tugas:

Pembuatan teks

Untuk tugas pembuatan teks, semua argumen hanya berupa kata kunci. Panggilan posisi akan memunculkan TypeError.

Sebelum

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

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

Setelah

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

Pembuatan streaming

Untuk tugas pembuatan streaming, flag stream=True akan dihapus. Streaming kini menjadi metode terpisah yang menampilkan Iterator[types.GenerateContentResponse]. Gunakan if chunk.text: untuk memeriksa sebelum mengakses teks, karena setiap potongan adalah objek respons lengkap dan atribut .text-nya terkadang dapat berupa None.

Sebelum

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

Setelah

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

Pembuatan asinkron

Untuk tugas pembuatan asinkron, akhiran nama metode _async telah dihapus. Setiap panggilan asinkron berada di bawah client.aio.<module> dengan nama metode yang sama dengan panggilan sinkronnya. Tutup klien dengan await client.aio.aclose(), atau gunakan async with genai.Client(...).aio as aclient:.

Sebelum

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

Setelah

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

Sesi chat

Perhatikan perubahan berikut untuk tugas sesi chat:

  • Chat dibuat dari klien, bukan dari objek model.
  • chat.history (properti) menjadi chat.get_history() (metode). Metode baru ini menggunakan curated: bool = False. Meneruskan True hanya akan menampilkan giliran yang dipertahankan, yang tidak memiliki padanan lama.
  • client.aio.chats.create(...) menampilkan AsyncChat secara langsung. Hanya send_message dan send_message_stream yang ditunggu.
  • Opsi per giliran diringkas menjadi satu argumen: send_message(message, config=types.GenerateContentConfig(...)). Parameter pertama juga diganti namanya dari content menjadi message.
  • start_chat(response_validation=False) adalah metode baru yang tidak memiliki padanan di versi sebelumnya.

Sebelum

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)

Setelah

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)

Konfigurasi, setelan keamanan, dan petunjuk sistem

Perhatikan perubahan berikut untuk tugas konfigurasi, setelan keamanan, dan petunjuk sistem:

  • Argumen berikut diciutkan menjadi satu config= sebagai kolom GenerateContentConfig:

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

    dict biasa berfungsi di mana pun jenis konfigurasi berfungsi.

  • system_instruction berpindah dari konstruktor model ke konfigurasi per panggilan. Pada versi SDK sebelumnya, system_instruction ditetapkan sekali saat mem-build GenerativeModel. Sekarang system_instruction harus diteruskan pada setiap panggilan atau disertakan dalam client.chats.create(config=...).

  • Setelan keamanan berubah dari dict menjadi list. Misalnya, [types.SafetySetting(category=c, threshold=t) for c, t in old_dict.items()].

  • Enum diterima sebagai string biasa dan dipaksa.

  • Nama kolom skalar tidak berubah: 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.

  • Kolom baru yang tidak memiliki padanan lama mencakup thinking_config, cached_content, automatic_function_calling, http_options, media_resolution, dan speech_config.

Sebelum

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

Setelah

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 multimodal

Perhatikan perubahan berikut untuk tugas input multimodal:

Lama Baru
Part.from_uri(uri, mime_type), posisi diizinkan Part.from_uri(file_uri=, mime_type=), khusus kata kunci, parameter diganti namanya
Part.from_data(data, mime_type) Part.from_bytes(data=, mime_type=), metode diganti namanya
Part.from_text(text) Part.from_text(text=), hanya kata kunci
Image.load_from_file(path) Tidak ada yang setara; buka file dan gunakan Part.from_bytes
  • mime_type bersifat opsional di types.Part.from_uri() (disimpulkan di sisi server), tetapi tetap diperlukan di types.Part.from_bytes().
  • client.files.upload(...) hanya didukung di Gemini Developer API. Untuk workload Agent Platform, terus teruskan URI Cloud Storage menggunakan from_uri atau byte inline menggunakan from_bytes.

Sebelum

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

Setelah

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

Pemanggilan fungsi dan grounding

Perhatikan perubahan berikut untuk tugas grounding dan pemanggilan fungsi:

  • Alat dipindahkan ke config=. Tidak ada argumen tools= pada panggilan atau pada objek model.
  • Tool.from_google_search_retrieval(grounding.GoogleSearchRetrieval()) menjadi types.Tool(google_search=types.GoogleSearch()). Metode factory menjadi kolom biasa. types.Tool juga memiliki kolom google_search_retrieval terpisah.
  • response.function_calls adalah pengakses idiomatis dan tidak gagal saat bagian nol ternyata berupa teks. Penjelajahan lama masih berfungsi.
  • Skema JSON mentah ditentukan dalam parameters_json_schema. types.Schema yang diketik ditentukan dalam parameters.
  • Anda kini dapat meneruskan fungsi Python sebagai alat, dan panggilan fungsi otomatis diaktifkan secara default saat Anda meneruskan fungsi. Jika Anda mem-porting loop alat manual dan meneruskan objek fungsi, SDK akan mulai mengeksekusi kode Anda. Nonaktifkan panggilan fungsi otomatis default dengan automatic_function_calling=types.AutomaticFunctionCallingConfig(disable=True).
  • Jenis alat baru berikut tidak memiliki padanan di versi sebelumnya: code_execution, url_context, google_maps, computer_use, file_search, enterprise_web_search, mcp_servers.

Sebelum

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

Setelah

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

Embedding

Perhatikan perubahan berikut untuk tugas embedding:

  • TextEmbeddingInput dihapus. task_type dan title kini bersifat per permintaan, sehingga batch tugas campuran harus dibagi menjadi beberapa panggilan.
  • Jenis nilai yang ditampilkan diubah dari daftar langsung menjadi objek respons. get_embeddings() langsung menampilkan list[TextEmbedding], sehingga pemanggil mengindeks daftar secara langsung (embeddings[0].values). Dalam versi baru, embed_content() menampilkan objek EmbedContentResponse yang berisi daftar .embeddings, sehingga Anda harus mengakses response.embeddings[0].values. Kolom embedding individual (.values dan .statistics) mempertahankan nama aslinya.
  • auto_truncate tidak lagi ditetapkan secara default ke True. Kolom baru ditetapkan secara default ke unset. Jika Anda mengandalkan pemotongan otomatis untuk input yang terlalu panjang, tetapkan auto_truncate secara eksplisit.

Sebelum

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)

Setelah

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)

Penghitungan token

Perhatikan perubahan berikut untuk tugas penghitungan token:

  • total_billable_characters dihapus dan tidak memiliki pengganti. Setiap estimasi biaya yang dikunci pada total_billable_characters harus dikerjakan ulang (misalnya terhadap total_tokens atau response.usage_metadata) dari panggilan pembuatan.
  • client.models.compute_tokens(...) ditambahkan untuk ID token dan potongan string.
  • Penghitungan offline ditambahkan melalui google.genai.local_tokenizer.LocalTokenizer.

Sebelum

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

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

Setelah

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)

Context caching

Perhatikan perubahan berikut untuk tugas cache konteks:

  • ttl mengubah jenis dari datetime.timedelta menjadi string durasi seperti "86400s".
  • Metode objek resource menjadi panggilan modul klien.
  • update menampilkan objek baru, bukan mengubahnya di tempat.

Sebelum

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

Setelah

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)

Prediksi dan penyesuaian batch

Perhatikan perubahan berikut untuk tugas penyesuaian dan prediksi batch:

  • Polling berbasis pengikatan ulang, bukan di tempat. Tidak ada job.refresh() dan tidak ada job.has_ended. Ambil objek baru dari client.batches.get(name=...) dan bandingkan job.state dengan string JOB_STATE_*.
  • Penggantian nama batch: source_model menjadi model, input_dataset menjadi src, output_uri_prefix menjadi config.dest, job_display_name menjadi config.display_name.
  • Kontrol bentuk mesin batch dihapus dan tidak memiliki padanan dalam versi SDK baru. machine_type, accelerator_type, accelerator_count, starting_replica_count, dan max_replica_count tidak lagi menjadi kolom CreateBatchJobConfig.
  • Metode berikut diganti namanya:
    • sft.train ke client.tunings.tune
    • source_model ke base_model
    • train_dataset ke training_dataset
    • epochs ke epoch_count
  • Set data penyesuaian digabungkan. String "gs://..." kosong menjadi types.TuningDataset(gcs_uri=...).
  • adapter_size mengubah jenis dari int menjadi string enum seperti "ADAPTER_SIZE_FOUR".

Sebelum

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

Setelah

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

Restrukturisasi Agent Platform SDK

Jika Anda menggunakan modul agentplatform dari google-cloud-aiplatform, gunakan rekomendasi berikut untuk bermigrasi ke struktur SDK baru:

  1. google-cloud-agentplatform kini menjadi distribusi ringan mandiri dan penginstalan yang direkomendasikan untuk workload agen. Jika Anda tidak memerlukan platform machine learning klasik, alihkan penginstalan Anda dari pip install google-cloud-aiplatform ke pip install google-cloud-agentplatform.

  2. Gunakan tabel berikut untuk memperbarui impor dan jalur atribut:

    Sebelumnya Baru
    client.agent_engines.create client.runtimes.create (Men-deploy Agent Runtime di instance Gemini Enterprise Agent Platform, yang menyediakan Sesi Agent Platform bawaan, eksekusi kode Sandbox, dan konfigurasi memori konteks)
    client.memory_banks.create (Membuat resource Agent Platform Memory Bank mandiri untuk mempertahankan, mengelola, dan mengambil memori di seluruh interaksi)
    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. Penginisialisasi global dihapus, dan framework agen tidak lagi membaca project dan lokasi dari status aiplatform.init() atau vertexai.init(). Ganti konfigurasi yang berasal dari penginisialisasi dengan variabel lingkungan untuk apa pun yang berjalan di dalam framework agen. Kode yang mengandalkan penginisialisasi untuk mengonfigurasi agen yang di-deploy akan rusak secara otomatis, bukan memunculkan error.

  4. Perbarui situs panggilan evals.run_inference(agent=...) untuk meneruskan types.Runtime, karena SDK tidak lagi menerima types.AgentEngine.

  5. Buat perubahan berikut:

    • vertexai.Client ke agentplatform.Client
    • vertexai.rag ke agentplatform.Client().rag

    vertexai.Client memunculkan FutureWarning pada pembuatan instance pertama:

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

    vertexai.rag memunculkan UserWarning pada waktu impor modul, bukan saat panggilan. Migrasikan ke hal berikut:

    import agentplatform
    
    client = agentplatform.Client(project="your-project", location="global")
    client.rag.create_corpus(...)
    
  6. Memperbarui penanganan error seputar panggilan AdkApp dan sesi. Metode sesi sinkron dan streaming agen yang berjalan kini menampilkan error API yang mendasarinya. Pemanggil yang menangkap error umum yang digabungkan tidak lagi cocok. Ganti penangkapan untuk pengecualian wrapper library generik dengan google.api_core.exceptions.GoogleAPICallError (atau error status tertentu seperti ResourceExhausted dan NotFound).

  7. Perbarui pemanggil klien atau middleware untuk menyertakan token akses OAuth pengguna pada setiap permintaan, karena token kini bersifat sementara dan tidak dipertahankan dengan status sesi. Pastikan pembaruan token dikelola di sisi klien.

  8. Perhatikan bahwa modul a2a.tasks dihapus tanpa pengganti.