Membangun Sistem Multi-Agen dengan ADK

1. Pengantar

Ringkasan

Lab ini mengajarkan cara mengorkestrasi sistem multiagen yang kompleks menggunakan Agent Development Kit (ADK) Google. Anda akan beralih dari hierarki agen sederhana ke pembuatan alur kerja kolaboratif yang otomatis.

Yang akan Anda build

Anda akan membangun dua sistem multi-agen yang berbeda:

  • Agen perencanaan perjalanan sederhana yang mempelajari cara mengalihkan percakapan antara agen "brainstorming" dan agen "perencanaan tempat wisata".
  • Generator proposal film yang lebih canggih yang menggunakan "ruang penulis" agen otomatis (seperti periset, penulis skenario, dan kritikus) untuk bekerja sama dalam loop guna membuat plot film lengkap.

Yang akan Anda pelajari

  • Cara membuat hubungan agen induk dan sub-agen.
  • Cara menulis data ke sesi state dari alat.
  • Cara membaca dari state menggunakan pembuatan template kunci (misalnya, {my_key?}).
  • Cara menggunakan SequentialAgent untuk alur kerja langkah demi langkah.
  • Cara menggunakan LoopAgent untuk membuat siklus penyempurnaan iteratif.
  • Cara menggunakan ParallelAgent untuk menjalankan tugas independen secara serentak.

2. Sistem Multiagen

Agent Development Kit (ADK) memungkinkan developer mendapatkan perilaku model generatif yang bersifat multilangkah, lebih andal, dan canggih. Alih-alih satu perintah yang kompleks, ADK memungkinkan Anda membuat alur beberapa agen yang lebih sederhana yang berkolaborasi dalam suatu masalah dengan membagi pekerjaan.

Pendekatan ini memiliki beberapa keunggulan dibandingkan dengan menggunakan satu perintah monolitik:

  • Desain yang Lebih Sederhana: Lebih mudah mendesain dan mengatur alur agen kecil khusus daripada membuat satu perintah besar yang kompleks.
  • Keandalan: Agen spesialis lebih andal dalam menjalankan tugas tertentu daripada satu agen besar yang kompleks.
  • Kemudahan pemeliharaan: Lebih mudah untuk memperbaiki atau meningkatkan kualitas agen kecil khusus tanpa merusak bagian lain dari sistem.
  • Modularitas: Agen yang dibuat untuk satu alur kerja dapat dengan mudah digunakan kembali di alur kerja lainnya.

Pohon Hierarki Agen

Struktur pohon yang menampilkan hierarki antaragen

Di ADK, Anda mengatur agen dalam struktur pohon. Hierarki ini penting untuk mengontrol alur percakapan, karena membatasi agen mana yang dapat "meneruskan" percakapan ke agen lain. Hal ini membuat perilaku sistem lebih mudah diprediksi dan di-debug. Berbagai manfaat yang ditawarkan antara lain:

  • Desain Intuitif: Struktur ini terinspirasi oleh tim di dunia nyata, sehingga lebih mudah dipahami.
  • Alur yang Dikontrol: Hierarki memberi Anda kontrol yang tepat atas delegasi tugas, yang membantu dalam proses penelusuran bug. Misalnya, struktur pohon memastikan agen penulisan laporan yang benar dipanggil, meskipun Anda memiliki dua agen dengan deskripsi yang serupa.

Seluruh struktur dimulai dengan root_agent. Agen ini bertindak sebagai induk dan dapat memiliki satu atau beberapa sub-agen, yang pada gilirannya juga dapat menjadi induk bagi sub-agennya sendiri, sehingga membentuk pohon.

3. Penyiapan project

Akun Google

Jika belum memiliki Akun Google pribadi, Anda harus membuat Akun Google.

Gunakan akun pribadi, bukan akun kantor atau sekolah.

Login ke Konsol Google Cloud

Login ke Konsol Google Cloud menggunakan Akun Google pribadi.

Aktifkan Penagihan

Tukarkan kredit Google Cloud senilai $5 (opsional)

Untuk menjalankan workshop ini, Anda memerlukan Akun Penagihan dengan sejumlah kredit. Jika Anda berencana menggunakan penagihan sendiri, Anda dapat melewati langkah ini.

  1. Klik link ini dan login dengan Akun Google pribadi.Anda akan melihat tampilan seperti ini:Klik di sini untuk membuka halaman kredit
  2. Klik tombol KLIK DI SINI UNTUK MENGAKSES KREDIT ANDA.Tindakan ini akan membawa Anda ke halaman untuk menyiapkan profil penagihanMenyiapkan halaman profil penagihan
  3. Klik Konfirmasi.

Anda kini terhubung ke Akun Penagihan Uji Coba Google Cloud Platform.

Screenshot ringkasan penagihan

