1. Ringkasan
Lanskap AI dan teknologi berkembang lebih cepat daripada yang dapat dilacak oleh siapa pun. Model, makalah, dan produk baru dirilis setiap hari. Agen ringkasan yang mengambil berita utama hari ini, menulis ringkasan yang tajam, dan membuat PDF setiap pagi akan menyelesaikan masalah tersebut, tetapi untuk membuatnya, Anda harus memilih framework, menentukan alat di Python, menulis loop orkestrasi, mengemas container, dan men-deploy ke Cloud Run. Semua itu terjadi sebelum agen membuat satu permintaan web.
Agen terkelola di Gemini API mengubah persamaannya. Anda menulis dua file konfigurasi markdown dan skrip perender bawaan, melakukan satu panggilan API, dan sandbox Ubuntu yang sebenarnya akan melakukan booting, menjelajahi web, menulis ringkasan, dan membuat PDF. Tidak ada penampung. Tidak ada deployment. Tidak ada kode orkestrasi.
Dalam codelab ini, Anda akan membuat agen tersebut: dari fungsi kosong hingga ringkasan harian yang berfungsi, satu konsep dalam satu waktu.
Yang akan Anda buat
- Membuat dan menjalankan agen terkelola pertama Anda di sandbox Linux sungguhan
- Menyesuaikan agen dengan petunjuk mendetail
- Mendownload output PDF agen
- Lanjutkan percakapan untuk menyempurnakan ringkasan tanpa mengambil ulang web
- Simpan konfigurasi agen dan panggil berdasarkan ID pada proses mendatang
Yang Anda butuhkan
- Python 3.10+
- Kunci Gemini API dengan penagihan diaktifkan: aistudio.google.com/api-keys
- ~$1 kredit API (setiap proses penuh berbiaya $0,30-$1,30)
2. Apa yang dimaksud dengan Agen terkelola di Gemini API?
Tiga tingkat sistem AI
Sebelum mempelajari kode, berikut adalah posisi Agen Terkelola dibandingkan dengan dua alternatif lainnya:
Level | Apa Ini | Siapa yang Mengelola Infrastruktur? |
LLM Standar | Anda memberikan perintah, AI akan membalas dengan teks. Tidak ada tangan, tidak ada memori, tidak ada internet. | T/A: tidak dapat melakukan apa pun sendiri |
Agen yang Dihosting Sendiri | Anda menghubungkan ADK/LangChain/AutoGen + Docker + alat + memori. | Anda: semuanya (atau platform terkelola seperti Agent Engine) |
Managed Agent | Anda menetapkan sasaran. Google menyediakan sandbox yang aman. Agen menulis kode, menjalankannya, membaca error, menelusuri web, dan memperbaiki bug secara mandiri. | Google: semuanya |
Codelab ini membahas baris ketiga. Anda menyediakan file tugas dan konfigurasi. Google akan menangani sisanya.
Yang akan Anda bangun dengan ADK + Cloud Run
Untuk membuat agen ringkasan berita yang menjelajahi web, menjalankan Python, dan membuat PDF, Anda memerlukan semua hal berikut dengan ADK + Cloud Run:
# agent.py: define tools and wire up the agent
from google.adk.agents import LlmAgent
from google.adk.tools import google_search, built_in_code_execution
agent = LlmAgent(
name="digest-agent",
model=MODEL,
instruction=AGENTS_MD, # your editorial voice and rules
tools=[google_search, built_in_code_execution],
)
# app.py: serve the agent over HTTP
from google.adk.runners import FastApiRunner
runner = FastApiRunner(agent=agent)
app = runner.app
# pdf_tool.py: custom tool, install reportlab, render PDF
# scraper.py: custom tool, fetch each news source
# streaming.py: wire agent events to your SSE endpoint
# Dockerfile: package everything
FROM python:3.12
COPY . /app
RUN pip install google-adk reportlab requests
CMD ["uvicorn", "app:app", "--host", "0.0.0.0"]
# Deploy to Cloud Run
gcloud run deploy digest-agent \
--image gcr.io/your-project/digest-agent \
--set-secrets GEMINI_API_KEY=gemini-key:latest \
--memory 2Gi
Hal ini terjadi sebelum agen dijalankan satu kali. Anda tetap memiliki isolasi sandbox (sehingga agen tidak dapat merusak server Anda), penginstalan paket, pengelolaan status di antara panggilan alat, dan infrastruktur streaming untuk mendapatkan peristiwa ke klien.
Penggantiannya dengan Agen Terkelola
from google import genai
client = genai.Client()
stream = client.interactions.create(
agent="antigravity-preview-05-2026",
input="",
stream=True,
environment={
"type": "remote",
"sources": [ # your config files, mounted at startup
{
"type": "inline",
"target": ".agents/AGENTS.md",
"content": AGENTS_MD,
},
{
"type": "inline",
"target": ".agents/skills/digest-pdf/SKILL.md",
"content": SKILL_MD,
},
{
"type": "inline",
"target": ".agents/skills/digest-pdf/scripts/generate_pdf.py",
"content": GENERATE_PDF_PY,
},
],
},
)
Yang diperlukan ADK + Cloud Run | Yang ditangani Agen Terkelola untuk Anda |
Image container + Dockerfile + CI/CD | Sandbox Ubuntu yang dikelola sepenuhnya (Python 3.12, Node 22, 4 CPU / 16 GB RAM) |
Deployment + penskalaan Cloud Run | Disediakan per interaksi, otomatis berakhir setelah 7 hari tidak aktif |
Isolasi sandbox | Diisolasi per interaksi |
Alat PDF kustom + | Agen menginstal paket di dalam sandbox |
Infrastruktur streaming SSE |
|
Definisi alat di Python | Alat bawaan: penjelajahan web, eksekusi kode, sistem file |
Pengelolaan status di antara panggilan alat | Terintegrasi ke dalam reasoning loop agen |
Anda menulis file konfigurasi (AGENTS.md, SKILL.md, skrip bawaan) dan melakukan satu panggilan API. Google akan menangani sisanya.
Cara kerja sandbox
interactions.create() call
│
▼
Google provisions Ubuntu sandbox (Python 3.12, Node 22, 4 CPU / 16 GB RAM)
│
▼
Agent reasoning loop:
plan → fetch URLs → run Python → write files → reason → repeat
│
▼
Events stream back in real time: tool calls, text chunks, completion
│
▼
interaction.completed → environment_id + interaction_id
Sandbox akan tetap ada selama 7 hari tidak aktif. Anda dapat melanjutkannya dengan environment_id untuk menyempurnakan output, menjalankan tugas lanjutan, atau membuat fork ke agen bernama yang disimpan.
3. Siapkan
Opsi A: Cloud Shell (direkomendasikan)
Klik tombol di bawah untuk membuka codelab ini di Google Cloud Shell. Semua dependensi telah diinstal sebelumnya.
Opsi B: Penyiapan lokal
git clone https://github.com/Saoussen-CH/tech-digest-managed-agent.git
cd tech-digest-managed-agent
Instal uv jika diperlukan:
curl -LsSf https://astral.sh/uv/install.sh | sh
Konfigurasi kunci API Anda
cp .env.example .env
cloudshell edit .env
Tetapkan kunci Anda:
GEMINI_API_KEY=your-key-here
Menginstal dependensi
uv sync
4. Melakukan Panggilan Agen Pertama Anda
Membuka file awal
cloudshell edit run_digest.py
run_digest() memiliki satu TODO yang harus diisi sekarang dan tiga lagi untuk langkah berikutnya. Dua pembantu sudah diisi otomatis di atasnya:
load_source(path): membaca file dari.agents/relatif terhadap skrip. Anda akan menggunakannya dalam latihan berikutnya untuk memasang gaya editorial, buku pedoman PDF, dan perender ke dalam sandbox.run_stream(stream): memproses aliran peristiwa dan menampilkan(environment_id, interaction_id). Anda tidak perlu menulis sendiri loop peristiwa.
Yang harus ditambahkan
TODO 1: ganti pass dengan (abaikan TODO 3, 4 untuk saat ini — TODO tersebut untuk langkah berikutnya):
from google import genai
client = genai.Client()
stream = client.interactions.create(
agent=BASE_AGENT,
input="Fetch the Hacker News front page and list the top 5 stories.",
stream=True,
environment="remote",
)
environment_id, interaction_id = run_stream(stream)
print(f"\nDone. environment_id={environment_id}")
Fungsi setiap bagian
genai.Client() membaca GEMINI_API_KEY dari lingkungan. Semua hal lainnya melewati klien ini.
interactions.create() adalah panggilan inti. Empat parameter yang membuatnya berfungsi:
agent=BASE_AGENT: memilih agen Antigravity (antigravity-preview-05-2026), agen terkelola serbaguna yang didukung oleh Gemini 3.5 Flash. Cloud Shell dilengkapi dengan tiga alat bawaan yang diaktifkan secara default:code_execution(jalankan Bash, Python, Node.js),google_search, danurl_context(ambil dan baca halaman web). Alat sistem file (read_file,write_file,list_files) diaktifkan secara otomatis saat Anda meneruskan parameterenvironment. Satu panggilan menyediakan lingkungan Ubuntu yang terkelola sepenuhnya dengan Python 3.12, Node.js 22, git, pip, dan curl yang telah diinstal sebelumnya. Tidak ada container yang akan dibangun, tidak ada deployment yang akan dijalankan.input: tugas untuk proses ini. Agen menjelajahi Hacker News dan mempertimbangkan hasilnya.environment="remote": menyediakan sandbox cloud baru untuk interaksi ini.stream=True: menampilkan iterable peristiwa, bukan memblokir. Tanpa itu, panggilan akan menunggu 30-90 detik dan menampilkan semua output sekaligus sebagaiinteraction.output_text. Dengan streaming, Anda dapat melihat alasan dan tindakan agen secara real time. Streaming bukanlah fitur lanjutan di sini: ini adalah default yang tepat, karena kotak hitam 90 detik tidak memberi Anda sinyal tentang apakah agen berfungsi atau macet.
Yang baru saja Anda sediakan: setiap panggilan interactions.create() akan mem-boot sandbox khusus:
Komponen | Spesifikasi |
Sistem Operasi | Lingkungan Ubuntu Linux yang terisolasi |
Runtime yang telah diinstal sebelumnya | Python 3.12, Node.js 22, Bash |
Compute | 4 core CPU, RAM 16 GB |
Pengelolaan Konteks | Pemicu pemadatan otomatis pada ~135 ribu token |
Networking | Akses web keluar melalui Egress Proxy |
Agen dapat menginstal paket apa pun dengan pip atau npm, membaca dan menulis file, serta membuat permintaan web keluar. Mesin dan kredensial Anda tidak akan pernah diakses.
environment_id adalah tuas ke sandbox yang baru saja berjalan. Setelah interaction.completed, sandbox tidak akan ditutup: sandbox akan tetap aktif hingga 7 hari. environment_id adalah cara Anda kembali ke halaman tersebut. Teruskan ke panggilan interactions.create() kedua dan agen akan dilanjutkan di sistem file yang sama, dengan file dan paket yang diinstal yang sama, seolah-olah tidak pernah keluar. Langkah berikutnya menggunakannya untuk mendownload PDF tanpa menjalankan ulang agen, dan langkah setelahnya menggunakannya untuk melanjutkan percakapan.
interaction_id adalah handle untuk giliran percakapan yang baru saja selesai. Teruskan sebagai previous_interaction_id dalam panggilan berikutnya dan agen memiliki memori penuh tentang apa yang dikatakan dan dilakukannya pada giliran ini.
Verifikasi
uv run python run_digest.py
Anda akan melihat output langsung saat agen bekerja:
[agent started]
[tool] run_code
Here are the top 5 stories currently on the Hacker News front page, retrieved via the official Hacker News API:
1. **Qwen 3.6 27B is the sweet spot for local development** — 471 points
2. **.self: A new top-level domain designed to support self-hosting** — 116 points
...
Done. environment_id=e3de58774073f75a6ef42924c6ce2e88
API menampilkan environment_id yang sebenarnya meskipun dengan environment="remote". Sandbox berjalan. Yang tidak ada adalah konfigurasi: tidak ada suara, tidak ada skill, tidak ada generator PDF. Agen baru saja mencetak cerita sebagai teks dan berhenti. Langkah berikutnya akan menambahkan batasan tersebut.
Setiap baris output memetakan ke peristiwa dari run_stream():
| Penjelasan | Yang dicetak |
| agen mengambil URL |
|
| agen yang menjalankan kode di sandbox |
|
| agen menelusuri web |
|
| alat file dan lainnya |
|
| agen sedang menulis teks | di-streaming langsung ke stdout |
5. Menyesuaikan Agen
Agen tidak memiliki petunjuk: tidak ada suara, tidak ada skill, tidak ada generator PDF. Pada langkah ini, Anda akan memuat file konfigurasi dari .agents/ dan memasangnya ke sandbox.
Yang akan diubah
Buat empat perubahan pada run_digest.py:
TODO 2: Di bawah load_source(), tambahkan tiga konstanta tingkat modul (ini berada di luar run_digest(), di bagian atas file):
AGENTS_MD = load_source(".agents/AGENTS.md")
SKILL_MD = load_source(".agents/skills/digest-pdf/SKILL.md")
GENERATE_PDF_PY = load_source(".agents/skills/digest-pdf/scripts/generate_pdf.py")
Buka setiap file untuk melihat apa yang Anda muat: AGENTS.md menetapkan aturan alur kerja dan gaya bahasa editorial; SKILL.md adalah panduan PDF langkah demi langkah; generate_pdf.py adalah perender bawaan yang akan dijalankan agen.
Sekarang, buat dua perubahan lagi di dalam run_digest():
TODO 3: ubah environment dari "remote" ke dict sumber, dan tetapkan input ke "":
environment={
"type": "remote",
"sources": [
{
"type": "inline",
"target": ".agents/AGENTS.md",
"content": AGENTS_MD,
},
{
"type": "inline",
"target": ".agents/skills/digest-pdf/SKILL.md",
"content": SKILL_MD,
},
{
"type": "inline",
"target": ".agents/skills/digest-pdf/scripts/generate_pdf.py",
"content": GENERATE_PDF_PY,
},
],
},
TODO 4: tambahkan baris ini tepat setelah print(f"\nDone. environment_id={environment_id}"):
set_key(".env", "ENVIRONMENT_ID", environment_id)
set_key(".env", "INTERACTION_ID", interaction_id)
(set_key sudah diimpor di bagian atas run_digest.py.)
Tindakan ini akan menulis kedua ID ke .env selama proses ini, sehingga langkah berikutnya dapat mendownload PDF tanpa menjalankan ulang agen.
Fungsi setiap sumber
Setiap sumber adalah file yang dipasang ke sistem file sandbox saat startup sebelum agen berjalan. Jalur target cocok dengan tempat tali pengaman Antigravity diharapkan menemukannya:
.agents/
├── AGENTS.md ← auto-loaded as global instructions
└── skills/
└── digest-pdf/
├── SKILL.md ← auto-discovered and registered as a skill
└── scripts/
└── generate_pdf.py ← pre-built renderer the agent can run
Jalur | Variabel | Fungsi tali pengikat |
|
| Dimuat otomatis sebagai petunjuk persisten: gaya editorial, alur kerja, aturan eksekusi |
|
| Ditemukan dan didaftarkan secara otomatis sebagai skill bernama; agen memanggilnya berdasarkan nama |
|
| Perender PDF bawaan; agen menulis |
Verifikasi
uv run python run_digest.py
Sekarang, prosesnya memerlukan waktu 1-3 menit. Anda akan melihat agen membaca file konfigurasi, menulis ringkasan, dan menyimpan PDF:
[agent started]
[tool] read_file (/.agents/skills/digest-pdf/SKILL.md)
[tool] list_files (/.agents/skills/digest-pdf/scripts)
[tool] read_file (/.agents/skills/digest-pdf/scripts/generate_pdf.py)
[tool] run_code
[tool] write_file (/workspace/summaries.json)
[tool] run_code
[tool] delete_file (/tmp/test_scrape.py)
I have successfully generated today's tech news digest and saved the formatted document to /workspace/digest.pdf.
Done. environment_id=4129ffd75574e308748e9425d7ec828f
environment_id kini menjadi nilai sebenarnya: sandbox berjalan dengan file konfigurasi Anda dan agen membuat digest.pdf. Langkah berikutnya adalah mendownloadnya.
6. Unduh PDF
Agen menulis digest.pdf ke /workspace/digest.pdf di dalam sandbox. Snapshot lingkungan tersedia sebagai arsip tar melalui Gemini Files API.
Instal requests jika diperlukan:
uv pip install requests
Yang harus diisi
Buka download_pdf.py. Ada dua TODO.
TODO 1: isi panggilan requests.get():
r = requests.get(
f"https://generativelanguage.googleapis.com/v1beta/files/environment-{environment_id}:download",
params={"alt": "media"},
headers={"x-goog-api-key": api_key},
allow_redirects=True,
)
r.raise_for_status()
URL menangani snapshot sandbox. params={"alt": "media"} menampilkan byte mentah, bukan metadata. GEMINI_API_KEY yang ada juga mengautentikasi Files API.
TODO 2: temukan dan ekstrak PDF dari arsip tar:
member = next(m for m in tar.getmembers() if m.name.endswith("workspace/digest.pdf"))
tar.extract(member, path=tmp, filter="data")
Awalan jalur tar bervariasi di seluruh proses, jadi telusuri berdasarkan akhiran, bukan dengan meng-hardcode jalur persisnya. filter="data" menekan peringatan penghentian penggunaan Python 3.13 tentang ekstraksi tar yang tidak aman.
Verifikasi
uv run python download_pdf.py
Saved digest.pdf (48,231 bytes)
Buka digest.pdf di direktori yang sama. Objek ini berisi ringkasan berformat yang dihasilkan agen dari halaman web aktif.
7. Melanjutkan Percakapan
Anda sudah memiliki digest.pdf. Jika hanya menginginkan file, Anda sudah selesai. Langkah ini membahas hal yang berbeda: meminta agen untuk mengubah ringkasan tanpa mengambil ulang web.
Sandbox masih aktif. Agen masih memiliki /workspace/digest.pdf dan mengingat setiap cerita yang diringkasnya. Panggilan interactions.create() kedua mengirimkan pesan lanjutan ke sandbox yang sama. Di sini, Anda memintanya untuk menambahkan catatan "Mengapa ini penting" di bawah setiap cerita, dan PDF akan diperbarui di tempat, tanpa pengambilan ulang dan tanpa meringkas ulang.
Yang harus diisi
Buka refine_digest.py. Ada tiga TODO.
TODO 1 dan 2: isi dua parameter multi-turn di dalam interactions.create():
environment=environment_id,
previous_interaction_id=interaction_id,
environment=environment_id melanjutkan sandbox yang sama dengan file dan paketnya. previous_interaction_id=interaction_id memberikan histori percakapan agen. Tidak ada perubahan lain dari panggilan pertama.
TODO 3: mempertahankan interaction_id baru kembali ke .env setelah loop peristiwa:
set_key(".env", "INTERACTION_ID", interaction_id)
Setiap panggilan interactions.create() menghasilkan interaction_id baru. Menulisnya kembali berarti proses berikutnya akan meneruskan penyempurnaan ini sebagai previous_interaction_id, sehingga rantai belokan dengan benar. ID sandbox tidak pernah berubah sehingga ENVIRONMENT_ID tidak perlu diperbarui.
Dua parameter yang membuat percakapan multi-giliran berfungsi
ID | Yang dipertahankan | Analogi |
| File, paket yang diinstal, status sistem: semuanya ada di sistem file Linux | Mempertahankan meja kantor yang sama di antara rapat |
| Histori percakapan: apa yang dikatakan dan dilakukan agen pada giliran sebelumnya | Mengingat apa yang dibahas dalam rapat terakhir |
Anda dapat meneruskan salah satu ID secara terpisah:
environment_idsaja: menggunakan kembali file dan paket, tetapi memulai percakapan baru. Berguna untuk tugas baru di ruang kerja yang sama.previous_interaction_idsaja: melanjutkan konteks percakapan, tetapi di sandbox baru (file hilang).- Keduanya: kontinuitas penuh, yang digunakan oleh langkah ini.
Tanpa environment_id: sandbox kosong, tidak ada PDF. Tanpa previous_interaction_id: tidak ada konteks, agen tidak dapat menyempurnakan bagian tertentu.
Verifikasi
uv run python refine_digest.py
Streaming harus cepat; agen tidak mengambil ulang apa pun. Setelah selesai:
Refinement done.
Saved digest_v2.pdf (52,418 bytes)
Buka digest_v2.pdf dan bandingkan dengan digest.pdf. Setiap cerita kini harus memiliki baris "Mengapa ini penting".
8. Mempertahankan Konfigurasi Agen Terkelola
Setiap panggilan sejauh ini telah meneruskan AGENTS.md, SKILL.md, dan generate_pdf.py secara inline. Cara tersebut berhasil, tetapi kode panggilan Anda membawa seluruh konten file pada setiap eksekusi. agents.create() membuat konfigurasi ke dalam agen bernama yang disimpan di sisi Google. Pemanggilan berikutnya hanya meneruskan ID agen:
Inline calls: send sources on every call
Named agent: bake once → invoke by ID, no sources
Yang harus diisi
Buka save_agent.py. Ada satu TODO (TODO 1).
Perhatikan bahwa konstanta diimpor langsung dari run_digest.py (tanpa duplikasi):
from run_digest import BASE_AGENT, AGENTS_MD, SKILL_MD, GENERATE_PDF_PY
TODO 1: isi panggilan agents.create():
agent = client.agents.create(
id="my-digest",
base_agent=BASE_AGENT,
description="Daily tech digest with editorial voice and PDF generation.",
base_environment={
"type": "remote",
"sources": [
{
"type": "inline",
"target": ".agents/AGENTS.md",
"content": AGENTS_MD,
},
{
"type": "inline",
"target": ".agents/skills/digest-pdf/SKILL.md",
"content": SKILL_MD,
},
{
"type": "inline",
"target": ".agents/skills/digest-pdf/scripts/generate_pdf.py",
"content": GENERATE_PDF_PY,
},
],
},
)
base_environment (bukan environment) adalah perbedaan utama dari panggilan inline pada langkah sebelumnya: sumber disimpan di sisi Google dan dipasang secara otomatis pada setiap pemanggilan di masa mendatang. Eksekusi sekali, bukan pada setiap proses ringkasan.
Verifikasi: simpan agen
uv run python save_agent.py
Saved: my-digest
my-digest: Daily tech digest with editorial voice and PDF generation.
Memanggil agen yang disimpan
Buka invoke_agent.py. Agen yang disimpan dipanggil berdasarkan ID tanpa sumber:
stream = client.interactions.create(
agent="my-digest",
input="",
stream=True,
environment="remote",
)
Bandingkan dengan panggilan inline: agent=BASE_AGENT digantikan oleh "my-digest", dan blok environment lengkap dengan tiga sumber inline digantikan oleh environment="remote". Konfigurasi sudah diterapkan di sisi Google.
Verifikasi: panggil agen yang disimpan
uv run python invoke_agent.py
Anda akan melihat live stream yang sama seperti saat dijalankan inline, tetapi panggilan tidak membawa file sumber. Setelah dijalankan, ENVIRONMENT_ID dan INTERACTION_ID di .env akan diperbarui sehingga Anda dapat melanjutkan refine_digest.py seperti sebelumnya.
[agent started]
[tool] read_file
[tool] write_file
[tool] run_code
I have successfully created today's tech news digest.
Done. environment_id=9a1c3e02-...
9. Pembersihan
Sandbox akan otomatis berakhir masa berlakunya setelah 7 hari tidak aktif. Tidak ada server yang perlu dihentikan. Tidak ada penampung untuk dihapus.
Jika Anda menyimpan konfigurasi agen, hapus konfigurasi tersebut:
uv run python delete_agent.py
10. Ringkasan
Anda telah membangun agen terkelola dari awal, satu konsep dalam satu waktu. Berikut adalah materi yang diajarkan dalam setiap latihan:
Latihan | Konsep | Key API |
Melakukan panggilan pertama Anda | Menyediakan sandbox Linux asli dan melakukan streaming langsung peristiwanya |
|
Menyesuaikan agen | Memasang file konfigurasi; mempertahankan ID ke |
|
Unduh PDF | Mendownload PDF tanpa menjalankan ulang agen | Gemini Files API |
Lanjutkan percakapan | Melanjutkan percakapan tanpa mengambil ulang web |
|
Mempertahankan konfigurasi agen | Mempertahankan konfigurasi agen; dipanggil berdasarkan ID, tidak memerlukan sumber |
|
Pola utama
- Satu panggilan, satu sandbox:
interactions.create()menangani semua infrastruktur (tidak ada container untuk di-deploy, tidak ada paket untuk diinstal secara lokal) - Streaming progresif:
stream=Truemengubah kotak hitam berdurasi 90 detik menjadi feed live dari panggilan alat dan potongan teks - Sumber inline: memasang skrip
AGENTS.md,SKILL.md, dan bawaan ke sandbox tanpa langkah upload atau deployment - Penemuan otomatis harness: file yang ditempatkan di
.agents/akan diambil secara otomatis (tidak memerlukan konfigurasi SDK) - Status dua dimensi:
environment_idmelacak file dan paket;previous_interaction_idmelacak konteks percakapan; keduanya dapat diteruskan secara independen - Download snapshot: lingkungan adalah tar sistem file lengkap, yang dapat diakses melalui Gemini Files API
- Agen bernama:
agents.create()memanggang konfigurasi secara permanen; panggilan mendatang hanya meneruskan ID agen danenvironment="remote", tanpa sumber
ADK + Cloud Run vs. Agen Terkelola: sekilas tentang perbedaannya
Kemampuan | ADK + Cloud Run | Agen terkelola di Gemini API |
Menyediakan sandbox |
|
|
Menentukan alat | Fungsi Python yang terdaftar di agen | Bawaan: penjelajahan web, eksekusi kode, sistem file |
Menginstal paket |
| Agen berjalan |
Streaming peristiwa | Infrastruktur SSE kustom |
|
Melanjutkan sesi | Database sesi + injeksi konteks |
|
File konfigurasi | Dikodekan secara permanen di agen atau disuntikkan saat startup | Dipasang melalui |
Infrastruktur yang akan dikelola | Container, Cloud Run, IAM, secret | Tidak ada |