Agent Platform SDK untuk Python: panduan migrasi versi 2.0.1

Paket google-cloud-aiplatform mencakup AI Platform SDK for Python dan library klien Python Gemini Enterprise Agent Platform. Halaman ini mencakup kategori perubahan berikut dalam paket google-cloud-aiplatform:

  • Modul AI generatif berpindah 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.

  • Penataan ulang platform agen: Perubahan berikut dilakukan pada modul agentplatform google-cloud-aiplatform:

    • Mengganti nama
    • Promosi ke level teratas
    • Penghapusan penginisialisasi global

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

  • Pemisahan agentplatform: google-cloud-agentplatform kini menjadi distribusi ringan mandiri dan penginstalan yang direkomendasikan untuk beban kerja 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

Permukaan machine learning klasik (kumpulan data, pelatihan, model, prediksi, pelacakan, pipeline) didukung sepenuhnya, tidak terpengaruh oleh perubahan versi 2.0.1, dan tidak memiliki padanan dalam Google Gen AI SDK. Anda tetap dapat mengakses evaluasi, Agent Runtime, perintah, dan keahlian dengan menginstal google-cloud-aiplatform. google-cloud-aiplatform dan google-genai ada bersamaan dalam satu lingkungan, dan google-genai kini menjadi dependensi berat 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, tetapi ada alat yang setara dengan Google Gen AI SDK 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 sehingga peningkatan versi dependensi yang tidak terkait tidak dapat menghapus modul di bawah Anda.

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

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

    Jika 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 dengan -W error::UserWarning untuk menemukan impor yang terlewat.

  3. Ganti vertexai.init(...) dengan genai.Client(enterprise=True, project=..., location=...) eksplisit. Tetap gunakan 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 konfigurasi 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 menargetkan Gemini Developer API secara diam-diam, yang kemudian gagal pada kredensial default aplikasi atau memerlukan 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 untuknya.
    • 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. Periksa kode Anda untuk menemukan perubahan diam-diam yang menyebabkan perilaku menyimpang tanpa error. Kode ini dikompilasi dan dijalankan, tetapi mengubah makna.

    Perilaku Sebelum Setelah
    response.text pada respons yang diblokir atau kosong Meningkatkan ValueError Menampilkan None
    response.text dengan beberapa kandidat Meningkatkan ValueError Mencatat peringatan, menampilkan kandidat pertama
    Penargetan klien vertexai.init() tersirat Agent Platform Menghilangkan vertexai=True secara diam-diam 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 dicari terlebih dahulu. Setiap try/except ValueError yang di-wrap di sekitar .text menjadi kode tidak aktif, dan setiap .text yang tidak dilindungi kini dapat menghasilkan None yang sebelumnya menampilkan str:

    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 posisional meningkatkan 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, tanda 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 bagian adalah objek respons lengkap dan atribut .text-nya terkadang 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 dihapus. Setiap panggilan asinkron berada di bawah client.aio.<module> dengan nama metode yang sama seperti rekan 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 mengambil 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 dilipat 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 dalam 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 digabungkan 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 satu kali saat membangun 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=), hanya 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, teruskan Cloud Storage URI 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",
)

Panggilan fungsi dan perujukan

Perhatikan perubahan berikut untuk tugas panggilan fungsi dan perujukan:

  • Alat akan berpindah 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 idiomatik dan tidak gagal jika bagian nol ternyata berupa teks. Penelusuran lama masih berfungsi.
  • Skema JSON Mentah ditentukan dalam parameters_json_schema. types.Schema yang diketik ditentukan dalam parameters.
  • Sekarang Anda dapat meneruskan fungsi Python sebagai alat, dan panggilan fungsi otomatis diaktifkan secara default saat Anda meneruskan fungsi. Jika Anda mem-port 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 dalam 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 penyematan:

  • TextEmbeddingInput dihapus. task_type dan title kini per permintaan, sehingga batch tugas campuran harus dibagi menjadi beberapa panggilan.
  • Jenis nilai yang ditampilkan diubah dari daftar langsung menjadi objek respons. get_embeddings() sebelumnya menampilkan list[TextEmbedding] secara langsung, sehingga pemanggil mengindeks daftar secara langsung (embeddings[0].values). Pada versi baru, embed_content() menampilkan objek EmbedContentResponse yang berisi daftar .embeddings, sehingga Anda harus mengakses response.embeddings[0].values. Kolom sematan individual (.values dan .statistics) mempertahankan nama aslinya.
  • auto_truncate tidak lagi ditetapkan secara default ke True. Kolom baru ini ditetapkan secara default ke unset. Jika Anda mengandalkan pemotongan senyap 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)

Menghitung token

Perhatikan perubahan berikut untuk tugas penghitungan token:

  • total_billable_characters dihapus dan tidak ada penggantinya. Estimasi biaya apa pun yang didasarkan 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 penyiapan cache konteks:

  • Jenis ttl berubah 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 prediksi batch dan penyesuaian:

  • 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 di-wrap. String "gs://..." kosong akan 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",
    ),
)

Penataan ulang 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 beban kerja 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 jalur impor dan atribut:

    Sebelumnya Baru
    client.agent_engines.create client.runtimes.create (Men-deploy instance Agent Runtime di Gemini Enterprise Agent Platform, yang menyediakan Sesi bawaan, eksekusi kode Sandbox, dan konfigurasi memori konteks)
    client.memory_banks.create (Membuat resource 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 inisialisasi untuk mengonfigurasi agen yang di-deploy akan rusak tanpa menampilkan 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 memancarkan FutureWarning pada instansiasi pertama:

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

    vertexai.rag memancarkan UserWarning pada waktu impor modul, bukan saat panggilan. Bermigrasi ke berikut ini:

    import agentplatform
    
    client = agentplatform.Client(project="your-project", location="global")
    client.rag.create_corpus(...)
    
  6. Memperbarui penanganan error seputar panggilan sesi dan AdkApp. Metode sesi sinkron dan eksekusi agen streaming kini menampilkan error API yang mendasarinya. Pemanggil yang menangkap error umum yang di-wrap 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 refresh token dikelola di sisi klien.

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