1. Wprowadzenie
Przegląd
W tym module dowiesz się, jak koordynować złożone systemy wieloagentowe za pomocą zestawu Google Agent Development Kit (Google ADK). Przejdziesz od prostych hierarchii agentów do tworzenia zautomatyzowanych przepływów pracy opartych na współpracy.
Co utworzysz
Utworzysz 2 różne systemy z wieloma agentami:
- Prosty agent do planowania podróży, który uczy się przekazywać rozmowy między agentem „burzy mózgów” a agentem „planowania atrakcji”.
- Bardziej zaawansowany generator pomysłów na filmy, który korzysta z „pokoju scenarzystów” złożonego z automatycznych agentów (np. badacza, scenarzysty i krytyka), którzy współpracują w pętli, aby stworzyć pełną fabułę filmu.
Czego się nauczysz
- Jak tworzyć relacje między agentem głównym a podrzędnym
- Jak zapisywać dane w sesji
stateza pomocą narzędzia. - Jak odczytywać dane z
stateza pomocą szablonów kluczy (np.{my_key?}). - Jak używać
SequentialAgentw przypadku przepływów pracy krok po kroku. - Jak używać
LoopAgentdo tworzenia cykli iteracyjnego udoskonalania. - Jak używać
ParallelAgentdo równoczesnego wykonywania niezależnych zadań.
2. Systemy wieloagentowe
Pakiet Agent Development Kit (ADK) umożliwia deweloperom uzyskiwanie bardziej niezawodnych, zaawansowanych i wieloetapowych zachowań modeli generatywnych. Zamiast jednego złożonego prompta ADK umożliwia tworzenie ciągu wielu prostszych agentów, którzy współpracują przy rozwiązywaniu problemu, dzieląc się pracą.
Takie podejście ma kilka zalet w porównaniu z używaniem jednego, monolitycznego prompta:
- Prostsza konstrukcja: łatwiej jest zaprojektować i zorganizować przepływ małych, wyspecjalizowanych agentów niż stworzyć jeden duży, złożony prompt.
- Niezawodność: wyspecjalizowani agenci są bardziej niezawodni w wykonywaniu konkretnych zadań niż jeden duży, złożony agent.
- Łatwość konserwacji: łatwiej jest naprawić lub ulepszyć małego, wyspecjalizowanego agenta bez uszkadzania innych części systemu.
- Modułowość: agenci utworzeni na potrzeby jednego przepływu pracy mogą być łatwo wykorzystywani w innych.
Drzewo agentów hierarchicznych

W ADK agenci są uporządkowani w strukturę drzewa. Ta hierarchia ma kluczowe znaczenie dla kontrolowania przebiegu rozmowy, ponieważ ogranicza to, który pracownik obsługi klienta może „przekazać” rozmowę innemu pracownikowi. Dzięki temu działanie systemu jest bardziej przewidywalne i łatwiejsze do debugowania. Korzyści:
- Intuicyjna struktura: struktura jest inspirowana prawdziwymi zespołami, co ułatwia jej zrozumienie.
- Kontrolowany przepływ: hierarchia zapewnia precyzyjną kontrolę nad delegowaniem zadań, co ułatwia debugowanie. Na przykład struktura drzewa zapewnia wywołanie właściwego agenta do pisania raportów, nawet jeśli masz 2 agenty o podobnych opisach.
Cała struktura zaczyna się od root_agent. Ten agent pełni rolę nadrzędną i może mieć co najmniej 1 podrzędnego agenta, który z kolei może być agentem nadrzędnym dla własnych agentów podrzędnych, tworząc w ten sposób drzewo.
3. Konfigurowanie projektu
Konto Google
Jeśli nie masz jeszcze osobistego konta Google, musisz je utworzyć.
Używaj konta osobistego zamiast konta służbowego lub szkolnego.
Logowanie w konsoli Google Cloud
Zaloguj się w konsoli Google Cloud za pomocą osobistego konta Google.
Włącz płatności
Wykorzystaj środki na Google Cloud o wartości 5 USD (opcjonalnie)
Aby przeprowadzić te warsztaty, musisz mieć konto rozliczeniowe z określonymi środkami. Jeśli planujesz używać własnego konta rozliczeniowego, możesz pominąć ten krok.
- Kliknij ten link i zaloguj się na osobiste konto Google.Zobaczysz coś takiego:

