AI Agent End to End - Workshop

1. Yang akan Anda pelajari

Full Stack Vibe Agen AI

Selamat datang! Anda akan mempelajari keterampilan penting berikutnya dalam pengembangan software: cara memandu Kecerdasan Buatan secara efektif untuk membuat, menguji, dan men-deploy software tingkat produksi. AI generatif bukanlah "autopilot"; AI ini adalah kopilot canggih yang membutuhkan pengarah yang terampil.

Workshop ini memberikan metodologi terstruktur dan dapat diulang untuk berpartner dengan AI di setiap tahap Siklus Proses Pengembangan Software (SDLC) profesional. Anda akan beralih dari penulis kode baris demi baris menjadi direktur teknis—arsitek dengan visi dan kontraktor umum yang menggunakan AI untuk mengeksekusi visi tersebut dengan presisi. 🚀

demo

Setelah menyelesaikan tutorial ini, Anda akan:

  • Menerjemahkan ide tingkat tinggi menjadi arsitektur cloud menggunakan AI.
  • Membuat backend Python lengkap dengan perintah yang ditargetkan dan spesifik.
  • Menggunakan AI sebagai pendamping programmer untuk mendebug dan memperbaiki kode.
  • Mendelegasikan pembuatan pengujian unit, termasuk tiruan, ke AI.
  • Menghasilkan Infrastructure as Code (IaC) yang siap produksi dengan Terraform.
  • Membuat pipeline CI/CD lengkap di GitHub Actions dengan satu perintah.
  • Memantau dan mengelola aplikasi aktif Anda menggunakan alat operasional yang didukung teknologi AI.

Anda tidak hanya akan memiliki aplikasi yang berfungsi, tetapi juga cetak biru untuk pengembangan yang ditingkatkan AI. Mari kita mulai!

2. Prasyarat dan Penyiapan

Sebelum memulai, siapkan lingkungan Anda. Ini adalah langkah penting untuk memastikan pengalaman workshop yang lancar.

Untuk mendukung agen AI kami, kami memerlukan dua hal: Project Google Cloud untuk menyediakan fondasi dan Kunci API Gemini untuk mengakses model canggih Google.

Langkah 1: Aktifkan Akun Penagihan

  • Untuk mengklaim akun penagihan dengan kredit 5 dolar, Anda akan memerlukannya untuk deployment. Pastikan Anda login ke akun Gmail Anda.

Langkah 2: Buat Project GCP Baru

buat akun gcp baru

  • Buka panel kiri, klik Billing, periksa apakah akun penagihan ditautkan ke akun GCP ini.

Tautkan akun penagihan ke akun GCP

Jika Anda melihat halaman ini, periksa manage billing account, pilih Google Cloud Trial One, dan tautkan ke halaman tersebut.

Langkah 3: Buat Kunci Gemini API Anda

Sebelum dapat mengamankan kunci, Anda harus memilikinya.

  • Buka Google AI Studio : https://aistudio.google.com/
  • Login dengan akun Gmail Anda.
  • Klik tombol "Dapatkan kunci API", yang biasanya ada di panel navigasi sebelah kiri atau di sudut kanan atas.
  • Pada dialog "Kunci API", klik "Buat kunci API di project baru". Buat kunci API di project baru
  • Pilih project baru yang Anda buat dan telah menyiapkan akun penagihan. Pilih project baru
  • Kunci API baru akan dibuat untuk Anda. Segera salin kunci ini dan simpan di tempat yang aman untuk sementara (seperti pengelola sandi atau catatan aman). Nilai ini akan Anda gunakan pada langkah berikutnya.

Autentikasi GitHub

Buka Cloud Shell dengan membuka Konsol Google Cloud, lalu klik tombol "Activate Cloud Shell" di kanan atas.

Langkah 1: Buka Cloud Shell

👉Klik "Activate Cloud Shell" di bagian atas Konsol Google Cloud (Ikon berbentuk terminal di bagian atas panel Cloud Shell), cloud-shell.png

👉Klik tombol "Open Editor" (terlihat seperti folder terbuka dengan pensil). Tindakan ini akan membuka Editor Kode Cloud Shell di jendela. Anda akan melihat file explorer di sisi kiri. open-editor.png

👉Setelah editor terbuka, buka terminal di IDE cloud,

03-05-new-terminal.png

👉💻 Di terminal, verifikasi bahwa Anda sudah diautentikasi dan project ditetapkan ke project ID Anda menggunakan perintah berikut:

