Membangun Agen Ringkasan Teknologi Terkelola dengan Gemini API

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 + pip install

Agen menginstal paket di dalam sandbox

Infrastruktur streaming SSE

stream=True menampilkan iterable acara

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

Klik tombol di bawah untuk membuka codelab ini di Google Cloud Shell. Semua dependensi telah diinstal sebelumnya.

Buka di Cloud Shell

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, dan url_context (ambil dan baca halaman web). Alat sistem file (read_file, write_file, list_files) diaktifkan secara otomatis saat Anda meneruskan parameter environment. 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 sebagai interaction.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():

step.type

Penjelasan

Yang dicetak run_stream()

"url_context_call"

agen mengambil URL

[tool] url_context (https://...)

"code_execution_call"

agen yang menjalankan kode di sandbox

[tool] run_code

"google_search_call"

agen menelusuri web

[tool] google_search

"function_call"

alat file dan lainnya

[tool] read_file (/workspace/...)

step.delta yang delta.type == "text"

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 target

Variabel

Fungsi tali pengikat

.agents/AGENTS.md

AGENTS_MD

Dimuat otomatis sebagai petunjuk persisten: gaya editorial, alur kerja, aturan eksekusi

.agents/skills/digest-pdf/SKILL.md

SKILL_MD

Ditemukan dan didaftarkan secara otomatis sebagai skill bernama; agen memanggilnya berdasarkan nama

.agents/skills/digest-pdf/scripts/generate_pdf.py

GENERATE_PDF_PY

Perender PDF bawaan; agen menulis summaries.json lalu menjalankan skrip ini

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

environment=environment_id

File, paket yang diinstal, status sistem: semuanya ada di sistem file Linux

Mempertahankan meja kantor yang sama di antara rapat

previous_interaction_id=interaction_id

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_id saja: menggunakan kembali file dan paket, tetapi memulai percakapan baru. Berguna untuk tugas baru di ruang kerja yang sama.
  • previous_interaction_id saja: 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

interactions.create(agent, input, environment, stream=True), event.event_type

Menyesuaikan agen

Memasang file konfigurasi; mempertahankan ID ke .env dalam proses yang sama

environment.sources, set_key

Unduh PDF

Mendownload PDF tanpa menjalankan ulang agen

Gemini Files API :download di download_pdf.py

Lanjutkan percakapan

Melanjutkan percakapan tanpa mengambil ulang web

environment=environment_id, previous_interaction_id=interaction_id

Mempertahankan konfigurasi agen

Mempertahankan konfigurasi agen; dipanggil berdasarkan ID, tidak memerlukan sumber

agents.create(), agents.list()

Pola utama

  1. Satu panggilan, satu sandbox: interactions.create() menangani semua infrastruktur (tidak ada container untuk di-deploy, tidak ada paket untuk diinstal secara lokal)
  2. Streaming progresif: stream=True mengubah kotak hitam berdurasi 90 detik menjadi feed live dari panggilan alat dan potongan teks
  3. Sumber inline: memasang skrip AGENTS.md, SKILL.md, dan bawaan ke sandbox tanpa langkah upload atau deployment
  4. Penemuan otomatis harness: file yang ditempatkan di .agents/ akan diambil secara otomatis (tidak memerlukan konfigurasi SDK)
  5. Status dua dimensi: environment_id melacak file dan paket; previous_interaction_id melacak konteks percakapan; keduanya dapat diteruskan secara independen
  6. Download snapshot: lingkungan adalah tar sistem file lengkap, yang dapat diakses melalui Gemini Files API
  7. Agen bernama: agents.create() memanggang konfigurasi secara permanen; panggilan mendatang hanya meneruskan ID agen dan environment="remote", tanpa sumber

ADK + Cloud Run vs. Agen Terkelola: sekilas tentang perbedaannya

Kemampuan

ADK + Cloud Run

Agen terkelola di Gemini API

Menyediakan sandbox

docker build + gcloud run deploy

interactions.create()

Menentukan alat

Fungsi Python yang terdaftar di agen

Bawaan: penjelajahan web, eksekusi kode, sistem file

Menginstal paket

pip install di Dockerfile

Agen berjalan pip install di dalam sandbox

Streaming peristiwa

Infrastruktur SSE kustom

stream=True

Melanjutkan sesi

Database sesi + injeksi konteks

environment_id + previous_interaction_id

File konfigurasi

Dikodekan secara permanen di agen atau disuntikkan saat startup

Dipasang melalui environment.sources

Infrastruktur yang akan dikelola

Container, Cloud Run, IAM, secret

Tidak ada

Langkah berikutnya