- Kliknij przycisk KLIKNIJ TUTAJ, ABY UZYSKAĆ DOSTĘP DO ŚRODKÓW. Spowoduje to przejście na stronę, na której możesz skonfigurować profil płatności.

- Kliknij Potwierdź.
Twoje konto jest teraz połączone z próbnym kontem rozliczeniowym Google Cloud Platform.

Konfigurowanie osobistego konta rozliczeniowego
Jeśli skonfigurujesz płatności za pomocą środków w Google Cloud, możesz pominąć ten krok.
Aby skonfigurować osobiste konto rozliczeniowe, włącz płatności w Cloud Console.
Uwagi:
- Pod względem opłat za zasoby chmury ukończenie tego modułu powinno kosztować mniej niż 1 USD.
- Jeśli chcesz uniknąć dalszych opłat, wykonaj czynności opisane na końcu tego modułu, aby usunąć zasoby.
- Nowi użytkownicy mogą skorzystać z bezpłatnego okresu próbnego, w którym mają do dyspozycji środki w wysokości 300 USD.
Tworzenie projektu (opcjonalnie)
Jeśli nie masz bieżącego projektu, którego chcesz użyć w tym ćwiczeniu, utwórz nowy projekt.
4. Otwórz edytor Cloud Shell
- Kliknij ten link, aby przejść bezpośrednio do edytora Cloud Shell
- Jeśli w dowolnym momencie pojawi się prośba o autoryzację, kliknij Autoryzuj, aby kontynuować.

- Jeśli terminal nie pojawia się u dołu ekranu, otwórz go:
- Kliknij Wyświetl.
- Kliknij Terminal
.
- W terminalu ustaw projekt za pomocą tego polecenia:
gcloud config set project [PROJECT_ID]- Przykład:
gcloud config set project lab-project-id-example - Jeśli nie pamiętasz identyfikatora projektu, możesz wyświetlić listę wszystkich identyfikatorów projektów za pomocą tego polecenia:
gcloud projects list
- Przykład:
- Powinien wyświetlić się ten komunikat:
Updated property [core/project].
5. Włącz interfejsy API
Aby korzystać z interfejsu Vertex AI API i wchodzić w interakcje z modelem Gemini, musisz włączyć interfejs Vertex AI API w projekcie Google Cloud.
- W terminalu włącz interfejs API:
gcloud services enable aiplatform.googleapis.com
Oto zaktualizowane sekcje, w których ręczne tworzenie plików zastąpiono instrukcjami klonowania repozytorium GitHub i instalowania zależności.
Wprowadzenie do pakietu Vertex AI SDK dla Pythona
Aby wchodzić w interakcje z modelami hostowanymi w Vertex AI z poziomu aplikacji w Pythonie, użyjesz pakietu Vertex AI SDK for Python. Ten pakiet SDK upraszcza proces wysyłania promptów, określania parametrów modelu i otrzymywania odpowiedzi bez konieczności bezpośredniego obsługi złożonych wywołań interfejsu API.
Pełną dokumentację pakietu Vertex AI SDK dla Pythona znajdziesz tutaj: Wprowadzenie do pakietu Vertex AI SDK dla Pythona | Google Cloud.
6. Konfigurowanie środowiska projektu
Kopiowanie repozytorium
- W terminalu sklonuj repozytorium zawierające pliki początkowe.
Flagagit clone --depth 1 https://github.com/GoogleCloudPlatform/devrel-demos.git--depth 1klonuje tylko najnowszą wersję, co jest szybsze. - W terminalu przejdź do odpowiedniego katalogu roboczego dla tego modułu.
cd devrel-demos/ai-ml/build-multiagent-systems-with-adk/adk_multiagent_systems
Aktywowanie środowiska wirtualnego
- W terminalu utwórz i aktywuj środowisko wirtualne za pomocą polecenia
uv:uv venv source .venv/bin/activate - W terminalu zainstaluj
google-adki inne zależności z plikurequirements.txt:uv pip install -r requirements.txt
Sprawdź strukturę pliku
Gdy wszystkie pliki zostaną utworzone, otwórz folder adk_multiagent_systems w Eksploratorze, aby zobaczyć pełną strukturę.
- W menu edytora Cloud Shell wybierz Plik > Otwórz folder....