Menyiapkan akun penagihan pribadi

Jika menyiapkan penagihan menggunakan kredit Google Cloud, Anda dapat melewati langkah ini.

Untuk menyiapkan akun penagihan pribadi, buka di sini untuk mengaktifkan penagihan di Cloud Console.

Beberapa Catatan:

  • Menyelesaikan lab ini akan dikenai biaya kurang dari $1 USD untuk resource Cloud.
  • Anda dapat mengikuti langkah-langkah di akhir lab ini untuk menghapus resource agar tidak dikenai biaya lebih lanjut.
  • Pengguna baru memenuhi syarat untuk mengikuti Uji Coba Gratis senilai$300 USD.

Membuat project (opsional)

Jika Anda tidak memiliki project saat ini yang ingin digunakan untuk lab ini, buat project baru di sini.

4. Buka Cloud Shell Editor

  1. Klik link ini untuk langsung membuka Cloud Shell Editor
  2. Jika diminta untuk memberikan otorisasi kapan saja hari ini, klik Authorize untuk melanjutkan.Klik untuk memberikan otorisasi pada Cloud Shell
  3. Jika terminal tidak muncul di bagian bawah layar, buka terminal:
    • Klik Lihat
    • Klik TerminalMembuka terminal baru di Cloud Shell Editor
  4. Di terminal, tetapkan project Anda dengan perintah ini:
    gcloud config set project [PROJECT_ID]
    
    • Contoh:
      gcloud config set project lab-project-id-example
      
    • Jika tidak ingat project ID, Anda dapat mencantumkan semua project ID dengan:
      gcloud projects list
      
      Menetapkan project ID di terminal Cloud Shell Editor
  5. Anda akan melihat pesan ini:
    Updated property [core/project].
    

5. Mengaktifkan API

Untuk menggunakan Vertex AI API dan berinteraksi dengan model Gemini, Anda harus mengaktifkan Vertex AI API di project Google Cloud Anda.

  1. Di terminal, aktifkan API:
    gcloud services enable aiplatform.googleapis.com
    

Berikut adalah bagian yang diperbarui, yang menggantikan pembuatan file manual dengan petunjuk untuk meng-clone repositori GitHub dan menginstal dependensi.

Pengantar Vertex AI SDK untuk Python

Untuk berinteraksi dengan model yang dihosting di Vertex AI dari aplikasi Python, Anda akan menggunakan Vertex AI SDK untuk Python. SDK ini menyederhanakan proses pengiriman perintah, penentuan parameter model, dan penerimaan respons tanpa perlu menangani kompleksitas panggilan API yang mendasarinya secara langsung.

Anda dapat menemukan dokumentasi lengkap untuk Vertex AI SDK untuk Python di sini: Pengantar Vertex AI SDK untuk Python | Google Cloud.

6. Menyiapkan lingkungan project

Meng-clone repo

  1. Di terminal, buat clone repositori yang berisi file awal.
    git clone --depth 1 https://github.com/GoogleCloudPlatform/devrel-demos.git devrel-demos-multiagent-lab
    
    Flag --depth 1 hanya meng-clone versi terbaru, yang lebih cepat.
  2. Di terminal, pindahkan folder khusus lab ke direktori utama Anda dan ubah namanya agar sesuai dengan struktur yang diharapkan lab.
    mv devrel-demos-multiagent-lab/ai-ml/build-multiagent-systems-with-adk/adk_multiagent_systems ~
    
  3. Di terminal, buka direktori kerja yang benar untuk lab ini (adk_multiagent_systems).
    cd ~/adk_multiagent_systems
    

Meninjau struktur file Anda

Setelah semua file Anda dibuat, buka folder adk_multiagent_systems di explorer untuk melihat struktur lengkapnya.

  1. Di menu Cloud Shell Editor, pilih File > Open Folder....
    Menu File Cloud Shell Editor dengan Open Folder dipilih
  2. Di kotak yang muncul, tambahkan informasi folder berikut setelah nama pengguna Anda: adk_multiagent_systems/. Klik Oke.
    Tampilannya akan terlihat seperti ini:
    Kotak dialog Buka Folder dengan jalur project
  3. Panel explorer di sebelah kiri akan dimuat ulang. Sekarang Anda akan melihat struktur project lengkap, dengan sub-direktori parent_and_subagents dan workflow_agents, yang siap untuk langkah berikutnya.
    Panel Explorer yang menampilkan folder adk_multiagent_systems yang terbuka

Mengaktifkan lingkungan virtual

  1. Di terminal, buat dan aktifkan lingkungan virtual menggunakan uv. Tindakan ini memastikan dependensi project Anda tidak berkonflik dengan Python sistem atau project lainnya.
    uv venv
    source .venv/bin/activate
    
  2. Di terminal, instal google-adk dan dependensi lainnya dari file requirements.txt:
    uv pip install -r requirements.txt
    

