ADK ile çoklu aracı sistemleri oluşturma

1. Giriş

Genel Bakış

Bu laboratuvarda, Google Agent Development Kit (Google ADK)'yi kullanarak karmaşık, çok agent'lı sistemleri nasıl düzenleyeceğiniz öğretilmektedir. Basit aracı hiyerarşilerinden otomatikleştirilmiş, ortak çalışmaya dayalı iş akışları oluşturmaya geçiş yapacaksınız.

Ne oluşturacaksınız?

İki farklı çok temsilcili sistem oluşturacaksınız:

  • "Beyin fırtınası" aracısı ile "gezilecek yer planlama" aracısı arasındaki görüşmeleri aktarmayı öğrenen basit bir seyahat planlama aracısı.
  • Tam bir film konusu oluşturmak için döngü içinde birlikte çalışan otomatik aracıların (ör. araştırmacı, senarist ve eleştirmen) "yazarlar odası" olarak kullanıldığı daha gelişmiş bir film önerisi oluşturucu.

Neler öğreneceksiniz?

  • Nasıl üst ve alt acente ilişkileri oluşturulur?
  • Bir araçtan oturuma state veri yazma
  • Anahtar şablonu kullanarak state okuma (ör. {my_key?}).
  • Adım adım iş akışları için SequentialAgent kullanma.
  • Tekrarlı iyileştirme döngüleri oluşturmak için LoopAgent nasıl kullanılır?
  • Bağımsız görevleri eşzamanlı olarak çalıştırmak için ParallelAgent kullanma

2. Çok Temsilcili Sistemler

Agent Development Kit (ADK), geliştiricilerin üretken modellerden daha güvenilir, gelişmiş ve çok adımlı davranışlar elde etmesini sağlar. ADK, tek bir karmaşık istem yerine, işi bölerek bir sorun üzerinde birlikte çalışan birden fazla basit aracıdan oluşan bir akış oluşturmanıza olanak tanır.

Bu yaklaşımın, tek bir monolitik istem kullanmaya kıyasla çeşitli avantajları vardır:

  • Daha basit tasarım: Küçük ve uzmanlaşmış bir dizi aracıdan oluşan akış tasarlamak ve düzenlemek, büyük ve karmaşık bir istem oluşturmaktan daha kolaydır.
  • Güvenilirlik: Uzmanlaşmış temsilciler, belirli görevlerinde büyük ve karmaşık bir temsilciden daha güvenilirdir.
  • Sürdürülebilirlik: Küçük ve özel bir temsilciyi, sistemin diğer kısımlarını bozmadan düzeltmek veya geliştirmek daha kolaydır.
  • Modülerlik: Bir iş akışı için oluşturulan aracıları diğer iş akışlarında kolayca yeniden kullanabilirsiniz.

Hiyerarşik Temsilci Ağacı

Hiyerarşik aracıları gösteren ağaç yapısı

ADK'da aracıları ağaç yapısında düzenlersiniz. Bu hiyerarşi, hangi temsilcinin görüşmeyi hangi temsilciye "aktarabileceğini" sınırladığından görüşmenin akışını kontrol etmek için çok önemlidir. Bu sayede sistemin davranışı daha tahmin edilebilir ve hata ayıklaması daha kolay hale gelir. Sunulan avantajlardan bazıları:

  • Sezgisel tasarım: Yapı, gerçek dünyadaki takımlardan esinlenerek oluşturulduğu için hakkında akıl yürütmek daha kolaydır.
  • Kontrollü Akış: Hiyerarşi, görev devretme üzerinde hassas kontrol sahibi olmanızı sağlar. Bu da hata ayıklamaya yardımcı olur. Örneğin, ağaç yapısı, benzer açıklamalara sahip iki rapor yazma aracınız olsa bile doğru rapor yazma aracının çağrılmasını sağlar.

Yapının tamamı root_agent ile başlar. Bu aracı üst olarak hareket eder ve bir veya daha fazla alt aracıya sahip olabilir. Bu alt aracılar da kendi alt aracılarının üstü olabilir ve böylece ağaç yapısı oluşur.

3. Proje ayarlama

Google Hesabı

Kişisel Google Hesabınız yoksa Google Hesabı oluşturmanız gerekir.

İş veya okul hesabı yerine kişisel hesap kullanın.

Google Cloud Console'da oturum açma

Kişisel bir Google Hesabı kullanarak Google Cloud Console'da oturum açın.

Faturalandırmayı Etkinleştir

5 ABD doları değerindeki Google Cloud kredilerini kullanma (isteğe bağlı)