- W wyświetlonym oknie dodaj po nazwie użytkownika te informacje o folderze:
devrel-demos/ai-ml/build-multiagent-systems-with-adk/adk_multiagent_systems/. Kliknij OK.
Powinno to wyglądać mniej więcej tak:
- Panel eksploratora po lewej stronie zostanie odświeżony. Powinna być teraz widoczna pełna struktura projektu z podkatalogami
parent_and_subagentsiworkflow_agents, gotowa do wykonania kolejnych kroków.
Konfigurowanie zmiennych środowiskowych
- Jesteś już w katalogu
adk_multiagent_systems. W terminalu utwórz plik.envdo przechowywania zmiennych środowiskowych:cloudshell edit .env - Wklej do pliku
.env, który otworzy się w edytorze, ten tekst:GOOGLE_GENAI_USE_VERTEXAI=TRUE GOOGLE_CLOUD_PROJECT="[YOUR-PROJECT-ID]" GOOGLE_CLOUD_LOCATION=global MODEL="gemini-2.5-flash" - Zastąp
[YOUR-PROJECT-ID]identyfikatorem Twojego projektu Google Cloud. (np.PROJECT_ID = "google-cloud-labs")
Jeśli nie pamiętasz identyfikatora projektu, uruchom to polecenie w terminalu. Wyświetli się lista wszystkich Twoich projektów i ich identyfikatorów.gcloud projects list - W terminalu skopiuj ten plik
.envdo katalogów podrzędnych agentów, aby oni też mogli uzyskać dostęp do zmiennych: Struktura pliku powinna teraz wyglądać tak:cp .env parent_and_subagents/.env cp .env workflow_agents/.env
7. Poznaj transfery między agentami nadrzędnymi, podrzędnymi i równorzędnymi
Rozmowa zawsze zaczyna się od root_agent. Domyślnie agent nadrzędny używa description swoich agentów podrzędnych, aby zdecydować, kiedy przekazać rozmowę. Możesz też wyraźnie kierować tymi przekazaniami w instruction rodzica, korzystając z name podmiotów zależnych.
Sprawdźmy to.
- W edytorze Cloud Shell otwórz plik
adk_multiagent_systems/parent_and_subagents/agent.py. Zwróć uwagę na 3 agenty w plikuagent.py:root_agent(o nazwiesteering): zadaje użytkownikowi pytanie, aby zdecydować, do którego podagenta przekazać rozmowę. Początkowo opiera się tylko nadescriptionpodagentów.travel_brainstormer: pomaga użytkownikowi w przeprowadzaniu burzy mózgów dotyczącej miejsc docelowych.attractions_planner: pomaga użytkownikowi w znalezieniu listy rzeczy do zrobienia w danym kraju.
- Ustaw
travel_brainstormeriattractions_plannerjako podagentyroot_agent, dodając ten wiersz do tworzeniaroot_agent:sub_agents=[travel_brainstormer, attractions_planner] - W terminalu porozmawiaj na czacie z agentem:
cd ~/devrel-demos/ai-ml/build-multiagent-systems-with-adk/adk_multiagent_systems adk run parent_and_subagents - W wierszu polecenia
[user]:w terminalu wpisz: Przykładowe dane wyjściowe (Twoje mogą się nieco różnić):hello[steering]: Hi there! Do you already have a country in mind for your trip, or would you like some help deciding where to go?
- Teraz powiedz pracownikowi obsługi klienta w terminalu:
Przykładowe dane wyjściowe (Twoje mogą się nieco różnić):I could use some help deciding. Zwróć uwagę na tag[travel_brainstormer]: Okay! To give you the best recommendations, I need to understand what you're looking for in a trip. ...
[travel_brainstormer].root_agentprzekazał kontrolę tylko na podstawiedescriptionpodwykonawcy. - W terminalu w wierszu poleceń
user:wpiszexiti naciśnij ENTER, aby zakończyć rozmowę. - Przejdźmy teraz do konkretów. W
agent.pydodaj doinstructionelementuroot_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'. - W terminalu ponownie uruchom agenta:
adk run parent_and_subagents - W wierszu polecenia
[user]:w terminalu wpisz:hello - Odpowiedz:
Przykładowe dane wyjściowe (Twoje mogą się nieco różnić):I would like to go to Japan. Zwróć uwagę na przeniesienie do[attractions_planner]: Okay, I can help you with that! Here are some popular attractions in Japan: ...
attractions_plannerzgodnie z nowymi instrukcjami. - Teraz odpowiedz:
Przykładowe dane wyjściowe (Twoje mogą się nieco różnić):Actually I don't know what country to visit. Zwróć uwagę, że przekierowaliśmy Cię do[travel_brainstormer]: Okay! I can help you brainstorm some countries for travel...
travel_brainstormer, czyli równorzędnej usługiattractions_planner. Jest to domyślnie dozwolone. - W odpowiedzi na prośbę użytkownika wpisz
exit, aby zakończyć sesję.
Podsumowanie
W tej sekcji przedstawiliśmy podstawowe informacje o hierarchii agentów i ścieżce rozmowy:
- Rozmowa zawsze zaczyna się od
root_agent. - Agent nadrzędny może automatycznie przekazywać połączenie do agenta podrzędnego na podstawie
description. - Możesz wyraźnie kontrolować ten proces, przekazując rodzicowi
instructiondo przekazania podmiotowi pośredniczącemu za pomocą jegoname. - Domyślnie agenci mogą przekazywać zgłoszenia do swoich
peer(elementów równorzędnych w hierarchii).
8. Używanie stanu sesji do przechowywania i pobierania informacji
Każda rozmowa ADK ma Session, który zawiera słownik stanów sesji. Ten stan jest dostępny dla wszystkich agentów, dzięki czemu idealnie nadaje się do przekazywania informacji między nimi lub przechowywania danych (np. listy) w trakcie rozmowy.
Aby dowiedzieć się więcej o dodawaniu danych do stanu i ich odczytywaniu:
- Wróć do pliku
adk_multiagent_systems/parent_and_subagents/agent.py - Wklej tę definicję funkcji po nagłówku
# Tools: W tym kodzie zwróć uwagę na: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"}- Funkcja otrzymuje
tool_context: ToolContext. Ten obiekt to brama do sesji. - Wiersz
tool_context.state["attractions"] = ...bezpośrednio odczytuje i zapisuje dane w słowniku stanu sesji. Resztą zajmie się ADK.
- Funkcja otrzymuje
- Dodaj narzędzie do agenta
attractions_planner, dodając parametrtools:tools=[save_attractions_to_state] - Dodaj te punkty do istniejących
attractions_plannerinstructionagenta:- 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. - Uruchom interfejs internetowy pakietu Agent Development Kit, wpisując w terminalu to polecenie:
Dane wyjścioweadk webINFO: 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) - W terminalu Cloud Shell kliknij przycisk Podgląd w przeglądarce i wybierz Zmień port, aby wyświetlić interfejs internetowy w nowej karcie.