Menyiapkan variabel lingkungan

  1. Anda sudah ada di direktori adk_multiagent_systems. Di terminal, buat file .env untuk menyimpan variabel lingkungan Anda:
    cloudshell edit .env
    
  2. Tempel kode berikut ke dalam file .env yang terbuka di editor:
    GOOGLE_GENAI_USE_VERTEXAI=TRUE
    GOOGLE_CLOUD_PROJECT="[YOUR-PROJECT-ID]"
    GOOGLE_CLOUD_LOCATION=global
    MODEL="gemini-2.5-flash"
    
  3. Ganti [YOUR-PROJECT-ID] dengan ID Project Google Cloud Anda yang sebenarnya. (misalnya, PROJECT_ID = "google-cloud-labs")
    Jika Anda tidak dapat mengingat project ID, jalankan perintah berikut di terminal. Daftar semua project dan ID-nya akan ditampilkan.
    gcloud projects list
    
  4. Di terminal, salin file .env ini ke direktori sub-agen agar mereka juga dapat mengakses variabel:
    cp .env parent_and_subagents/.env
    cp .env workflow_agents/.env
    
    Struktur file sekarang akan terlihat seperti ini:
    Panel Explorer yang menampilkan folder adk_multiagent_systems yang terbuka

7. Menjelajahi transfer antara agen induk, sub-agen, dan agen peer

Percakapan selalu dimulai dengan root_agent. Secara default, agen induk menggunakan description sub-agennya untuk memutuskan kapan harus mentransfer percakapan. Anda juga dapat memandu transfer ini secara eksplisit di instruction induk menggunakan name sub-agen.

Mari kita uji.

  1. Di Cloud Shell Editor, buka adk_multiagent_systems/parent_and_subagents/agent.py. Perhatikan tiga agen dalam file agent.py:
    • root_agent (bernama steering): Menanyakan pertanyaan kepada pengguna untuk memutuskan sub-agen mana yang akan dituju. Awalnya, agen ini hanya mengandalkan description sub-agennya.
    • travel_brainstormer: Membantu pengguna berdiskusi terkait tujuan perjalanan.
    • attractions_planner: Membantu pengguna membuat daftar hal yang dapat dilakukan di negara tertentu.
  2. Jadikan travel_brainstormer dan attractions_planner sebagai sub-agen dari root_agent dengan menambahkan baris berikut ke pembuatan root_agent:
        sub_agents=[travel_brainstormer, attractions_planner]
    
  3. Di terminal, mulai percakapan dengan agen Anda:
    cd ~/adk_multiagent_systems
    adk run parent_and_subagents
    
  4. Pada perintah [user]: di terminal, ketik:
    hello
    
    Contoh output (Output Anda mungkin sedikit berbeda):
    [steering]: Hi there! Do you already have a country in mind for your trip, or would you like some help deciding where to go?
    
  5. Sekarang, beri tahu agen di terminal:
    I could use some help deciding.
    
    Contoh output (Output Anda mungkin sedikit berbeda):
    [travel_brainstormer]: Okay! To give you the best recommendations, I need to understand what you're looking for in a trip.
    ...
    
    Perhatikan tag [travel_brainstormer]. root_agent yang mentransfer kontrol berdasarkan hanya pada description sub-agen.
  6. Pada perintah user: di terminal, ketik exit, lalu tekan ENTER untuk mengakhiri percakapan.
  7. Sekarang, mari kita buat lebih jelas. Di agent.py, tambahkan kode berikut ke instruction root_agent:
            If they need help deciding, send them to 'travel_brainstormer'.
            If they know what country they'd like to visit, send them to the 'attractions_planner'.
    
  8. Di terminal, jalankan agen lagi:
    adk run parent_and_subagents
    
  9. Pada perintah [user]: di terminal, ketik:
    hello
    
  10. Jawab dengan:
    I would like to go to Japan.
    
    Contoh output (Output Anda mungkin sedikit berbeda):
    [attractions_planner]: Okay, I can help you with that! Here are some popular attractions in Japan:
    ...
    
    Perhatikan transfer ke attractions_planner, seperti yang dipandu oleh petunjuk baru Anda.
  11. Sekarang balas dengan:
    Actually I don't know what country to visit.
    
    Contoh output (Output Anda mungkin sedikit berbeda):
    [travel_brainstormer]: Okay! I can help you brainstorm some countries for travel...
    
    Perhatikan bahwa Anda telah dialihkan ke travel_brainstormer, peer dari attractions_planner. Opsi ini diizinkan secara default.
  12. Pada perintah pengguna, ketik exit untuk mengakhiri sesi.

Rekap