Bu atölyeyi düzenlemek için bir miktar kredisi olan bir faturalandırma hesabına ihtiyacınız vardır. Kendi faturalandırmanızı kullanmayı planlıyorsanız bu adımı atlayabilirsiniz.

  1. Bu bağlantıyı tıklayın ve kişisel bir Google Hesabı ile oturum açın.Aşağıdakine benzer bir mesaj görürsünüz:Kredi sayfasını görüntülemek için burayı tıklayın
  2. KREDİLERİNİZE ERİŞMEK İÇİN BURAYI TIKLAYIN düğmesini tıklayın. Bu işlem sizi faturalandırma profilinizi ayarlayacağınız bir sayfaya yönlendirir.Faturalandırma profili sayfasını ayarlama
  3. Onayla'yı tıklayın.

Artık bir Google Cloud Platform deneme sürümü faturalandırma hesabına bağlısınız.

Faturalandırmaya genel bakış sayfasının ekran görüntüsü

Kişisel faturalandırma hesabı oluşturma

Faturalandırmayı Google Cloud kredilerini kullanarak ayarladıysanız bu adımı atlayabilirsiniz.

Kişisel faturalandırma hesabı oluşturmak için Cloud Console'da faturalandırmayı etkinleştirmek üzere buraya gidin.

Bazı notlar:

  • Bu laboratuvarı tamamlamak için 1 ABD dolarından daha az tutarda bulut kaynağı kullanmanız gerekir.
  • Daha fazla ödeme alınmaması için bu laboratuvarın sonundaki adımları uygulayarak kaynakları silebilirsiniz.
  • Yeni kullanıcılar 300 ABD doları değerindeki ücretsiz denemeden yararlanabilir.

Proje oluşturma (isteğe bağlı)

Bu laboratuvar için kullanmak istediğiniz mevcut bir projeniz yoksa buradan yeni bir proje oluşturun.

4. Cloud Shell Düzenleyici'yi açma

  1. Doğrudan Cloud Shell Düzenleyici'ye gitmek için bu bağlantıyı tıklayın.
  2. Bugün herhangi bir noktada yetkilendirmeniz istenirse devam etmek için Yetkilendir'i tıklayın.Cloud Shell'e yetki vermek için tıklayın.
  3. Terminal ekranın alt kısmında görünmüyorsa açın:
    • Görünüm'ü tıklayın.
    • Terminal'i tıklayın.Cloud Shell Düzenleyici'de yeni terminal açma
  4. Terminalde şu komutla projenizi ayarlayın:
    gcloud config set project [PROJECT_ID]
    
    • Örnek:
      gcloud config set project lab-project-id-example
      
    • Proje kimliğinizi hatırlamıyorsanız tüm proje kimliklerinizi şu komutla listeleyebilirsiniz:
      gcloud projects list
      
      Cloud Shell Düzenleyici terminalinde proje kimliğini ayarlama
  5. Şu mesajı görmeniz gerekir:
    Updated property [core/project].
    

5. API'leri etkinleştir

Vertex AI API'yi kullanmak ve Gemini modeliyle etkileşim kurmak için Google Cloud projenizde Vertex AI API'yi etkinleştirmeniz gerekir.

  1. Terminalde API'yi etkinleştirin:
    gcloud services enable aiplatform.googleapis.com
    

GitHub deposunu kopyalama ve bağımlılıkları yükleme talimatlarıyla manuel dosya oluşturma işleminin yerini alan güncellenmiş bölümleri aşağıda bulabilirsiniz.

Python için Vertex AI SDK'ya giriş

Python uygulamanızdan Vertex AI'de barındırılan modellerle etkileşim kurmak için Python için Vertex AI SDK'yı kullanırsınız. Bu SDK, temel API çağrılarının karmaşıklıklarını doğrudan ele almaya gerek kalmadan istem gönderme, model parametrelerini belirtme ve yanıt alma sürecini basitleştirir.

Python için Vertex AI SDK'sıyla ilgili kapsamlı dokümanları Python için Vertex AI SDK'ya giriş | Google Cloud sayfasında bulabilirsiniz.

6. Proje ortamını ayarlama

Depoyu klonlama

  1. Terminalde, başlangıç dosyalarını içeren depoyu klonlayın.
    git clone --depth 1 https://github.com/GoogleCloudPlatform/devrel-demos.git
    
    --depth 1 işareti yalnızca en son sürümü klonlar. Bu işlem daha hızlıdır.
  2. Terminalde bu laboratuvar için doğru çalışma dizinine gidin.
    cd devrel-demos/ai-ml/build-multiagent-systems-with-adk/adk_multiagent_systems
    