- Wpisz numer portu 8000 i kliknij Zmień i wyświetl podgląd. Otworzy się nowa karta przeglądarki z interfejsem ADK Dev.

- W menu Wybierz agenta po lewej stronie wybierz
parent_and_subagents. - Rozpocznij rozmowę od:
hello - Gdy pracownik zespołu pomocy przywita się z Tobą, odpowiedz:
Powinno nastąpić przekierowanie doI'd like to go to Egypt.attractions_planner, gdzie zobaczysz listę atrakcji. - Wybierz atrakcję, np.:
I'll go to the Sphinx - Powinna pojawić się odpowiedź: OK, zapisałem Sfinksa na Twojej liście...
- Kliknij pole narzędzia do odpowiadania (oznaczone symbolem zaznaczenia), aby wyświetlić wydarzenie utworzone na podstawie odpowiedzi narzędzia.
Zwróć uwagę, że zawiera pole actions, które zawierastateDeltaopisujące zmiany stanu. - Odpowiedz, podając inną atrakcję z listy agenta.
- W menu nawigacyjnym po lewej stronie kliknij „X”, aby wyjść z widoku zdarzenia, które zostało wcześniej sprawdzone.
- Na pasku bocznym po lewej stronie kliknij kartę Stan. W stanie sesji zobaczysz teraz tablicę
attractions, która powinna zawierać oba wybrane przez Ciebie produkty.
- Wyślij do agenta tę wiadomość:
Agent powinien teraz odczytać stan i zwrócić listę.What is on my list? - Gdy skończysz eksperymentować z agentem, zamknij kartę przeglądarki i naciśnij CTRL + C w terminalu Cloud Shell, aby zatrzymać serwer.
Podsumowanie sekcji
W tej sekcji dowiedzieliśmy się, jak używać stanu Session do udostępniania danych:
- Aby zapisać stan: możesz zapisać stan w słowniku stanu z poziomu narzędzia, używając obiektu
tool_context.state(np.tool_context.state["my_list"] = [...]). - Odczytywanie stanu: wstrzykujesz dane o stanie bezpośrednio do
instructionagenta za pomocą szablonów kluczy (np.Here is your list: {my_list?}). - Aby sprawdzić stan: stan sesji możesz monitorować na żywo w interfejsie ADK Dev UI na karcie Stan.
9. Agenci przepływu pracy
Do tej pory omówiliśmy, jak agent nadrzędny przekazuje zgłoszenie agentowi podrzędnemu, a następnie czeka na użytkownika. Agenci przepływu pracy działają inaczej: wykonują swoje podrzędne agenty jeden po drugim w zautomatyzowanym przepływie, bez czekania na dane wejściowe od użytkownika.
Jest to idealne rozwiązanie w przypadku zautomatyzowanych zadań wieloetapowych, takich jak potok „Zaplanuj i wykonaj” lub „Przygotuj wersję roboczą i wprowadź poprawki”. Pakiet ADK udostępnia 3 wbudowane agenty przepływu pracy do zarządzania tym procesem:
SequentialAgentLoopAgentParallelAgent
W pozostałej części tego modułu skupimy się na tworzeniu systemu z wieloma agentami przy użyciu tych 3 agentów przepływu pracy.
Utworzysz agenta, który opracuje dokument z propozycją nowego filmu o postaci historycznej. Agenci zajmą się wyszukiwaniem informacji, iteracyjnym pisaniem i generowaniem raportów.
Ostatecznie system będzie wyglądać tak:

Będziesz tworzyć ten system krok po kroku, zaczynając od najprostszego procesu.
10. Tworzenie systemu z wieloma agentami za pomocą klasy SequentialAgent
SequentialAgent to agent przepływu pracy, który wykonuje swoje podagenty w prostej, liniowej sekwencji. Każdy agent z jego listy sub_agents jest uruchamiany kolejno, jeden po drugim. Jest to idealne rozwiązanie w przypadku potoków, w których zadania muszą być wykonywane w określonej kolejności, np. w przypadku agenta do prezentacji pomysłów na filmy, którego teraz utworzysz.
Pierwsza wersja będzie miała taką strukturę:

root_agent(greeter) powita użytkownika i zapyta go o temat filmu.- Następnie zostanie on przeniesiony na
SequentialAgento nazwiefilm_concept_team, który:- Uruchom
researcheragenta, aby uzyskać informacje z Wikipedii. - Uruchom agenta
screenwriter, aby wykorzystać te fakty do napisania fabuły. - Uruchom agenta
file_writer, aby zapisać ostateczny wykres w pliku.
- Uruchom
Uruchommy go.
- W edytorze Cloud Shell otwórz plik
adk_multiagent_systems/workflow_agents/agent.py.
Przeczytaj ten plik definicji agenta. Agenci podrzędni muszą być zdefiniowani, zanim będzie można ich przypisać do agenta nadrzędnego. Aby odczytać plik w kolejności przepływu rozmowy, możesz odczytywać agentów od dołu do góry. - Zwróć uwagę na narzędzie
append_to_state. Ta funkcja pomocnicza umożliwia agentom dodawanie danych do listy w stanie sesji. W ten sposóbresearcheriscreenwriterprzekazują wyniki swojej pracy. - Wypróbuj agenta. W terminalu uruchom interfejs internetowy z włączonym odświeżaniem na żywo:
cd ~/devrel-demos/ai-ml/build-multiagent-systems-with-adk/adk_multiagent_systems adk web --reload_agents - W terminalu Cloud Shell kliknij przycisk Podgląd w przeglądarce i wybierz Zmień port, aby wyświetlić interfejs internetowy w nowej karcie.