Di bagian ini, Anda telah mempelajari dasar-dasar hierarki agen dan alur percakapan:

  • Percakapan selalu dimulai dengan root_agent.
  • Agen induk dapat otomatis mentransfer ke sub-agen berdasarkan description-nya.
  • Anda dapat mengontrol alur ini secara eksplisit dengan memberikan instruction induk untuk ditransfer ke sub-agen berdasarkan name-nya.
  • Secara default, agen dapat melakukan transfer ke agen peer mereka (saudara dalam hierarki).

8. Menggunakan status sesi untuk menyimpan dan mengambil informasi

Setiap percakapan ADK memiliki Session, yang mencakup kamus status sesi. Status ini dapat diakses oleh semua agen, sehingga menjadi cara yang tepat untuk meneruskan informasi antar-agen atau mempertahankan data (seperti daftar) selama percakapan.

Untuk mempelajari cara menambahkan dan membaca dari status:

  1. Kembali ke file adk_multiagent_systems/parent_and_subagents/agent.py
  2. Tempel definisi fungsi berikut setelah header # Tools:
    def save_attractions_to_state(
    tool_context: ToolContext,
    attractions: List[str]
    ) -> dict[str, str]:
        """Saves the list of attractions to state["attractions"].
    
        Args:
            attractions [str]: a list of strings to add to the list of attractions
    
        Returns:
            None
        """
        # Load existing attractions from state. If none exist, start an empty list
        existing_attractions = tool_context.state.get("attractions", [])
    
        # Update the 'attractions' key with a combo of old and new lists.
        # When the tool is run, ADK will create an event and make
        # corresponding updates in the session's state.
        tool_context.state["attractions"] = existing_attractions + attractions
    
        # A best practice for tools is to return a status message in a return dict
        return {"status": "success"}
    
    Dalam kode ini, perhatikan:
    • Fungsi ini menerima tool_context: ToolContext. Objek ini adalah gerbang Anda ke sesi.
    • Baris tool_context.state["attractions"] = ... membaca dan menulis langsung dari kamus status sesi. ADK akan menangani sisanya.
  3. Tambahkan alat ke agen attractions_planner dengan menambahkan parameter tools:
        tools=[save_attractions_to_state]
    
  4. Tambahkan poin-poin berikut ke instruction yang ada di agen attractions_planner:
            - When they reply, use your tool to save their selected attraction and then provide more possible attractions.
            - If they ask to view the list, provide a bulleted list of { attractions? } and then suggest some more.
    
  5. Luncurkan UI Web Agent Development Kit dengan perintah berikut di terminal:
    adk web
    
    Output
    INFO:     Started server process [2434]
    INFO:     Waiting for application startup.
    +-------------------------------------------------------+
    | ADK Web Server started                                |
    |                                                       |
    | For local testing, access at http://localhost:8000.   |
    +-------------------------------------------------------+
    
    INFO:     Application startup complete.
    INFO:     Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit)
    
  6. Di terminal Cloud Shell, klik Untuk melihat antarmuka web di tab baru, klik tombol Web Preview, lalu pilih Change Port.
    Menu Pratinjau Web
  7. Masukkan nomor port 8000, lalu klik Change and Preview. Tab browser baru akan terbuka dengan UI Dev ADK.
    Kotak pop-up perubahan port dengan 8000 dimasukkan dalam kotak teks
  8. Dari dropdown Select an agent di sebelah kiri, pilih parent_and_subagents.
  9. Mulai percakapan dengan: hello
  10. Setelah agen menyapa Anda, balas dengan:
    I'd like to go to Egypt.
    
    Anda akan dialihkan ke attractions_planner dan diberi daftar tempat wisata.
  11. Pilih tempat wisata, misalnya:
    I'll go to the Sphinx
    
  12. Anda akan mendapatkan respons seperti: Oke, saya telah menyimpan Sphinx ke daftar Anda...
  13. Klik kotak alat respons (ditandai dengan tanda centang) untuk melihat peristiwa yang dibuat dari respons alat.
    Perhatikan bahwa respons ini menyertakan kolom actions yang menyertakan stateDelta yang menjelaskan perubahan pada status.
  14. Balas dengan objek wisata lain dari daftar agen.
  15. Di navigation menu sebelah kiri, klik "X" untuk keluar dari fokus pada peristiwa yang Anda periksa sebelumnya.
  16. Di sidebar sebelah kiri, klik tab Negara Bagian. Sekarang Anda dapat melihat array attractions dalam status sesi, yang akan berisi kedua item yang Anda pilih.Pratinjau Status Sesi di UI Web
  17. Kirim pesan ini ke agen:
    What is on my list?
    
    Sekarang, agen akan membaca dari status dan menampilkan daftar Anda.
  18. Setelah selesai bereksperimen dengan agen, tutup tab browser web dan tekan CTRL + C di Cloud Shell Terminal untuk menghentikan server.

Ringkasan Bagian