Sanal ortamı etkinleştirme

  1. Terminalde, uv kullanarak sanal bir ortam oluşturun ve etkinleştirin:
    uv venv
    source .venv/bin/activate
    
  2. Terminalde, google-adk ve requirements.txt dosyasındaki diğer bağımlılıkları yükleyin:
    uv pip install -r requirements.txt
    

Dosya yapınızı inceleyin

Tüm dosyalarınız oluşturulduktan sonra, yapının tamamını görmek için gezginde adk_multiagent_systems klasörünü açın.

  1. Cloud Shell Editor menüsünde Dosya > Klasörü Aç...'ı seçin.
    Klasörü Aç seçeneğinin belirlendiği Cloud Shell Düzenleyici Dosya menüsü
  2. Açılan kutuda, kullanıcı adınızın ardından aşağıdaki klasör bilgilerini ekleyin: devrel-demos/ai-ml/build-multiagent-systems-with-adk/adk_multiagent_systems/. Tamam'ı tıklayın.
    Şuna benzer bir şey görmelisiniz:
    Proje yoluyla Klasörü Aç iletişim kutusunu açar.
  3. Soldaki Gezgin paneli yenilenir. Artık parent_and_subagents ve workflow_agents alt dizinleriyle birlikte tam proje yapınızı görmelisiniz. Bir sonraki adımlara geçebilirsiniz.
    Açık adk_multiagent_systems klasörünü gösteren Gezgin paneli

Ortam değişkenlerini ayarlama

  1. Zaten adk_multiagent_systems dizinindesiniz. Terminalde, ortam değişkenlerinizi depolamak için bir .env dosyası oluşturun:
    cloudshell edit .env
    
  2. Aşağıdaki kodu, düzenleyicide açılan .env dosyasına yapıştırın:
    GOOGLE_GENAI_USE_VERTEXAI=TRUE
    GOOGLE_CLOUD_PROJECT="[YOUR-PROJECT-ID]"
    GOOGLE_CLOUD_LOCATION=global
    MODEL="gemini-2.5-flash"
    
  3. [YOUR-PROJECT-ID] kısmını, gerçek Google Cloud proje kimliğinizle değiştirin. (ör. PROJECT_ID = "google-cloud-labs")
    Proje kimliğinizi hatırlamıyorsanız terminalinizde aşağıdaki komutu çalıştırın. Tüm projelerinizin ve kimliklerinin listesi gösterilir.
    gcloud projects list
    
  4. Terminalde, bu .env dosyasını alt aracı dizinlerine kopyalayın. Böylece bu dizinler de değişkenlere erişebilir:
    cp .env parent_and_subagents/.env
    cp .env workflow_agents/.env
    
    Dosya yapısı artık şu şekilde görünmelidir:
    Açık adk_multiagent_systems klasörünü gösteren Gezgin paneli

7. Üst, alt ve benzer acenteler arasındaki transferleri keşfetme

Sohbet her zaman root_agent ile başlar. Varsayılan olarak, bir üst temsilci görüşmenin ne zaman aktarılacağına karar vermek için alt temsilcilerinin description değerini kullanır. Bu aktarımları, alt aracılarının name kullanarak ebeveynin instruction içinde açıkça yönlendirebilirsiniz.