- Wpisz numer portu 8000 i kliknij Zmień i wyświetl podgląd. Otworzy się nowa karta przeglądarki z interfejsem ADK Dev.

- W menu Wybierz agenta kliknij
workflow_agents. - Rozpocznij rozmowę od:
hello. Pracownik obsługi klientagreeterodpowie. - Gdy pojawi się prośba, wpisz postać historyczną. Możesz użyć jednej z tych opcji lub własnej:
- Zhang Zhongjing
- Adrianna Kowalska
- Marcus Aurelius
- Teraz przejmie kontrolę
SequentialAgent. Nie zobaczysz żadnych komunikatów pośrednich.researcher,screenwriterifile_writerbędą uruchamiane kolejno. Agent odpowie dopiero po zakończeniu całej sekwencji.
Jeśli się nie uda, w prawym górnym rogu kliknij + Nowa sesja i spróbuj jeszcze raz. - Gdy agent potwierdzi zapisanie pliku, znajdź i otwórz nowy plik
.txtw katalogumovie_pitchesw edytorze Cloud Shell, aby zobaczyć dane wyjściowe. - W interfejsie ADK Dev UI kliknij ostatnią ikonę agenta w historii czatu, aby otworzyć widok zdarzenia.
- Widok zdarzeń zawiera wizualny wykres drzewa agentów. Możesz zobaczyć, jak
greeterwywołałfilm_concept_team, który następnie wywołał kolejno każdego z podrzędnych agentów.
- Możesz kliknąć karty Żądanie i Odpowiedź w przypadku dowolnego agenta na wykresie, aby sprawdzić dokładne przekazane dane, w tym stan sesji.
Podsumowanie sekcji
W tej sekcji dowiesz się, jak używać agenta przepływu pracy:
SequentialAgentwykonuje swoje podrzędne agenty jeden po drugim, w kolejności, bez czekania na dane wejściowe użytkownika między poszczególnymi krokami.- Jest to „przepływ pracy”, ponieważ użytkownik rozmawia z
root_agent, który następnie przekazuje pracę do wykonaniaSequentialAgent. - Podagenci w sekwencji korzystają ze stanu sesji (np.
{ PLOT_OUTLINE? }), aby uzyskać dostęp do pracy poprzednich agentów. - W interfejsie programisty możesz użyć wykresu zdarzeń, aby wizualizować i debugować cały przepływ pracy między agentami.
11. Dodawanie LoopAgenta do pracy iteracyjnej
LoopAgent to agent przepływu pracy, który uruchamia swoich podagentów w określonej kolejności, a następnie powtarza ten proces od początku. Ta „pętla” trwa do momentu spełnienia określonego warunku, np. osiągnięcia liczby max_iterations lub wywołania wbudowanego narzędzia exit_loop przez podrzędnego agenta.
Przydaje się w przypadku zadań, które wymagają iteracyjnego dopracowywania. Dodasz ten LoopAgent, aby utworzyć „pokój scenarzystów” dla agenta ds. prezentacji filmu. Dzięki temu researcher, screenwriter i nowy agent critic mogą pracować w pętli, ulepszając fabułę z każdym przebiegiem, dopóki critic nie uzna, że jest gotowa. Pomaga to też agentowi radzić sobie z mniej precyzyjnymi danymi wejściowymi użytkownika (np. „starożytny lekarz”) poprzez umożliwienie mu zbadania i doprecyzowania pomysłu.