Di bagian ini, Anda telah mempelajari cara menggunakan status Session untuk membagikan data:

  • Untuk menulis status: Anda menulis ke kamus status dari dalam alat, menggunakan objek tool_context.state (misalnya, tool_context.state["my_list"] = [...]).
  • Untuk membaca status: Anda menyuntikkan data status langsung ke instruction agen menggunakan pembuatan template kunci (misalnya, Here is your list: {my_list?}).
  • Untuk memeriksa status: Anda dapat memantau status sesi secara langsung di UI Dev ADK menggunakan tab Status.

9. Agen Alur Kerja

Sejauh ini, Anda telah melihat cara agen induk mentransfer ke sub-agen, lalu menunggu pengguna. Agen alur kerja berbeda: agen ini mengeksekusi sub-agennya satu demi satu dalam alur otomatis, tanpa menunggu input pengguna.

Fitur ini sangat cocok untuk tugas multi-langkah otomatis seperti pipeline "Rencanakan dan Lakukan" atau "Buat Draf dan Revisi". ADK menyediakan tiga agen alur kerja bawaan untuk mengelola hal ini:

  • SequentialAgent
  • LoopAgent
  • ParallelAgent

Bagian selanjutnya di lab ini akan berfokus pada pembangunan sistem multiagen menggunakan tiga agen alur kerja ini.

Anda akan membuat agen yang mengembangkan dokumen proposal untuk film baru tentang tokoh sejarah. Agen Anda akan menangani riset, penulisan iteratif, dan pembuatan laporan.

Pada akhirnya, sistem Anda akan terlihat seperti ini:

Diagram sistem multiagen film_concept_team

Anda akan membangun sistem ini selangkah demi selangkah, dimulai dengan alur kerja yang paling sederhana.

10. Membangun sistem multiagen dengan SequentialAgent

SequentialAgent adalah agen alur kerja yang menjalankan sub-agennya dalam urutan linear sederhana. Setiap agen dalam daftar sub_agents dijalankan satu per satu, secara berurutan. Hal ini sangat cocok untuk pipeline yang mengharuskan tugas dilakukan dalam urutan tertentu, seperti agen proposal film yang akan Anda buat sekarang.

Versi pertama ini akan disusun seperti ini:

Langkah 1 sistem multiagen film_concept_team

  • root_agent (greeter) akan menyambut pengguna dan mendapatkan subjek film.
  • Kemudian, domain akan ditransfer ke SequentialAgent bernama film_concept_team, yang akan:
    1. Jalankan agen researcher untuk mendapatkan fakta dari Wikipedia.
    2. Jalankan agen screenwriter untuk menggunakan fakta tersebut dalam menulis plot.
    3. Jalankan agen file_writer untuk menyimpan plot akhir ke file.

Mari kita jalankan.

  1. Di Cloud Shell Editor, buka adk_multiagent_systems/workflow_agents/agent.py.
    Baca file definisi agen ini. Karena sub-agen harus ditentukan sebelum dapat ditetapkan ke induk, untuk membaca file sesuai urutan alur percakapan, Anda dapat membaca agen dari bagian bawah file ke bagian atas.
  2. Perhatikan alat append_to_state. Fungsi helper ini memungkinkan agen menambahkan data ke daftar dalam status sesi, yang merupakan cara researcher dan screenwriter meneruskan tugasnya.
  3. Coba agen. Di terminal, luncurkan antarmuka web dengan pengaktifan pemuatan ulang langsung:
    cd ~/adk_multiagent_systems
    adk web --reload_agents
    
  4. Di terminal Cloud Shell, klik Untuk melihat antarmuka web di tab baru, klik tombol Web Preview, lalu pilih Change Port.
    Menu Pratinjau Web
  5. Masukkan nomor port 8000, lalu klik Change and Preview. Tab browser baru akan terbuka dengan UI Dev ADK.
    Kotak pop-up perubahan port dengan 8000 dimasukkan dalam kotak teks
  6. Dari dropdown Select an agent, pilih workflow_agents.
  7. Mulai percakapan dengan: hello. Agen greeter akan merespons.
  8. Saat diminta, masukkan tokoh sejarah. Anda dapat menggunakan salah satu opsi ini atau opsi Anda sendiri:
    • Zhang Zhongjing
    • Ada Lovelace
    • Marcus Aurelius
  9. SequentialAgent sekarang akan mengambil alih. Anda tidak akan melihat pesan perantara apa pun. researcher, screenwriter, dan file_writer akan berjalan satu demi satu. Agen hanya akan merespons setelah seluruh urutan selesai.
    Jika gagal, Anda dapat mengklik + New Session di kanan atas dan mencoba lagi.
  10. Setelah agen mengonfirmasi bahwa file telah ditulis, temukan dan buka file .txt baru di direktori movie_pitches di Cloud Shell Editor Anda untuk melihat outputnya.
  11. Di ADK Dev UI, klik ikon agen terakhir dalam histori chat untuk membuka tampilan peristiwa.
  12. Tampilan peristiwa menampilkan grafik visual hierarki agen. Anda dapat melihat cara greeter memanggil film_concept_team, yang kemudian memanggil setiap sub-agennya secara berurutan.grafik web adk
  13. Anda dapat mengklik tab Permintaan dan Respons untuk agen mana pun dalam grafik guna memeriksa data persis yang diteruskan, termasuk status sesi.