Bunu test edelim.

  1. Cloud Shell Düzenleyici'de adk_multiagent_systems/parent_and_subagents/agent.py dosyasını açın. agent.py dosyasındaki üç temsilciye dikkat edin:
    • root_agent (steering adlı): Kullanıcıya hangi alt temsilciye aktarılacağını belirlemek için soru sorar. Başlangıçta yalnızca alt aracıların description'ına bağlıdır.
    • travel_brainstormer: Kullanıcının gidilecek yerler hakkında beyin fırtınası yapmasına yardımcı olur.
    • attractions_planner: Kullanıcının belirli bir ülkede yapılacak şeyleri listelemesine yardımcı olur.
  2. Aşağıdaki satırı root_agent oluşturma işlemine ekleyerek travel_brainstormer ve attractions_planner alt aracılarını root_agent'nin alt aracıları yapın:
        sub_agents=[travel_brainstormer, attractions_planner]
    
  3. Terminalde temsilcinizle sohbet edin:
    cd ~/devrel-demos/ai-ml/build-multiagent-systems-with-adk/adk_multiagent_systems
    adk run parent_and_subagents
    
  4. Terminaldeki [user]: isteminde şunu yazın:
    hello
    
    Örnek çıkış (Sizinki biraz farklı olabilir):
    [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. Şimdi terminaldeki temsilciye şunu söyleyin:
    I could use some help deciding.
    
    Örnek çıkış (Sizinki biraz farklı olabilir):
    [travel_brainstormer]: Okay! To give you the best recommendations, I need to understand what you're looking for in a trip.
    ...
    
    [travel_brainstormer] etiketine dikkat edin. root_agent, kontrolü yalnızca alt acentenin description temelinde aktardı.
  6. Terminaldeki user: isteminde exit yazıp ENTER'a basarak görüşmeyi sonlandırın.
  7. Şimdi daha açık olalım. agent.py içinde, root_agent öğesinin instruction bölümüne aşağıdakileri ekleyin:
            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. Terminalde aracı tekrar çalıştırın:
    adk run parent_and_subagents
    
  9. Terminaldeki [user]: isteminde şunu yazın:
    hello
    
  10. Şöyle yanıt verin:
    I would like to go to Japan.
    
    Örnek çıkış (Sizinki biraz farklı olabilir):
    [attractions_planner]: Okay, I can help you with that! Here are some popular attractions in Japan:
    ...
    
    Yeni talimatlarınızda belirtildiği gibi attractions_planner adresine yapılan aktarımı fark edin.
  11. Şimdi şu yanıtı verin:
    Actually I don't know what country to visit.
    
    Örnek çıkış (Sizinki biraz farklı olabilir):
    [travel_brainstormer]: Okay! I can help you brainstorm some countries for travel...
    
    attractions_planner'nin benzeri olan travel_brainstormer'ye aktarıldığınızı bildiririz. Bu ayar varsayılan olarak etkindir.
  12. Kullanıcı isteminde oturumu sonlandırmak için exit yazın.

Özet

Bu bölümde, aracı hiyerarşisi ve görüşme akışının temellerini öğrendiniz:

  • Sohbet her zaman root_agent ile başlar.
  • Bir üst aracı, description temelinde otomatik olarak bir alt aracıya aktarabilir.
  • instruction adlı üst öğeye, name adlı alt öğeye aktarma izni vererek bu akışı açıkça kontrol edebilirsiniz.
  • Varsayılan olarak temsilciler, peer temsilcilerine (hiyerarşideki kardeşler) aktarım yapabilir.

8. Bilgileri depolamak ve almak için oturum durumunu kullanma

Her ADK görüşmesinde, oturum durumu sözlüğünü içeren bir Session bulunur. Bu duruma tüm temsilciler erişebilir. Bu nedenle, temsilciler arasında bilgi aktarmak veya görüşme boyunca verileri (ör. liste) korumak için idealdir.

Duruma ekleme ve durumdan okuma işlemlerini keşfetmek için:

  1. adk_multiagent_systems/parent_and_subagents/agent.py dosyasına dönün.
  2. Aşağıdaki işlev tanımını # Tools başlığının altına yapıştırın:
    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"}
    
    Bu kodda şunlara dikkat edin:
    • İşlev tool_context: ToolContext değerini alır. Bu nesne, oturuma erişim noktanızdır.
    • tool_context.state["attractions"] = ... satırı, doğrudan oturumun durum sözlüğünden okur ve bu sözlüğe yazar. Geri kalan işlemler ADK tarafından yapılır.
  3. tools parametresini ekleyerek aracı attractions_planner aracısına ekleyin:
        tools=[save_attractions_to_state]
    
  4. Aşağıdaki madde işaretlerini attractions_planner aracının mevcut instruction bölümüne ekleyin:
            - 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. Terminalde aşağıdaki komutu kullanarak Agent Development Kit Web UI'yi başlatın:
    adk web
    
    Çıkış
    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. Cloud Shell terminalinde, web arayüzünü yeni bir sekmede görüntülemek için Web Önizlemesi düğmesini tıklayın ve Bağlantı Noktasını Değiştir'i seçin.
    Web önizlemesi menüsü
  7. Bağlantı noktası numarası olarak 8000'i girin ve Change and Preview'u (Değiştir ve Önizle) tıklayın. ADK Geliştirici Kullanıcı Arayüzü'nü içeren yeni bir tarayıcı sekmesi açılır.
    Metin kutusuna 8000 girilmiş bağlantı noktası pop-up kutusunu değiştirme
  8. Soldaki Bir aracı seçin açılır listesinden parent_and_subagents simgesini seçin.
  9. Sohbeti başlatın: hello
  10. Temsilci sizi karşıladıktan sonra şu yanıtı verin:
    I'd like to go to Egypt.
    
    attractions_planner'a yönlendirilir ve gezilecek yerlerin listesi gösterilir.
  11. Bir cazibe merkezi seçin (örneğin):
    I'll go to the Sphinx
    
  12. Şuna benzer bir yanıt alırsınız: Tamam, Sfenks'i listenize kaydettim...
  13. Aracın yanıtından oluşturulan etkinliği görüntülemek için yanıt araç kutusunu (onay işaretiyle işaretlenmiş) tıklayın.
    Durumdaki değişiklikleri açıklayan stateDelta içeren bir işlemler alanı olduğunu unutmayın.
  14. Acentenin listesindeki başka bir cazibe merkeziyle yanıt verin.
  15. Sol gezinme menüsünde, daha önce incelediğiniz etkinliğe odaklanmayı bırakmak için "X"i tıklayın.
  16. Sol kenar çubuğunda Durum sekmesini tıklayın. Artık oturumun durumunda attractions dizisini görebilirsiniz. Bu dizi, seçtiğiniz her iki öğeyi de içermelidir.Web kullanıcı arayüzünde oturum durumu önizlemesi
  17. Bu mesajı temsilciye gönderin:
    What is on my list?
    
    Aracı artık durumdan okumalı ve listenizi döndürmelidir.
  18. Aracıyla deneme yapmayı bitirdiğinizde web tarayıcısı sekmesini kapatın ve sunucuyu durdurmak için Cloud Shell Terminali'nde CTRL + C tuşlarına basın.

Bölüm Özeti

Bu bölümde, verileri paylaşmak için Session durumunu nasıl kullanacağınızı öğrendiniz:

  • Duruma yazma: tool_context.state nesnesini kullanarak bir araç içinden durum sözlüğüne yazarsınız (ör. tool_context.state["my_list"] = [...]).
  • Durumu okumak için: Anahtar şablonu oluşturma (ör.instruction Here is your list: {my_list?}).
  • Durumu incelemek için: ADK Dev UI'deki Durum sekmesini kullanarak oturum durumunu canlı olarak izleyebilirsiniz.

9. İş Akışı Aracıları

Şimdiye kadar, üst aracının nasıl alt aracıya aktarım yaptığını ve ardından kullanıcıyı beklediğini gördünüz. İş akışı aracıları farklıdır: Kullanıcı girişi beklemeden, otomatik bir akışta alt aracılarını birbiri ardına çalıştırırlar.

Bu, "Planla ve Uygula" veya "Taslak Oluştur ve Revize Et" gibi otomatikleştirilmiş, çok adımlı görevler için idealdir. ADK, bunu yönetmek için üç yerleşik iş akışı aracısı sağlar:

  • SequentialAgent
  • LoopAgent
  • ParallelAgent

Bu laboratuvarın geri kalanında, bu üç iş akışı aracısını kullanarak çok aracılı bir sistem oluşturmaya odaklanacağız.

Tarihi bir karakterle ilgili yeni bir film için tanıtım belgesi geliştiren bir aracı oluşturacaksınız. Temsilcileriniz araştırma, yinelemeli yazma ve rapor oluşturma işlemlerini gerçekleştirir.

Sonuç olarak sisteminiz aşağıdaki gibi görünecektir:

film_concept_team çoklu aracı sisteminin şeması

Bu sistemi en basit iş akışından başlayarak adım adım oluşturacaksınız.

10. SequentialAgent ile çok aracılı bir sistem oluşturma

SequentialAgent, alt aracılarını basit ve doğrusal bir sırada yürüten bir iş akışı aracısıdır. sub_agents listesindeki her aracı, sırayla ve birbiri ardına çalıştırılır. Bu özellik, görevlerin belirli bir sırayla yapılması gereken iş akışları için idealdir. Örneğin, şimdi oluşturacağınız film önerisi aracında bu özellikten yararlanabilirsiniz.

Bu ilk sürüm şu şekilde yapılandırılacak:

Film_concept_team multi-agent system step 1

  • root_agent (greeter), kullanıcıyı karşılayıp film konusunu alacak.
  • Bu işlemden sonra, film_concept_team adlı SequentialAgent'ya aktarılır. Bu SequentialAgent:
    1. Wikipedia'dan bilgi almak için researcher aracını çalıştırın.
    2. Bu bilgileri kullanarak bir olay örgüsü yazmak için screenwriter aracısını çalıştırın.
    3. Son grafiği bir dosyaya kaydetmek için file_writer aracını çalıştırın.

Çalıştıralım.

  1. Cloud Shell Düzenleyici'de adk_multiagent_systems/workflow_agents/agent.py dosyasını açın.
    Bu aracı tanım dosyasını okuyun. Alt temsilciler bir üst temsilciye atanmadan önce tanımlanmaları gerektiğinden dosyayı sohbet akışının sırasına göre okumak için temsilcileri dosyanın en altından en üstüne doğru okuyabilirsiniz.
  2. append_to_state aracına dikkat edin. Bu yardımcı işlev, aracıların oturum durumundaki bir listeye veri eklemesine olanak tanır. researcher ve screenwriter, çalışmalarını bu şekilde iletir.
  3. Temsilciyi deneyin. Terminalde, canlı yeniden yükleme etkinleştirilmiş web arayüzünü başlatın:
    cd ~/devrel-demos/ai-ml/build-multiagent-systems-with-adk/adk_multiagent_systems
    adk web --reload_agents
    
  4. Cloud Shell terminalinde, web arayüzünü yeni bir sekmede görüntülemek için Web Önizlemesi düğmesini tıklayın ve Bağlantı Noktasını Değiştir'i seçin.
    Web önizlemesi menüsü
  5. Bağlantı noktası numarası olarak 8000'i girin ve Change and Preview'u (Değiştir ve Önizle) tıklayın. ADK Geliştirici Kullanıcı Arayüzü'nü içeren yeni bir tarayıcı sekmesi açılır.
    Metin kutusuna 8000 girilmiş bağlantı noktası pop-up kutusunu değiştirme
  6. Bir aracı seçin açılır listesinden workflow_agents simgesini seçin.
  7. Sohbeti başlatmak için: hello. greeter temsilcisi yanıt verecektir.
  8. İstendiğinde tarihi bir şahsiyet girin. Bunlardan birini veya kendi şablonunuzu kullanabilirsiniz:
    • Zhang Zhongjing
    • Ada Ak
    • Marcus Aurelius
  9. SequentialAgent artık devralacak. Herhangi bir ara mesaj görmezsiniz. researcher, screenwriter ve file_writer birbiri ardına çalıştırılır. Aracı yalnızca tüm sıra tamamlandığında yanıt verir.
    Başarısız olursa sağ üstteki + Yeni Oturum'u tıklayarak tekrar deneyebilirsiniz.
  10. Aracı, dosyanın yazıldığını onayladıktan sonra çıkışı görmek için Cloud Shell Düzenleyicinizdeki movie_pitches dizininde yeni .txt dosyasını bulup açın.
  11. ADK Dev UI'de, etkinlik görünümünü açmak için sohbet geçmişindeki son aracı simgesini tıklayın.
  12. Etkinlik görünümünde, aracı ağacının görsel grafiği gösterilir. greeter adlı kullanıcının film_concept_team adlı kullanıcıyı aradığını ve bu kullanıcının da alt temsilcilerini sırayla aradığını görebilirsiniz.adk web graph
  13. Grafikteki herhangi bir aracı için İstek ve Yanıt sekmelerini tıklayarak oturum durumu da dahil olmak üzere aktarılan verileri inceleyebilirsiniz.

Bölüm Özeti

Bu bölümde, iş akışı aracını nasıl kullanacağınızı öğrendiniz:

  • Bir SequentialAgent, alt aracılarını adım aralarında kullanıcı girişi beklemeden sırayla tek tek yürütür.
  • Kullanıcı root_agent ile konuştuğu ve root_agent, tamamlanması için işi SequentialAgent'e devrettiği için bu bir "iş akışıdır".
  • Sıradaki alt aracılar oturum durumunu kullanır (ör. { PLOT_OUTLINE? }) seçeneğini tıklayarak önceki temsilcilerin çalışmalarına erişebilirsiniz.
  • Tüm aracıdan aracıya iş akışını görselleştirmek ve hatalarını ayıklamak için geliştirici kullanıcı arayüzündeki etkinlik grafiğini kullanabilirsiniz.

11. Tekrarlayan çalışmalar için LoopAgent ekleme

LoopAgent, alt aracılarını sırayla çalıştıran ve ardından baştan başlayarak tekrarlayan bir iş akışı aracısıdır. Bu "döngü", bir koşul karşılanana kadar (ör. max_iterations sayısına ulaşma veya bir alt aracının yerleşik exit_loop aracını çağırması) devam eder.

Yinelemeli iyileştirme gerektiren görevler için faydalıdır. Film önerisi temsilciniz için "yazarların odası" oluşturmak üzere bu LoopAgent öğesini ekleyeceksiniz. Bu sayede researcher, screenwriter ve yeni bir critic aracısı döngü içinde çalışarak critic hazır olduğuna karar verene kadar her geçişte kurguyu iyileştirir. Bu sayede, temsilci bir fikri araştırıp iyileştirerek daha belirsiz kullanıcı girişlerini (ör. "eski bir doktor") de işleyebilir.

Film_concept_team multi-agent system step 2

Bu değişiklikleri yapmak için:

  1. adk_multiagent_systems/workflow_agents/agent.py içinde, exit_loop için içe aktarma işlemini ekleyin (diğer google.adk içe aktarma işlemlerinin yakınına):
    from google.adk.tools import exit_loop
    
  2. Yeni critic temsilcisini ekleyin. Bu temsilci, olay örgüsünü inceler. İyi bir sonuç elde edilirse exit_loop çağrılır. Aksi takdirde, bir sonraki döngü için duruma geri bildirim ekler.
    Aşağıdaki aracı tanımını # Agents bölümünün altına yapıştırın:
    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. writers_room LoopAgent oluşturun. Bu, döngüde çalışacak üç aracı içerir.
    Aşağıdaki kodu film_concept_team aracı tanımının üzerine yapıştırın:
    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. Yeni writers_room döngüsünü kullanmak için film_concept_team SequentialAgent öğesini güncelleyin. researcher ve screenwriter öğelerini tek bir writers_room aracısıyla değiştirin.Mevcut film_concept_team tanımınızı aşağıdakilerle değiştirin:
    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. ADK Dev UI sekmesine dönün ve sağ üstteki + Yeni Oturum'u tıklayın.
  6. Şununla yeni bir görüşme başlatın: hello
  7. İstendiğinde temsilciye bu kez daha geniş bir konu verin. Bazı fikirler:
    • kitleler için ürünler tasarlayan bir endüstriyel tasarımcı
    • bir kartograf (harita yapımcısı)
    • ekinlerin daha fazla yiyecek vermesini sağlayan adam
    Aracı artık döngü üzerinden çalışacak. ADK Dev UI'de, aracılar birden çok kez çalıştırıldığında günlükleri görürsünüz (ör. "[araştırmacı]", "[senarist]", "[eleştirmen]", "[araştırmacı]", "[senarist]", "[eleştirmen]...").
  8. Döngü tamamlandığında aracı dosyayı yazar. Oluşturulan dosyayı adk_multiagent_systems/movie_pitches dizininde inceleyin.
  9. Döngü yapısını görmek için geliştirici kullanıcı arayüzündeki olay grafiğini inceleyin.

Bölüm Özeti

Bu bölümde, LoopAgent simgesini nasıl kullanacağınızı öğrendiniz:

  • LoopAgent, alt temsilci dizisini tekrarlayan ve yinelemeli görevler için "iç döngü" oluşturan bir iş akışı temsilcisidir.
  • Döngü içindeki temsilciler, işi aktarmak için oturum durumunu kullanır (ör. PLOT_OUTLINE) ve geri bildirim (ör. CRITICAL_FEEDBACK) birbirine aktarılır.
  • Döngü, max_iterations sınırına ulaşıldığında veya exit_loop aracı çağrıldığında durdurulabilir.

12. "Fan out and gather" için ParallelAgent kullanma

ParallelAgent, tüm alt aracılarını aynı anda (eşzamanlı olarak) yürüten bir iş akışı aracısıdır. Bu, iki farklı araştırma işi çalıştırmak gibi bağımsız alt görevlere bölünebilen görevler için değerlidir.

Paralel olarak çalışan bir "ön üretim ekibi" oluşturmak için ParallelAgent kullanacaksınız. Bir temsilci gişe potansiyeli hakkında araştırma yaparken başka bir temsilci aynı anda oyuncu seçimi fikirleri için beyin fırtınası yapar. Bu duruma genellikle "dağıt ve topla" modeli denir: ParallelAgent işi "dağıtır", daha sonraki bir aracı (file_writer) ise sonuçları "toplar".

Film_concept_team multi-agent system step 3

Son temsilci akışınız şu şekilde olacak:

  1. Sohbeti greeter (kök) başlatır.
  2. Bu işlem, film_concept_team (SequentialAgent) öğesine aktarılır ve şu işlem çalıştırılır:
    • Grafiği oluşturmak için writers_room (LoopAgent).
    • Gişe ve oyuncu seçimi hakkında aynı anda araştırma yapmak için yeni preproduction_team (ParallelAgent)
    • Tüm sonuçları toplamak ve dosyayı kaydetmek için file_writer simgesini tıklayın.

Bu değişiklikleri yapmak için:

  1. adk_multiagent_systems/workflow_agents/agent.py bölümünde, yeni ParallelAgent ve alt aracılarını # Agents başlığının altına yapıştırın.
    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. film_concept_team SequentialAgent'nin sub_agents listesini yeni preproduction_team'ı (writers_room ile file_writer arasında) içerecek şekilde güncelleyin. Mevcut film_concept_team tanımınızı aşağıdakilerle değiştirin:
    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. file_writer aracısının instruction özelliğini, eyaletteki yeni raporları "toplayıp" dosyaya ekleyecek şekilde güncelleyin.
    file_writer için instruction dizesini şununla değiştirin:
        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. ADK Dev UI sekmesine dönün ve + New Session'ı (+ Yeni Oturum) tıklayın.
  5. Sohbeti başlatmak için hello girin.
  6. İstendiğinde yeni bir karakter fikri girin. Bazı fikirler:
    • kablosuz bağlantı teknolojisini icat eden aktris
    • heyecanlı bir aşçı
    • Dünya fuarı sergilerindeki kilit oyuncular
  7. Aracı işini tamamladığında adk_multiagent_systems/movie_pitches dizinindeki son dosyayı inceleyin. Artık tek bir belgede olay örgüsü, gişe raporu ve oyuncu seçimi raporu yer almalıdır.

Bölüm Özeti

Bu bölümde, ParallelAgent simgesini nasıl kullanacağınızı öğrendiniz:

  • Bir ParallelAgent "dağıtma" işlemi, alt aracılarını sırayla değil aynı anda çalıştırır.
  • Bu, birbirinden bağımsız görevler (ör. iki farklı konuyu araştırma) için oldukça verimlidir.
  • Paralel aracıların sonuçları daha sonraki bir aracı tarafından "toplanır". Bunun için paralel aracıların çalışmalarını oturum durumuna (output_key kullanarak) kaydetmesi ve son bir aracının (ör. file_writer) bu anahtarları okuması gerekir.

13. Özel iş akışı aracıları

SequentialAgent, LoopAgent ve ParallelAgent önceden tanımlanmış iş akışı aracıları ihtiyaçlarınız için yeterli olmadığında CustomAgent, yeni iş akışı mantığı uygulama esnekliği sağlar.

Alt aracılar arasında akış kontrolü, koşullu yürütme veya durum yönetimi için kalıplar tanımlayabilirsiniz. Bu özellik; karmaşık iş akışları, durum bilgisi içeren düzenlemeler veya özel iş mantığını çerçevelerin düzenleme katmanına entegre etmek için kullanışlıdır.

CustomAgent oluşturma bu laboratuvarın kapsamı dışındadır ancak ihtiyacınız olursa böyle bir özelliğin olduğunu bilmeniz iyi olur.

14. Tebrikler!

Google Agent Development Kit (ADK)'yi kullanarak gelişmiş bir çoklu aracı sistemi başarıyla oluşturdunuz. Basit bir üst-alt temsilci ilişkisinden, yaratıcı bir projeyi araştırabilen, yazabilen ve iyileştirebilen karmaşık, otomatik iş akışlarını yönetmeye geçtiniz.

Özet

Bu laboratuvarda şunları yaptınız:

  • Üst ve alt aracı ilişkileriyle hiyerarşik ağaçta düzenlenmiş aracılar.
  • Hem otomatik olarak (description kullanılarak) hem de açıkça (instruction kullanılarak) kontrollü temsilciden temsilciye aktarımlar.
  • tool_context.state sözlüğüne veri yazmak için bir araç kullanıldı.
  • Anahtar şablonu kullanıldı (ör. { PLOT_OUTLINE? }) oturum durumundan okumak ve temsilcinin istemine rehberlik etmek için kullanılır.
  • Basit ve adım adım iş akışı (araştırma -> yazma -> kaydetme) oluşturmak için SequentialAgent uygulandı.
  • Yinelemeli iyileştirme döngüsü oluşturmak için critic aracısı ve exit_loop aracıyla birlikte LoopAgent kullanıldı.
  • Bağımsız görevleri (ör. oyuncu seçimi ve gişe araştırması) aynı anda yürütmek için ParallelAgent kullanıldı.

Denemeye devam etme

Öğrendiklerinizi geliştirebileceğiniz birçok yol vardır. Aşağıdaki önerilerden yararlanabilirsiniz:

  • Daha fazla temsilci ekleyin: preproduction_team ParallelAgent hesabınıza yeni bir temsilci eklemeyi deneyin. Örneğin, PLOT_OUTLINE temelinde film için kısa açıklama yazan bir marketing_agent oluşturabilirsiniz.
  • Daha fazla araç ekleme: researcher temsilcinize daha fazla araç verin. Wikipedia'da bulunmayan bilgileri bulmak için Google Arama API'sini kullanan bir araç oluşturabilirsiniz.
  • Keşfet CustomAgent: Laboratuvarda, standart şablonlara uymayan iş akışları için CustomAgent özelliğinden bahsedildi. Örneğin, bir aracıyı yalnızca oturum durumunda belirli bir anahtar varsa koşullu olarak çalıştıran bir aracı oluşturmayı deneyin.