gcloud auth list

Langkah 2: Lakukan Autentikasi dengan GitHub & Fork

Melakukan autentikasi dengan GitHub:

👉💻 Salin dan tempel perintah ke terminal cloud Anda:

gh auth login
  • "Di mana Anda menggunakan GitHub", pilih "GitHub.com"
  • "What is you preferred protocol for Git operations on this host?", pilih "HTTPS"
  • "Authenticate Git with your GitHub credentials?", pilih "Yes"
  • "How would you like to authenticate GitHub CLI?", pilih "Login with a web browser"

penting!! jangan tekan "enter" dulugit1.png

salin kode dari terminal ke halaman verifikasi login

git2.png

Setelah Anda selesai memasukkan kode, kembali ke Cloud Shell Terminal, tekan "enter" untuk melanjutkan.

Langkah 4: Buat Fork dan Clone repo:

👉💻 Salin dan tempel perintah ke terminal cloud Anda:

gh repo fork cuppibla/storygen-learning --clone=true

3. Arsitektur: Dari Ide hingga Blueprint dengan Cloud Assist

Setiap project yang hebat dimulai dengan visi yang jelas. Kita akan menggunakan kopilot AI, Cloud Assist, untuk mendesain arsitektur aplikasi.

arsitektur

Tindakan

  • Buka Konsol Google Cloud: [https://console.cloud.google.com](Google Cloud Console)
  • Di pojok kanan atas, klik "buka Chat Cloud Assist"

cloud_assist_1

Aktifkan Cloud Assist

  • Klik Get Gemini Assist, lalu Enable Cloud Assist at no cost.
  • Lalu Mulai Chat!

cloud_assist_3 Berikan perintah mendetail berikut ke Cloud Assist:

Masukkan Ide Anda

Generate a Python web application that uses AI to generate children's stories and illustrations. It has Python backend and React frontend host separately on Cloudrun. They communicate through Websocket. It needs to use a generative model for text and another for images. The generated images must be used by Imagen from Vertex AI and stored in a Google Cloud Storage bucket so that frontend can fetch from the bucket to render images. I do not want any load balancer or a database for the story text. We need a solution to store the API key.

Mendapatkan Cetak Biru Aplikasi Anda

  • Klik: "Edit desain aplikasi", Anda akan melihat diagram. Klik panel kanan atas "<> Get Code" untuk mendownload kode Terraform.
  • Cloud Assist akan membuat diagram arsitektur. Ini adalah cetak biru visual kita. cloud_assist_4

Anda tidak perlu melakukan Tindakan apa pun dengan kode ini. Baca penjelasan selengkapnya di bawah

Memahami Kode Terraform yang Dibuat. Anda baru saja menerima sekumpulan lengkap file Terraform dari Cloud Assist. Untuk saat ini, tidak ada tindakan yang diperlukan dengan kode ini, tetapi mari kita bahas secara singkat apa itu dan mengapa kode ini sangat efektif.

Apa yang dimaksud dengan Terraform? Terraform adalah alat Infrastructure as Code (IaC). Anggap saja sebagai cetak biru untuk lingkungan cloud Anda, yang ditulis dalam kode. Daripada mengklik Konsol Google Cloud secara manual untuk membuat layanan, penyimpanan, dan izin, Anda dapat menentukan semua resource tersebut dalam file konfigurasi ini. Kemudian, Terraform membaca blueprint Anda dan membuat lingkungan yang persis sama untuk Anda secara otomatis.

Dari Rencana Visual ke Kode yang Dapat Dieksekusi. Diagram arsitektur yang diberikan Cloud Assist adalah rencana visual Anda. Kode Terraform adalah versi rencana yang sama yang dapat dibaca mesin. Ini adalah link penting yang mengubah konsep desain menjadi kenyataan otomatis yang dapat direproduksi. Dengan menentukan infrastruktur dalam kode, Anda dapat:

  • Otomatiskan Pembuatan: Bangun lingkungan yang sama secara berulang dengan andal.
  • Gunakan Kontrol Versi: Lacak perubahan pada infrastruktur Anda di Git, seperti kode aplikasi Anda.
  • Mencegah Error: Hindari kesalahan manual yang dapat terjadi saat mengklik antarmuka web.

Untuk workshop ini, Anda tidak perlu menjalankan kode Terraform ini sendiri. Anggap saja ini sebagai cetak biru profesional—"kunci jawaban"—untuk infrastruktur yang akan Anda bangun dan deploy pada langkah-langkah berikutnya.

4. Pengembangan: Pengantar Gemini CLI

👉💻 Di terminal Cloud Shell, buka direktori pribadi Anda.

cd ~/storygen-learning

👉💻 Coba Gemini untuk pertama kalinya.

clear
gemini --model=gemini-2.5-flash

Jika Anda ditanya Do you want to connect Cloud Shell editor to Gemini CLI?, pilih TIDAK.

👉✨ Setiap alat gemini memiliki deskripsi. Baca sekarang. Di perintah Gemini, ketik:

Di Gemini CLI

/help

👉✨ Gemini CLI memiliki serangkaian kemampuan bawaan sendiri. Untuk memeriksanya:

Di Gemini CLI

/tools

Anda akan melihat daftar yang mencakup ReadFile, WriteFile, dan GoogleSearch. Ini adalah teknik default yang dapat Anda gunakan tanpa perlu mengambil dari arsenal eksternal.

👉✨ Gemini Blade dapat menyimpan "kesadaran taktis" (konteks) untuk memandu tindakannya.

Di Gemini CLI

/memory show

Saat ini kosong, seperti kanvas kosong.

👉✨ Pertama, tambahkan persona ke memori agen. Hal ini akan menentukan bidang keahliannya:

Di Gemini CLI

/memory add "I am master at python development"

Jalankan /memory show lagi untuk mengonfirmasi bahwa pisau Anda telah menyerap pengetahuan ini.

👉✨ Untuk mendemonstrasikan cara mereferensikan file dengan simbol @, mari kita buat file "mission brief" terlebih dahulu.

Buka terminal baru dan jalankan perintah berikut untuk membuat file misi Anda:

!echo "## Mission Objective: Create Imagen ADK Agent for Story Book" > mission.md

👉✨Sekarang, perintahkan Gemini CLI Anda untuk menganalisis ringkasan dan melaporkan temuannya:

Di Gemini CLI

Explain the contents of the file @mission.md

Senjata utama Anda kini mengetahui tujuannya.

👉💻 Tekan Ctrl+C dua kali untuk keluar dari Gemini CLI

Pembelajaran:

Cara Gemini CLI Mendapatkan Kemampuan Supernya: gemini.md Sebelum melanjutkan, penting untuk memahami cara Gemini CLI dapat disesuaikan dengan project tertentu. Meskipun Anda dapat menggunakannya sebagai alat chat serbaguna, kemampuan sebenarnya berasal dari file konfigurasi khusus: gemini.md.

Saat Anda menjalankan perintah gemini, perintah tersebut akan otomatis mencari file gemini.md di direktori saat ini. File ini berfungsi sebagai panduan khusus project untuk AI. Hal ini dapat menentukan tiga hal penting:

  • Persona: Anda dapat memberi tahu AI siapa yang harus ditirunya. Misalnya, "Anda adalah developer Python ahli yang berspesialisasi di Google Cloud". Hal ini memfokuskan respons dan gayanya.
  • Alat: Anda dapat memberikan akses ke file tertentu (@file.py) atau bahkan penelusuran Google (@google). Hal ini memberi AI konteks yang diperlukan untuk menjawab pertanyaan tentang kode project Anda.
  • Memori: Anda dapat memberikan fakta atau aturan yang harus selalu diingat AI untuk proyek ini, yang membantu menjaga konsistensi.

Dengan menggunakan file gemini.md, Anda mengubah model Gemini generik menjadi asisten spesialis yang sudah diberi pengarahan tentang tujuan proyek Anda dan memiliki akses ke informasi yang tepat.

5. Pengembangan: Membangun ADK dengan Gemini CLI

SDLC

Penyiapan Awal

Pastikan kita menggunakan Gemini CLI untuk membuat fork repositori dan menyiapkan ruang kerja:

Konfigurasi Lingkungan

Buka Cloud Shell Anda, klik tombol "Open Terminal".

  1. Salin template lingkungan:
    cd ~/storygen-learning
    cp ~/storygen-learning/env.template ~/storygen-learning/.env
    

Melihat File Tersembunyi di Editor Jika Anda Tidak Menemukan .env

  • Klik Lihat di menu atas.
  • Pilih Aktifkan/Nonaktifkan File Tersembunyi.

👉Temukan Project ID Google Cloud Anda:

  • Buka Konsol Google Cloud: link
  • Pilih project yang ingin Anda gunakan untuk workshop ini dari drop-down project di bagian atas halaman.
  • Project ID Anda ditampilkan di kartu Info project di Dasbor

👉Temukan Nama Pengguna GitHub Anda:

  • Buka GitHub Anda dan temukan nama pengguna GitHub Anda

03-04-project-id.png

Mengedit file .env 2. Ganti nilai berikut di .env:

GOOGLE_API_KEY=[REPLACE YOUR API KEY HERE]
GOOGLE_CLOUD_PROJECT_ID=[REPLACE YOUR PROJECT ID]
GITHUB_USERNAME=[REPLACE YOUR USERNAME]
GENMEDIA_BUCKET=[REPLACE YOUR PROJECT ID]-bucket

Misalnya, jika project ID Anda adalah: testproject, Anda harus memasukkan GOOGLE_CLOUD_PROJECT_ID=testproject dan GENMEDIA_BUCKET=testproject-bucket

Skrip Penyiapan

Buka 00_Starting_Here Buka terminal baru (bukan di Gemini CLI)

cd ~/storygen-learning/00_Starting_Here

Jalankan penyiapan lengkap:

./setup-complete.sh

Anda akan melihat hasil penyiapan di terminal

Membuat Agen Pertama Anda

Buka 01a_First_Agent_Ready Mari gunakan Gemini CLI untuk membuat agen ADK:**

cd ~/storygen-learning/01a_First_Agent_Ready

Buka Gemini CLI

gemini

Di dalam Jendela Gamini CLI, coba perintah:

I need you to help me create a Google ADK (Agent Development Kit) agent for story generation. I'm working on a children's storybook app that generates creative stories with visual scenes.

Please create a complete `agent.py` file that implements an LlmAgent using Google's ADK framework. The agent should:

**Requirements:**
1. Use the `google.adk.agents.LlmAgent` class
2. Use the "gemini-2.5-flash" model (supports streaming)
3. Be named "story_agent"
4. Generate structured stories with exactly 4 scenes each
5. Output valid JSON with story text, main characters, and scene data
6. No tools needed (images are handled separately)

**Agent Specifications:**
- **Model:** gemini-2.5-flash
- **Name:** story_agent  
- **Description:** "Generates creative short stories and accompanying visual keyframes based on user-provided keywords and themes."
**Story Structure Required:**
- Exactly 4 scenes: Setup  Inciting Incident  Climax  Resolution
- 100-200 words total
- Simple, charming language for all audiences
- Natural keyword integration
**JSON Output Format:**

{
  "story": "Complete story text...",
  "main_characters": [
    {
      "name": "Character Name",
      "description": "VERY detailed visual description with specific colors, features, size, etc."
    }
  ],
  "scenes": [
    {
      "index": 1,
      "title": "The Setup",
      "description": "Scene action and setting WITHOUT character descriptions",
      "text": "Story text for this scene"
    }
    // ... 3 more scenes
  ]
}


**Key Instructions for the Agent:**
- Extract 1-2 main characters maximum
- Character descriptions should be extremely detailed and visual
- Scene descriptions focus on ACTION and SETTING only
- Do NOT repeat character appearance in scene descriptions
- Always respond with valid JSON

Please include a complete example in the instructions showing the exact format using keywords like "tiny robot", "lost kitten", "rainy city".

The file should start with necessary imports, define an empty tools list, include a print statement for initialization, and then create the LlmAgent with all the detailed instructions.

Can you create this agent in backend/story_agent/agent.py

Setelah selesai, nonaktifkan terminal Gemini CLI dengan Control+C

—————————————— Opsional, Anda dapat langsung membuka bagian Solusi——————————————–

Sekarang Verifikasi Perubahan Anda di ADK Web

cd ~/storygen-learning/01a_First_Agent_Ready/backend

source ../../.venv/bin/activate

adk web --port 8080

Untuk melanjutkan, Anda memerlukan command prompt.

Menyiapkan Situs

cd ~/storygen-learning/01a_First_Agent_Ready

./start.sh

Jika perubahan Anda tidak berfungsi, Anda akan melihat error di ADK Web UI dan Situs.

——————————————– Solusi Dimulai di Sini ——————————————–

Solusi

Akhiri proses sebelumnya dengan Control+C atau Anda dapat membuka terminal lain:

cd ~/storygen-learning/01b_First_Agent_Done

Menyiapkan Situs:

./start.sh

Anda akan melihat situs:

situs

Coba UI ADK: Buka terminal lain:

cd ~/storygen-learning/01b_First_Agent_Done/backend
source ../../.venv/bin/activate

adk web --port 8080

Anda akan melihat UI ADK tempat Anda dapat mengajukan pertanyaan kepada agen

adkweb

Sebelum berpindah ke bagian berikutnya, tekan Ctrl+C untuk mengakhiri proses.

6. Pengembangan: Membangun Agen Kustom Anda dengan Imagen

2adk

Buat Alat Imagen (Agen Kedua)

cd ~/storygen-learning/02a_Image_Agent_Ready

Gunakan Gemini CLI untuk membuat agen pembuatan gambar:

gemini generate "I need you to help me create a custom Google ADK (Agent Development Kit) agent for image generation. This is different from the story agent - this one handles image generation directly using the BaseAgent pattern for full control over tool execution.

Please create a complete `agent.py` file that implements a custom image generation agent. The agent should:

**Requirements:**
1. Use the `google.adk.agents.BaseAgent` class (NOT LlmAgent)
2. Be named "custom_image_agent" 
3. Directly execute the ImagenTool without LLM intermediation
4. Handle JSON input with scene descriptions and character descriptions
5. Store results in session state for retrieval by main.py
6. Use async generators and yield Events

**Key Specifications:**
- **Class Name:** CustomImageAgent (inherits from BaseAgent)
- **Agent Name:** "custom_image_agent"
- **Tool:** Uses ImagenTool for direct image generation
- **Purpose:** Bypass LLM agent limitations and directly call ImagenTool

**Input Format:**
The agent should handle JSON input like:
{
  "scene_description": "Scene action and setting",
  "character_descriptions": {
    "CharacterName": "detailed visual description"
  }
}


**Core Method:** `async def _run_async_impl(self, ctx: InvocationContext) -> AsyncGenerator[Event, None]:`
   - Extract user message from `ctx.user_content.parts`
   - Parse JSON input or fallback to plain text
   - Extract scene_description and character_descriptions
   - Build image prompt with style prefix: "Children's book cartoon illustration with bright vibrant colors, simple shapes, friendly characters."
   - Include character descriptions for consistency
   - Call `await self.imagen_tool.run()` directly
   - Store results in `ctx.session.state["image_result"]`
   - Yield Event with results


 **Session State:**
   - Store JSON results in `ctx.session.state["image_result"]`
   - Include success/error status
   - Store actual image URLs or error messages

Expected Output Structure:
- Successful results stored as JSON with image URLs
- Error results stored as JSON with error messages
- Results accessible via session state in main.py

Can you create this agent in backend/story_image_agent/agent.py

"

—————————————— Opsional, Anda dapat langsung membuka bagian Solusi——————————————–

Sekarang Verifikasi Perubahan Anda di ADK Web

cd ~/storygen-learning/02a_Image_Agent_Ready/backend

source ../../.venv/bin/activate

adk web --port 8080

Menyiapkan Situs

cd ~/storygen-learning/02a_Second_Agent_Ready

./start.sh

Jika perubahan Anda tidak berfungsi, Anda akan melihat error di ADK Web UI dan Situs.

—————————————- Solusi Dimulai di Sini ——————————————–

Solusi

Akhiri proses sebelumnya dengan Control+C atau Anda dapat membuka terminal lain:

# Open new terminal
cd ~/storygen-learning/02b_Image_Agent_Done

Menyiapkan Situs:

./start.sh

Anda akan melihat situs:

situs

Coba UI ADK: Buka terminal lain:

# Open new terminal
cd ~/storygen-learning/02b_Image_Agent_Done/backend

source ../../.venv/bin/activate

adk web --port 8080

Anda akan melihat UI ADK tempat Anda dapat mengajukan pertanyaan kepada agen:

adkweb

Sebelum berpindah ke bagian berikutnya, tekan Ctrl+C untuk mengakhiri proses.

Pembelajaran

Agen pertama kami sangat bagus dalam membuat teks, tetapi sekarang kami perlu membuat gambar. Untuk tugas ini, kita memerlukan kontrol yang lebih langsung. Kita tidak ingin LLM memutuskan apakah akan membuat gambar atau tidak; kita ingin memerintahkannya untuk melakukannya secara langsung. Ini adalah tugas yang sempurna untuk BaseAgent.

Tidak seperti LlmAgent deklaratif, BaseAgent bersifat imperatif. Artinya, Anda, sebagai developer, menulis logika Python langkah demi langkah yang tepat di dalam metode _run_async_impl. Anda memiliki kontrol penuh atas alur eksekusi.

Anda akan memilih BaseAgent saat Anda memerlukan:

Logika Deterministik: Agen harus mengikuti urutan langkah yang spesifik dan tidak dapat diubah.

Eksekusi Alat Langsung: Anda ingin memanggil alat secara langsung tanpa intervensi LLM.

Alur Kerja Kompleks: Prosesnya melibatkan manipulasi data kustom, panggilan API, dan logika yang terlalu kompleks untuk disimpulkan secara andal oleh LLM hanya dari perintah.

Untuk aplikasi kita, kita akan menggunakan BaseAgent untuk menerima deskripsi adegan dari agen pertama dan langsung memanggil alat Imagen untuk menjamin gambar dibuat untuk setiap adegan.

7. Pengujian: Evaluasi Agen

Aplikasi kita berfungsi, tetapi kita memerlukan jaring pengaman pengujian otomatis. Ini adalah tugas yang tepat untuk didelegasikan kepada kopilot AI kami.

Tindakan

cd ~/storygen-learning/03a_Agent_Evaluation_Ready/backend

Menggunakan Gemini CLI untuk menulis pengujian yang komprehensif:

Buka Gemini CLI

gemini

Di dalam Jendela Gamini CLI, coba perintah:

I need you to create comprehensive test files for my backend/story_agent in Google ADK. I need three specific JSON files that match the testing structure used in ADK evaluation.

**Context:** 
- The story agent generates structured JSON stories with exactly 4 scenes
- It uses LlmAgent with no tools, just direct LLM responses
- Input: Keywords
- Output: JSON with story, main_characters, and scenes arrays

**Files to Create:**

### 1. `story_agent_eval.evalset.json` (Comprehensive Integration Tests)
Create a comprehensive evaluation set with:
- **eval_set_id**: "story_agent_comprehensive_evalset"
- **name**: "Story Agent Comprehensive Evaluation Set" 
- **description**: "Comprehensive evaluation scenarios for story_agent covering various keyword combinations, edge cases, and story quality metrics"


Each eval_case should include:
- Full conversation arrays with invocation_id, user_content, final_response
- Complete expected JSON responses with detailed stories, characters, and 4 scenes
- session_input with app_name "story_agent"
- All fields: story (narrative text), main_characters (with detailed visual descriptions), scenes (with index, title, description, text)

### 2. `story_generation.test.json` (Unit Tests)
Create basic generation tests with:
- **eval_set_id**: "story_agent_basic_generation_tests"
- **name**: "Story Agent Basic Generation Tests"
- **description**: "Unit tests for story_agent focusing on JSON structure compliance, scene generation, and keyword integration"

### 3. `test_config.json` (Evaluation Configuration)
Create test configuration with:
- **criteria**: response_match_score: 0.7, tool_trajectory_avg_score: 1.0
- **custom_evaluators**: 
  - json_structure_validator (validates required fields, scene count, character fields)
  - story_quality_metrics (word count 80-250, keyword integration threshold 0.8)
- **evaluation_notes**: Story agent specifics and trajectory expectations

**Important Requirements:**
1. All responses must be valid, parseable JSON
2. Stories must have exactly 4 scenes with indices 1-4
3. Each scene must have: index, title, description, text
4. Main characters must have detailed visual descriptions
5. No tool_uses expected (empty arrays) since story agent uses direct LLM
6. Word count should be 100-200 words total
7. Keywords must be naturally integrated into the narrative

Please generate all three files with realistic example stories and comprehensive test coverage matching the ADK evaluation format.

—————————————— Opsional, Anda dapat langsung membuka bagian Solusi——————————————–

Untuk Melihat Evaluasi:

./run_adk_web_persistent.sh

Buka tab eval di UI ADK.

Anda akan melihat UI Web ADK dengan kemampuan pengujian persisten

Momen Pembelajaran Utama: AI adalah partner yang efektif dalam mengotomatiskan jaminan kualitas. Alat ini dapat menangani boilerplate penulisan pengujian, sehingga Anda dapat berfokus pada pembuatan fitur.

——————————————– Solusi Dimulai di Sini ——————————————–

Solusi

  • Buka folder solusi:
cd ~/storygen-learning/03b_Agent_Evaluation_Done/backend
  • Membuka UI Web ADK
./run_adk_web_persistent.sh

Anda dapat melihat kasus pengujian dari Tab Eval:

eval1

Sesuaikan metrik di sini:

eval2

Lihat hasil evaluasi di sini:

eval3

Pembelajaran

Agen dapat "berfungsi" karena berjalan tanpa error, tetapi bagaimana kita tahu apakah agen menghasilkan output yang benar? Apakah ceritanya bagus? Apakah format JSON sudah benar? Di sinilah framework evaluasi ADK berperan.

Evaluasi agen adalah sistem pengujian otomatis yang dirancang untuk mengukur kualitas dan kebenaran respons agen Anda. Selain hanya memeriksa error kode, alat ini juga memeriksa apakah perilaku agen memenuhi ekspektasi Anda. Framework ini terutama menggunakan beberapa file utama:

evalset.json: Ini adalah rangkaian pengujian utama Anda. Setiap "kasus evaluasi" dalam file ini berisi contoh percakapan (misalnya, perintah pengguna) dan respons "emas" yang ideal yang Anda harapkan dihasilkan oleh agen.

test_config.json: File ini menentukan aturan untuk keberhasilan. Anda menetapkan kriteria di sini, seperti:

response_match_score: Seberapa dekat respons agen harus cocok dengan respons "emas"? (Skor 1,0 berarti harus identik).

custom_evaluators: Anda dapat membuat aturan sendiri, seperti "Respons harus berupa JSON yang valid" atau "Cerita harus berisi lebih dari 100 kata".

Dengan menjalankan evaluasi, Anda dapat menguji agen secara otomatis terhadap lusinan skenario, sehingga memastikan bahwa perubahan pada perintah atau alat Anda tidak merusak fungsi intinya secara tidak sengaja. Ini adalah jaring pengaman yang efektif untuk membangun agen AI yang siap produksi.

8. Infrastructure as Code (IaC): Membangun Rumah di Cloud

Kode kita sudah diuji, tetapi memerlukan tempat yang siap produksi. Kita akan menggunakan "Infrastructure as Code" untuk menentukan lingkungan.

Apa itu Docker?

Docker adalah platform untuk membuat dan menjalankan aplikasi dalam container. Anggap container seperti container pengiriman standar untuk software. Ini menggabungkan semua yang dibutuhkan aplikasi Anda untuk berjalan ke dalam satu paket yang terisolasi:

  • Kode aplikasi itu sendiri
  • Runtime yang diperlukan (misalnya, versi Python tertentu)
  • Semua alat dan library sistem

Aplikasi dalam container ini kemudian dapat dijalankan di komputer mana pun yang telah menginstal Docker, sehingga memecahkan masalah klasik "berfungsi di komputer saya".

Di bagian ini, kita akan meminta Gemini untuk membuat Dockerfile, yang merupakan resep atau cetak biru untuk membangun image container aplikasi kita

deployprocess

Tindakan

cd ~/storygen-learning/04a_Manual_Deployment_Ready

Gunakan Gemini CLI untuk membuat Dockerfile bagi backend: Buka Gemini CLI

Gemini

Di dalam Gemini CLI, coba perintah:

Create a manual deployment plan for my StoryGen app with Google Cloud Platform. I have a Next.js frontend, Python backend, and Terraform infrastructure.

Generate these deployment files:
1. **01-setup.sh** - Environment setup and authentication
2. **02-build-images.sh** - Build and push Docker images to Google Container Registry
3. **03-deploy-infrastructure.sh** - Deploy with Terraform and configure services
4. **load-env.sh** - Load environment variables for deployment

**Requirements:**
- Use Google Cloud Run for both frontend and backend
- Configure Imagen API and storage buckets
- Set up proper IAM permissions
- Use environment variables from .env file
- Include error handling and status checks

Keep scripts simple, well-commented, and production-ready for manual execution.

Solusi:

cd ~/storygen-learning/04b_Manual_Deployment_Done

Jalankan:

source ../.venv/bin/activate
./01-setup.sh
./02-build-images.sh
./03-deploy-infrastructure.sh

Anda akan melihat hasil deployment dan pembuatan infrastruktur

9. Otomatisasi (CI/CD): Jalur Perakitan Digital

Men-deploy aplikasi secara manual adalah cara yang bagus untuk memahami bagian-bagian yang bergerak, tetapi prosesnya lambat, memerlukan upaya manual, dan dapat menyebabkan kesalahan manusia. Dalam pengembangan software profesional, seluruh proses ini diotomatiskan menggunakan praktik yang disebut CI/CD.

CI/CD adalah singkatan dari Continuous Integration dan Continuous Deployment. Ini adalah metode untuk otomatis membangun, menguji, dan men-deploy kode Anda setiap kali Anda membuat perubahan.

  • Continuous Integration (CI): Ini adalah fase "build dan uji". Segera setelah developer mengirim perubahan kode ke repositori bersama (seperti GitHub), sistem otomatis akan dimulai. Proses ini membangun aplikasi dan menjalankan semua pengujian (seperti evaluasi agen yang kita buat) untuk memastikan kode baru terintegrasi dengan benar dan tidak menimbulkan bug.
  • Deployment Berkelanjutan (CD): Ini adalah tahap "rilis". Jika fase CI berhasil, sistem akan otomatis men-deploy versi aplikasi baru yang telah diuji ke produksi, sehingga dapat digunakan oleh pengguna.

Pipeline otomatis ini membuat "lini perakitan digital" yang membawa kode dari mesin developer ke produksi dengan cepat, aman, dan andal. Di bagian ini, kita akan meminta asisten AI untuk membuat lini perakitan ini menggunakan GitHub Actions dan Google Cloud Build.

Tindakan

cd ~/storygen-learning/05a_CICD_Pipeline_Ready

Gunakan Gemini CLI untuk membangun pipeline CI/CD dengan GitHub:

Membuka Gemini CLI

Gemini

Di dalam Gemini CLI, coba perintah:

Create a CI/CD pipeline for my StoryGen app using Google Cloud Build and GitHub integration.

Generate these automation files:
1. **cloudbuild.yaml** (for backend) - Automated build, test, and deploy pipeline
2. **GitHub Actions workflow** - Trigger builds on push/PR
3. **Deployment automation scripts** - Streamlined deployment process

**Requirements:**
- Auto-trigger on GitHub push to main branch
- Build and push Docker images
- Run automated tests if available
- Deploy to Google Cloud Run
- Environment-specific deployments (staging/prod)
- Notification on success/failure

Focus on fully automated deployment with minimal manual intervention. Include proper secret management and rollback capabilities.

——————————————– Solusi Dimulai di Sini ——————————————–

Solusi:

cd ~/storygen-learning/06_Final_Solution/
# Copy the GitHub workflow to parent folder
cp -r 06_Final_Solution/.GitHub ../../../.GitHub

Kembali ke folder 06_Final_Solution dan jalankan skrip:

cd ~/storygen-learning/06_Final_Solution/

./setup-cicd-complete.sh

Anda akan melihat penyelesaian penyiapan pipeline CI/CD

Memicu Alur Kerja: Lakukan commit dan kirim kode Anda ke main. Perhatikan bahwa Anda harus menyiapkan email dan nama GitHub untuk mengizinkan izin.

git add .
git commit -m "feat: Add backend, IaC, and CI/CD workflow"
git push origin main

Buka tab "Actions" di repositori GitHub Anda untuk melihat deployment otomatis Anda berjalan.

10. Operasi: Menara Kontrol AI

Kami sudah live! Namun, perjalanan belum berakhir. Ini adalah "Hari ke-2"—operasi. Mari kembali ke Cloud Assist untuk mengelola aplikasi yang sedang berjalan.

Tindakan

  1. Buka layanan Cloud Run Anda di konsol Google Cloud. Berinteraksi dengan aplikasi live Anda untuk menghasilkan beberapa traffic dan log.
  2. Buka panel Cloud Assist dan gunakan sebagai kopilot operasional dengan perintah seperti berikut:

Analisis Log:

Summarize the errors in my Cloud Run logs for the service 'genai-backend' from the last 15 minutes.

Penyesuaian Performa:

My Cloud Run service 'genai-backend' has high startup latency. What are common causes for a Python app and how can I investigate with Cloud Trace?

Pengoptimalan Biaya:

Analyze the costs for my 'genai-backend' service and its GCS bucket. Are there any opportunities to save money?

Momen Pembelajaran Utama: SDLC AI adalah loop berkelanjutan. Partner AI yang sama yang membantu membangun aplikasi adalah partner yang sangat diperlukan untuk memantau, memecahkan masalah, dan mengoptimalkannya dalam produksi.