Ringkasan Bagian

Di bagian ini, Anda telah mempelajari cara menggunakan agen alur kerja:

  • SequentialAgent menjalankan sub-agennya satu per satu, secara berurutan, tanpa menunggu input pengguna di antara langkah-langkahnya.
  • Ini adalah "alur kerja" karena pengguna berbicara dengan root_agent, yang kemudian menyerahkan pekerjaan ke SequentialAgent untuk diselesaikan.
  • Sub-agen dalam urutan menggunakan status sesi (misalnya, { PLOT_OUTLINE? }) untuk mengakses pekerjaan agen sebelumnya.
  • Anda dapat menggunakan grafik peristiwa di Dev UI untuk memvisualisasikan dan men-debug seluruh alur kerja antar-agen.

11. Menambahkan LoopAgent untuk pekerjaan iteratif

LoopAgent adalah agen alur kerja yang menjalankan sub-agennya secara berurutan, lalu mengulanginya, dimulai dari awal. "Loop" ini berlanjut hingga kondisi terpenuhi, seperti mencapai jumlah max_iterations atau sub-agen memanggil alat exit_loop bawaan.

Hal ini berguna untuk tugas yang memerlukan penyempurnaan berulang. Anda akan menambahkan LoopAgent ini untuk membuat "ruang penulis" bagi agen proposal film Anda. Hal ini memungkinkan agen researcher, screenwriter, dan critic baru bekerja dalam loop, meningkatkan kualitas plot dengan setiap iterasi hingga critic memutuskan bahwa plot sudah siap. Hal ini juga membantu agen menangani input pengguna yang lebih tidak jelas (seperti "dokter zaman dahulu") dengan membiarkannya meneliti dan menyempurnakan ide.

Langkah 2 sistem multi-agen film_concept_team

Untuk melakukan perubahan ini:

  1. Di adk_multiagent_systems/workflow_agents/agent.py, tambahkan impor untuk exit_loop (di dekat impor google.adk lainnya):
    from google.adk.tools import exit_loop
    
  2. Tambahkan agen critic baru. Agen ini akan meninjau plot. Jika bagus, fungsi ini akan memanggil exit_loop. Jika tidak, fungsi ini akan menambahkan masukan ke status untuk loop berikutnya.
    Tempel definisi agen berikut di bagian # Agents:
    critic = Agent(
        name="critic",
        model=model_name,
        description="Reviews the outline so that it can be improved.",
        instruction="""
        INSTRUCTIONS:
        Consider these questions about the PLOT_OUTLINE:
        - Does it meet a satisfying three-act cinematic structure?
        - Do the characters' struggles seem engaging?
        - Does it feel grounded in a real time period in history?
        - Does it sufficiently incorporate historical details from the RESEARCH?
    
        If the PLOT_OUTLINE does a good job with these questions, exit the writing loop with your 'exit_loop' tool.
        If significant improvements can be made, use the 'append_to_state' tool to add your feedback to the field 'CRITICAL_FEEDBACK'.
        Explain your decision and briefly summarize the feedback you have provided.
    
        PLOT_OUTLINE:
        { PLOT_OUTLINE? }
    
        RESEARCH:
        { research? }
        """,
        before_model_callback=log_query_to_model,
        after_model_callback=log_model_response,
        tools=[append_to_state, exit_loop]
    )
    
  3. Buat LoopAgent writers_room. Bagian ini akan berisi tiga agen yang akan bekerja dalam loop.
    Tempelkan kode berikut di atas definisi agen film_concept_team:
    writers_room = LoopAgent(
        name="writers_room",
        description="Iterates through research and writing to improve a movie plot outline.",
        sub_agents=[
            researcher,
            screenwriter,
            critic
        ],
        max_iterations=5,
    )
    
  4. Perbarui SequentialAgent film_concept_team untuk menggunakan loop writers_room yang baru. Ganti researcher dan screenwriter dengan agen writers_room tunggal.Ganti definisi film_concept_team yang ada dengan yang berikut ini:
    film_concept_team = SequentialAgent(
        name="film_concept_team",
        description="Write a film plot outline and save it as a text file.",
        sub_agents=[
            writers_room,
            file_writer
        ],
    )
    
  5. Kembali ke tab ADK Dev UI dan klik + New Session di kanan atas.
  6. Mulai percakapan baru dengan: hello
  7. Jika diminta, berikan topik yang lebih luas kepada agen kali ini. Beberapa ide:
    • seorang desainer industri yang membuat produk untuk masyarakat luas
    • seorang kartografer (pembuat peta)
    • orang yang meningkatkan hasil panen tanaman pertanian
    Agen sekarang akan bekerja melalui loop. Di UI Dev ADK, Anda akan melihat log saat agen berjalan beberapa kali (misalnya, "[peneliti]", "[penulis naskah]", "[kritikus]", "[peneliti]", "[penulis naskah]", "[kritikus]...").
  8. Setelah loop selesai, agen akan menulis file. Tinjau file yang dihasilkan di direktori adk_multiagent_systems/movie_pitches.
  9. Periksa grafik peristiwa di Dev UI untuk melihat struktur loop.