Aby wprowadzić te zmiany:
- W sekcji
adk_multiagent_systems/workflow_agents/agent.pydodaj import dlaexit_loop(w pobliżu innych importówgoogle.adk):from google.adk.tools import exit_loop - Dodaj nowego agenta
critic. Agent sprawdzi fabułę. Jeśli jest dobra, dzwoni pod numerexit_loop. Jeśli nie, dodaje informację zwrotną do stanu na potrzeby następnej pętli.
Wklej tę definicję agenta w sekcji# 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] ) - Utwórz
writers_roomLoopAgent. Będzie on zawierać 3 agenty, które będą działać w pętli.
Wklej ten kod nad definicją agenta:film_concept_teamwriters_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, ) - Zaktualizuj
film_concept_teamSequentialAgent, aby używać nowej pętliwriters_room. Zastąpresearcheriscreenwriterpojedynczym agentemwriters_room.Zastąp istniejącą definicjęfilm_concept_teamtym kodem: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 ], ) - Wróć na kartę interfejsu programisty ADK i w prawym górnym rogu kliknij + Nowa sesja.
- Rozpocznij nową rozmowę z:
hello - Gdy pojawi się odpowiedni komunikat, podaj pracownikowi obsługi klienta szerszy temat. Oto kilka pomysłów:
- projektant przemysłowy, który tworzył produkty dla mas
- kartograf (twórca map)
- ten, który sprawił, że plony dawały więcej żywności.
- Po zakończeniu pętli agent zapisze plik. Sprawdź wygenerowany plik w katalogu
adk_multiagent_systems/movie_pitches. - Sprawdź wykres zdarzeń w interfejsie programisty, aby zobaczyć strukturę pętli.
Podsumowanie sekcji
W tej sekcji dowiesz się, jak używać tych funkcji: LoopAgent
LoopAgentto agent przepływu pracy, który powtarza sekwencję subagentów, tworząc „wewnętrzną pętlę” dla zadań iteracyjnych.- Pracownicy obsługi klienta w pętli używają stanu sesji do przekazywania pracy (np.
PLOT_OUTLINE) i opinie (np.CRITICAL_FEEDBACK) w kolejnych przejazdach. - Pętla może zostać zatrzymana po osiągnięciu limitu
max_iterationslub przez agenta, który wywoła narzędzieexit_loop.
12. Używanie narzędzia ParallelAgent do „rozsyłania i zbierania”
ParallelAgent to agent przepływu pracy, który wykonuje wszystkie swoje podrzędne agenty w tym samym czasie (równocześnie). Jest to przydatne w przypadku zadań, które można podzielić na niezależne podzadania, np. w przypadku wykonywania 2 różnych zadań badawczych.
Użyjesz ParallelAgent, aby utworzyć „zespół przedprodukcyjny”, który będzie pracować równolegle. Jeden agent będzie badać potencjał kasowy, a drugi jednocześnie będzie wymyślać pomysły na obsadę. Jest to często nazywane wzorcem „rozsyłania i zbierania”: ParallelAgent „rozsyła” pracę, a późniejszy agent (nasz file_writer) „zbiera” wyniki.