Ringkasan Bagian

Di bagian ini, Anda telah mempelajari cara menggunakan LoopAgent:

  • LoopAgent adalah agen alur kerja yang mengulangi urutan sub-agennya, sehingga membuat "loop dalam" untuk tugas iteratif.
  • Agen di dalam loop menggunakan status sesi untuk meneruskan pekerjaan (misalnya, PLOT_OUTLINE) dan masukan (misalnya, CRITICAL_FEEDBACK) satu sama lain pada lintasan berikutnya.
  • Loop dapat dihentikan dengan mencapai batas max_iterations atau oleh agen yang memanggil alat exit_loop.

12. Menggunakan ParallelAgent untuk "fan out and gather"

ParallelAgent adalah agen alur kerja yang mengeksekusi semua sub-agennya secara bersamaan (serentak). Hal ini berguna untuk tugas yang dapat dibagi menjadi subtugas independen, seperti menjalankan dua tugas penelitian yang berbeda.

Anda akan menggunakan ParallelAgent untuk membuat "tim praproduksi" yang bekerja secara paralel. Satu agen akan meneliti potensi penjualan tiket bioskop, sementara agen lain secara bersamaan mendiskusikan ide pemilihan pemeran. Pola ini sering disebut pola "fan out and gather": ParallelAgent "membagikan" tugas, dan agen berikutnya (file_writer) "mengumpulkan" hasilnya.

Langkah 3 sistem multiagen film_concept_team

Alur agen akhir Anda adalah:

  1. greeter (root) memulai percakapan.
  2. Proses ini akan ditransfer ke film_concept_team (SequentialAgent), yang berjalan:
    • writers_room (LoopAgent) untuk membuat plot.
    • preproduction_team (ParallelAgent) baru untuk meneliti box office dan pemilihan pemeran secara bersamaan.
    • file_writer untuk mengumpulkan semua hasil dan menyimpan file.

Untuk melakukan perubahan ini:

  1. Di adk_multiagent_systems/workflow_agents/agent.py, tempel ParallelAgent baru dan sub-agennya di bawah header # Agents.
    box_office_researcher = Agent(
        name="box_office_researcher",
        model=model_name,
        description="Considers the box office potential of this film",
        instruction="""
        PLOT_OUTLINE:
        { PLOT_OUTLINE? }
    
        INSTRUCTIONS:
        Write a report on the box office potential of a movie like that described in PLOT_OUTLINE based on the reported box office performance of other recent films.
        """,
        output_key="box_office_report"
    )
    
    casting_agent = Agent(
        name="casting_agent",
        model=model_name,
        description="Generates casting ideas for this film",
        instruction="""
        PLOT_OUTLINE:
        { PLOT_OUTLINE? }
    
        INSTRUCTIONS:
        Generate ideas for casting for the characters described in PLOT_OUTLINE
        by suggesting actors who have received positive feedback from critics and/or
        fans when they have played similar roles.
        """,
        output_key="casting_report"
    )
    
    preproduction_team = ParallelAgent(
        name="preproduction_team",
        sub_agents=[
            box_office_researcher,
            casting_agent
        ]
    )
    
  2. Perbarui daftar sub_agents SequentialAgent film_concept_team untuk menyertakan preproduction_team baru (antara writers_room dan file_writer).Ganti definisi film_concept_team yang ada dengan yang berikut ini:
    film_concept_team = SequentialAgent(
        name="film_concept_team",
        description="Write a film plot outline and save it as a text file.",
        sub_agents=[
            writers_room,
            preproduction_team,
            file_writer
        ],
    )
    
  3. Perbarui instruction agen file_writer sehingga "mengumpulkan" laporan baru dari status dan menambahkannya ke file.
    Ganti string instruction untuk file_writer dengan ini:
        instruction="""
        INSTRUCTIONS:
        - Create a marketable, contemporary movie title suggestion for the movie described in the PLOT_OUTLINE.
        If a title has been suggested in PLOT_OUTLINE, you can use it, or replace it with a better one.
        - Use your 'write_file' tool to create a new txt file with the following arguments:
        - for a filename, use the movie title
        - Write to the 'movie_pitches' directory.
        - For the 'content' to write, include:
        - The PLOT_OUTLINE
        - The BOX_OFFICE_REPORT
        - The CASTING_REPORT
    
        PLOT_OUTLINE:
        { PLOT_OUTLINE? }
    
        BOX_OFFICE_REPORT:
        { box_office_report? }
    
        CASTING_REPORT:
        { casting_report? }
        """,
    
  4. Kembali ke tab ADK Dev UI dan klik + New Session.
  5. Masukkan hello untuk memulai percakapan.
  6. Jika diminta, masukkan ide karakter baru. Beberapa ide:
    • aktris yang menemukan teknologi untuk Wi-Fi
    • koki yang menarik
    • pemain kunci dalam pameran pekan raya dunia
  7. Setelah agen menyelesaikan tugasnya, periksa file akhir di direktori adk_multiagent_systems/movie_pitches. Sekarang dokumen tersebut akan berisi plot, laporan box office, dan laporan casting dalam satu dokumen.

Ringkasan Bagian

Di bagian ini, Anda telah mempelajari cara menggunakan ParallelAgent:

  • ParallelAgent "membagi" tugas, menjalankan semua sub-agennya secara bersamaan, bukan secara berurutan.
  • Cara ini sangat efisien untuk tugas yang tidak saling bergantung (seperti meneliti dua topik yang berbeda).
  • Hasil agen paralel "dikumpulkan" oleh agen berikutnya. Hal ini dilakukan dengan membuat agen paralel menyimpan pekerjaannya ke status sesi (menggunakan output_key), dan membuat agen akhir (seperti file_writer) membaca kunci tersebut.

13. Agen alur kerja kustom

Jika agen alur kerja yang telah ditentukan sebelumnya dari SequentialAgent, LoopAgent, dan ParallelAgent tidak cukup untuk memenuhi kebutuhan Anda, CustomAgent memberikan fleksibilitas untuk menerapkan logika alur kerja baru.

Anda dapat menentukan pola untuk kontrol alur, eksekusi bersyarat, atau pengelolaan status antara sub-agen. Hal ini berguna untuk alur kerja yang kompleks, orkestrasi stateful, atau mengintegrasikan logika bisnis kustom ke dalam lapisan orkestrasi framework.

Pembuatan CustomAgent berada di luar cakupan lab ini, tetapi akan bermanfaat jika Anda mengetahuinya.

14. Selamat!

Anda telah berhasil membangun sistem multi-agen yang canggih menggunakan Google Agent Development Kit (ADK). Anda telah berkembang dari hubungan agen induk-turunan yang sederhana hingga mengatur alur kerja otomatis yang kompleks yang dapat meneliti, menulis, dan menyempurnakan project kreatif.

Rekap

Di lab ini, Anda telah melakukan hal berikut:

  • Mengatur agen dalam pohon hierarkis dengan hubungan agen induk dan sub-agen.
  • Transfer antar-agen yang dikontrol, baik secara otomatis (menggunakan description) maupun secara eksplisit (menggunakan instruction).
  • Menggunakan alat untuk menulis data ke kamus tool_context.state.
  • Menggunakan pembuatan template kunci (misalnya, { PLOT_OUTLINE? }) untuk membaca dari status sesi dan memandu perintah agen.
  • Menerapkan SequentialAgent untuk membuat alur kerja langkah demi langkah yang sederhana (riset -> tulis -> simpan).
  • Menggunakan LoopAgent dengan agen critic dan alat exit_loop untuk membuat siklus penyempurnaan iteratif.
  • Menggunakan ParallelAgent untuk "memperluas" tugas independen (seperti casting dan riset box office) agar berjalan secara bersamaan.

Melanjutkan eksperimen

Ada banyak cara untuk mengembangkan apa yang telah Anda pelajari. Berikut adalah beberapa ide:

  • Menambahkan agen lainnya: Coba tambahkan agen baru ke preproduction_team ParallelAgent Anda. Misalnya, Anda dapat membuat marketing_agent yang menulis tagline untuk film berdasarkan PLOT_OUTLINE.
  • Tambahkan alat lainnya: Beri agen researcher Anda lebih banyak alat. Anda dapat membuat alat yang menggunakan Google Search API untuk menemukan informasi yang tidak ada di Wikipedia.
  • Jelajahi CustomAgent: Lab ini menyebutkan CustomAgent untuk alur kerja yang tidak sesuai dengan template standar. Coba buat satu yang, misalnya, menjalankan agen secara bersyarat hanya jika ada kunci tertentu dalam status sesi.