Ostateczny przepływ pracy agenta będzie wyglądać tak:
greeter(główny) rozpoczyna czat.- Przesiadka na
film_concept_team(SequentialAgent), która kursuje:writers_room(LoopAgent) do utworzenia wykresu.- Nowy przycisk
preproduction_team(ParallelAgent) umożliwia jednoczesne sprawdzanie wyników kasowych i obsady. - Kliknij
file_writer, aby zebrać wszystkie wyniki i zapisać plik.
Aby wprowadzić te zmiany:
- W sekcji
adk_multiagent_systems/workflow_agents/agent.pywklej nowyParallelAgenti jego podmioty pośredniczące pod nagłówkiem# 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 ] ) - Zaktualizuj listę
sub_agentsSequentialAgentfilm_concept_team, dodając do niej nowy elementpreproduction_team(międzywriters_roomafile_writer).Zastąp dotychczasową definicjęfilm_concept_teamtą definicją: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 ], ) - Zaktualizuj
file_writeragentainstruction, aby „zbierał” nowe raporty ze stanu i dodawał je do pliku.
Zastąp ciąg znakówinstructionw przypadkufile_writertym ciągiem: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? } """, - Wróć na kartę interfejsu programisty ADK i kliknij + Nowa sesja.
- Wpisz
hello, aby rozpocząć rozmowę. - Gdy pojawi się prośba, wpisz nowy pomysł na postać. Oto kilka pomysłów:
- aktorka, która wynalazła technologię Wi-Fi
- ekscytujący szef kuchni,
- kluczowych graczy na wystawach światowych,
- Gdy agent zakończy pracę, sprawdź plik końcowy w katalogu
adk_multiagent_systems/movie_pitches. Powinien on teraz zawierać fabułę, raport o przychodach z kin i raport o obsadzie – wszystko w jednym dokumencie.
Podsumowanie sekcji
W tej sekcji dowiesz się, jak używać tych funkcji: ParallelAgent
ParallelAgent„Rozgałęzia się” i uruchamia wszystkie podrzędne agenty jednocześnie, a nie po kolei.- Jest to bardzo wydajne w przypadku zadań, które nie są od siebie zależne (np. wyszukiwanie informacji na 2 różne tematy).
- Wyniki działania agentów równoległych są „gromadzone” przez późniejszego agenta. W tym celu równolegli agenci zapisują swoją pracę w stanie sesji (za pomocą
output_key), a ostatni agent (np.file_writer) odczytuje te klucze.
13. Agenty niestandardowych przepływów pracy
Jeśli predefiniowane agenty przepływu pracy SequentialAgent, LoopAgent i ParallelAgent nie spełniają Twoich potrzeb, CustomAgent umożliwia wdrożenie nowej logiki przepływu pracy.
Możesz zdefiniować wzorce sterowania przepływem, warunkowego wykonywania lub zarządzania stanem między podrzędnymi agentami. Jest to przydatne w przypadku złożonych przepływów pracy, orkiestracji stanowych lub integrowania niestandardowej logiki biznesowej z warstwą orkiestracji platformy.
Tworzenie CustomAgent wykracza poza zakres tego modułu, ale warto wiedzieć, że taka funkcja istnieje, jeśli jej potrzebujesz.
14. Gratulacje!
Udało Ci się utworzyć zaawansowany system wielu agentów za pomocą pakietu Google Agent Development Kit (ADK). Przeszliśmy od prostej relacji między agentami nadrzędnym i podrzędnym do koordynowania złożonych, zautomatyzowanych przepływów pracy, które mogą wyszukiwać informacje, pisać i ulepszać projekt kreatywny.
Podsumowanie
W tym module:
- Uporządkowani agenci w hierarchicznym drzewie z relacjami między agentami nadrzędnymi i podrzędnymi.
- Kontrolowane przekazywanie połączeń między agentami, zarówno automatyczne (za pomocą funkcji
description), jak i jawne (za pomocą funkcjiinstruction). - użyto narzędzia do zapisania danych w słowniku
tool_context.state; - Użyto szablonu klucza (np.
{ PLOT_OUTLINE? }), aby odczytywać stan sesji i wskazywać agentowi, jak ma odpowiadać. - Wdrożono
SequentialAgent, aby utworzyć prosty przepływ pracy krok po kroku (wyszukiwanie –> pisanie –> zapisywanie). - Użyto
LoopAgentz agentemcritici narzędziemexit_loopdo utworzenia iteracyjnego cyklu ulepszania. - Użyto
ParallelAgentdo „rozdzielenia” niezależnych zadań (takich jak casting i badanie wyników kasowych) w celu ich równoczesnego wykonania.
Dalsze eksperymenty
Istnieje wiele sposobów na wykorzystanie zdobytej wiedzy. Oto kilka pomysłów:
- Dodaj więcej agentów: spróbuj dodać nowego agenta do
preproduction_teamParallelAgent. Możesz na przykład utworzyćmarketing_agent, który na podstawiePLOT_OUTLINEnapisze slogan filmu. - Dodaj więcej narzędzi: dodaj więcej narzędzi do
researcheragenta. Możesz utworzyć narzędzie, które korzysta z interfejsu Google Search API, aby znajdować informacje, których nie ma w Wikipedii. - Eksplorowanie
CustomAgent: w tym module znajdzieszCustomAgentdotyczące przepływów pracy, które nie pasują do standardowych szablonów. Spróbuj utworzyć taki, który np. warunkowo uruchamia agenta tylko wtedy, gdy w stanie sesji występuje określony klucz.