1. Wprowadzenie
Przegląd
W tym module nauczysz się aranżować złożone systemy wieloagentowe za pomocą pakietu 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 wieloagentowe:
- 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 wykorzystuje „pokój scenarzystów” złożony z automatycznych agentów (takich jak badacz, scenarzysta i krytyk), którzy współpracują w pętli, aby stworzyć pełny film.
Czego się nauczysz
- Jak tworzyć relacje między agentem nadrzędnym 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ć ikony
SequentialAgentw przypadku szczegółowych przepływów pracy. - Jak używać
LoopAgentdo tworzenia cykli iteracyjnego udoskonalania. - Jak używać
ParallelAgentdo równoczesnego uruchamiania niezależnych działań.
Wymagania wstępne
- Znajomość Pythona i interfejsów wiersza poleceń.
- Dostęp do projektu Google Cloud z włączonymi płatnościami.
- Zainstalowane narzędzia CLI:
gcloud,uv.
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życiem jednego, monolitycznego prompta:
- Prostsza konstrukcja: łatwiej jest zaprojektować i zorganizować przepływ małych, wyspecjalizowanych agentów niż opracować 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 stworzeni do jednego przepływu pracy mogą być łatwo wykorzystywani w innych.
Hierarchiczne drzewo agentów

W ADK agenci są uporządkowani w strukturze drzewa. Ta hierarchia ma kluczowe znaczenie dla kontrolowania przebiegu rozmowy, ponieważ ogranicza, który agent może „przekazać” rozmowę innemu agentowi. 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 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 dwóch agentów o podobnych opisach.
Cała struktura zaczyna się od root_agent. Ten agent działa jako nadrzędny i może mieć co najmniej 1 podrzędnego agenta, który z kolei może być nadrzędny w stosunku do własnych podrzędnych agentów, tworząc drzewo.
3. Konfigurowanie projektu
Konto Google
Jeśli nie masz jeszcze osobistego konta Google, musisz utworzyć konto Google.
Używaj konta osobistego zamiast konta służbowego lub szkolnego.
Logowanie się w konsoli Google Cloud
Zaloguj się w konsoli Google Cloud, korzystając z osobistego konta Google.
Włącz płatności
Wykorzystaj środki w Google Cloud (opcjonalnie)
Aby przeprowadzić te warsztaty, musisz mieć konto rozliczeniowe z pewną kwotą środków. Aby rozpocząć, użyj środków z banera u góry tego przewodnika. Jeśli masz już połączenie z kontem rozliczeniowym, możesz pominąć ten krok.
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 konsoli Google Cloud.
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 laboratorium, 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ć wszystkie identyfikatory 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 Gemini Enterprise Agent Platform API i wchodzić w interakcje z modelem Gemini, musisz włączyć interfejs API w projekcie Google Cloud.
- W terminalu włącz interfejs API:
gcloud services enable aiplatform.googleapis.com
Wprowadzenie do pakietu Google GenAI SDK dla Pythona
Aby wchodzić w interakcje z modelami hostowanymi na platformie Gemini Enterprise Agent z poziomu aplikacji w Pythonie, użyjesz pakietu Google GenAI 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 Google GenAI SDK dla Pythona znajdziesz tutaj: Dokumentacja pakietu Google GenAI SDK.
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 devrel-demos-multiagent-lab--depth 1klonuje tylko najnowszą wersję, co jest szybsze. - W terminalu przenieś folder modułu do katalogu głównego i zmień jego nazwę, aby pasowała do oczekiwanej struktury modułu.
mv devrel-demos-multiagent-lab/ai-ml/build-multiagent-systems-with-adk/adk_multiagent_systems ~ - W terminalu przejdź do odpowiedniego katalogu roboczego na potrzeby tego laboratorium (
adk_multiagent_systems).cd ~/adk_multiagent_systems
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:
adk_multiagent_systems/. Kliknij OK.
Powinna 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 dalszych działań.
Aktywowanie środowiska wirtualnego
- W terminalu utwórz i aktywuj środowisko wirtualne za pomocą polecenia
uv. Dzięki temu zależności projektu nie będą powodować konfliktów z systemowym Pythonem ani innymi projektami.uv venv source .venv/bin/activate - W terminalu zainstaluj
google-adki inne zależności z plikurequirements.txt:uv pip install -r requirements.txt
Konfigurowanie zmiennych środowiskowych
- Jesteś już w katalogu
adk_multiagent_systems. W terminalu utwórz plik.env, w którym będą przechowywane zmienne środowiskowe:cloudshell edit .env - Wklej w otwartym w edytorze pliku
.envten tekst:GOOGLE_GENAI_USE_ENTERPRISE=true GOOGLE_CLOUD_PROJECT="[YOUR-PROJECT-ID]" GOOGLE_CLOUD_LOCATION=global MODEL="gemini-3.5-flash" - Zastąp
[YOUR-PROJECT-ID]rzeczywistym identyfikatorem 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 wyglądać tak:cp .env parent_and_subagents/.env cp .env workflow_agents/.env
7. Poznaj transfery między agentami nadrzędnymi, sub-agentami i agentami równorzędnymi
Rozmowa zawsze zaczyna się od root_agent. Domyślnie agent nadrzędny używa description subagentów, aby zdecydować, kiedy przekazać rozmowę. Możesz też wyraźnie kierować tymi transferami w instruction rodzica, korzystając z name subagentów.
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 subagenta przekazać rozmowę. Początkowo opiera się ona tylko nadescriptionpodagentów.travel_brainstormer: pomaga użytkownikowi w przeprowadzaniu burzy mózgów na temat miejsc docelowych.attractions_planner: pomaga użytkownikowi w tworzeniu listy atrakcji w danym kraju.
- Ustaw
travel_brainstormeriattractions_plannerjako podagenty agentaroot_agent, dodając ten wiersz do tworzenia agentaroot_agent:sub_agents=[travel_brainstormer, attractions_planner] - W terminalu porozmawiaj na czacie z agentem:
cd ~/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 agentowi 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ło kontrolę tylko na podstawiedescriptionpodwykonawcy. - W terminalu w wierszu poleceń
user:wpiszexiti naciśnij ENTER, aby zakończyć rozmowę. - Teraz przejdźmy do konkretów. W
agent.pydodaj te elementy doinstructionwroot_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. Zauważ, że przekierowaliśmy Cię do[travel_brainstormer]: Okay! I can help you brainstorm some countries for travel...
travel_brainstormer, czyli równorzędnego partneraattractions_planner. Jest to domyślnie dozwolone. - W odpowiedzi na prośbę użytkownika wpisz
exit, aby zakończyć sesję.
Podsumowanie
W tej sekcji poznaliśmy podstawy hierarchii agentów i przebiegu rozmowy:
- Rozmowa zawsze zaczyna się od
root_agent. - Agent nadrzędny może automatycznie przekierowywać połączenia do agenta podrzędnego na podstawie
description. - Możesz wyraźnie kontrolować ten proces, przyznając rodzicowi
instructionmożliwość przekazania sprawy do podrzędnego agenta za pomocąname. - Domyślnie agenty mogą przekazywać zgłoszenia do swoich
peeragentów (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 stanu sesji. Ten stan jest dostępny dla wszystkich agentów, dzięki czemu idealnie nadaje się do przekazywania informacji między nimi lub utrzymywania danych (np. listy) przez całą rozmowę.
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 wartość
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 wartość
- Dodaj narzędzie do agenta
attractions_planner, dodając parametrtools:tools=[save_attractions_to_state] - Dodaj te punkty do istniejącego
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 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 Aby wyświetlić interfejs internetowy w nowej karcie, kliknij przycisk Podgląd w przeglądarce i wybierz Zmień port.

- 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 obsługi klienta się z Tobą przywita, 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ź podobna do tej: OK, zapisałem Sfinksa na Twojej liście…
- Kliknij pole narzędzia do odpowiedzi (oznaczone symbolem zaznaczenia), aby wyświetlić zdarzenie 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:
- Zapisywanie stanu: możesz zapisywać dane 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 stanu 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 na karcie Stan.
9. Agenty przepływu pracy
Do tej pory omówiliśmy, jak agent nadrzędny przekazuje rozmowę do agenta podrzędnego, a następnie czeka na użytkownika. Agenci przepływu pracy działają inaczej: wykonują swoje subagenty jeden po drugim w zautomatyzowanym przepływie, bez czekania na dane wejściowe użytkownika.
Jest to idealne rozwiązanie w przypadku zautomatyzowanych, wieloetapowych zadań, 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 dalszej części tego laboratorium skupimy się na tworzeniu systemu wieloagentowego przy użyciu tych 3 agentów przepływu pracy.
Stworzysz agenta, który opracuje dokument z propozycją nowego filmu o postaci historycznej. Agenci zajmą się wyszukiwaniem informacji, pisaniem iteracyjnym i generowaniem raportów.
Ostatecznie Twój system będzie wyglądać tak:

Będziesz budować ten system krok po kroku, zaczynając od najprostszego przepływu pracy.
10. Tworzenie systemu wieloagentowego za pomocą klasy SequentialAgent
SequentialAgent to agent przepływu pracy, który wykonuje swoje podrzędne agenty w prostej, liniowej sekwencji. Każdy agent na liście sub_agents jest uruchamiany po kolei. 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 od pomysłów na filmy, którego teraz utworzysz.
Pierwsza wersja będzie miała taką strukturę:

root_agent(greeter) powita użytkownika i zapyta o temat filmu.- Następnie połączenie zostanie przekazane do
SequentialAgento nazwiefilm_concept_team, które:- Uruchom agenta
researcher, 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 agenta
Zacznijmy.
- 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, co jest sposobem, w jaki funkcjeresearcheriscreenwriterprzekazują wyniki swojej pracy. - Wypróbuj agenta. W terminalu uruchom interfejs internetowy z włączonym odświeżaniem na żywo:
cd ~/adk_multiagent_systems adk web --reload_agents - W terminalu Cloud Shell kliknij Aby wyświetlić interfejs internetowy w nowej karcie, kliknij przycisk Podgląd w przeglądarce i wybierz Zmień port.

- 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. Odpowiegreeter. - Gdy pojawi się prośba, wpisz imię i nazwisko postaci historycznej. Możesz użyć jednej z tych opcji lub własnej:
- Zhang Zhongjing
- Adrianna Kowalska
- Marek Aureliusz
- Teraz
SequentialAgentprzejmie kontrolę. Nie zobaczysz żadnych wiadomości 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 wydarzenia.
- Widok zdarzeń przedstawia wizualny wykres drzewa agentów. Możesz zobaczyć, jak
greeterwywołałfilm_concept_team, który następnie wywołał po kolei każdego ze swoich podagentów.
- Możesz kliknąć karty Żądanie i Odpowiedź przy dowolnym agencie na wykresie, aby sprawdzić dokładne przekazane dane, w tym stan sesji.
Podsumowanie sekcji
W tej sekcji dowiesz się, jak korzystać z 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 „proces”, ponieważ użytkownik rozmawia z
root_agent, który następnie przekazuje pracę do wykonaniaSequentialAgent. - Podagenci w sekwencji używają 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 warunku, np. osiągnięcia liczby max_iterations lub wywołania wbudowanego narzędzia exit_loop przez subagenta.
Przydaje się w przypadku zadań, które wymagają iteracyjnego dopracowywania. Dodasz ten znak LoopAgent, aby utworzyć „pokój scenarzystów” dla agenta, który będzie promować Twój pomysł na film. 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”), ponieważ może on przeprowadzać badania i ulepszać pomysły.

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, wywołuje funkcjęexit_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ą pracować w pętli.
Wklej ten kod nad definicją agentafilm_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, ) - 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 deweloperskiego ADK i w prawym górnym rogu kliknij + Nowa sesja.
- Rozpocznij nową rozmowę z:
hello - Gdy pojawi się odpowiedni komunikat, podaj agentowi 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 deweloperskim, aby zobaczyć strukturę pętli.
Podsumowanie sekcji
W tej sekcji dowiesz się, jak używać:LoopAgent
LoopAgentto agent przepływu pracy, który powtarza sekwencję subagentów, tworząc „wewnętrzną pętlę” dla zadań iteracyjnych.- Agenci w pętli używają stanu sesji, aby przekazywać sobie pracę (np.
PLOT_OUTLINE) i opinie (np.CRITICAL_FEEDBACK) w kolejnych przebiegach. - Pętla może zostać zatrzymana po osiągnięciu
max_iterationslimitu lub 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 agenta będzie wyglądać tak:
greeter(root) rozpoczyna czat.- Przekierowuje do
film_concept_team(SequentialAgent), która działa:writers_room(LoopAgent) do utworzenia wykresu.- Nowa funkcja
preproduction_team(ParallelAgent) umożliwia wyszukiwanie informacji o wynikach kasowych i obsadzie w tym samym czasie. 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 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_agentswfilm_concept_teamSequentialAgent, aby uwzględnić 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 plikufile_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.
- Aby rozpocząć rozmowę, wpisz
hello. - Gdy pojawi się prośba, wpisz nowy pomysł na postać. Oto kilka pomysłów:
- aktorka, która wynalazła technologię Wi-Fi.
- ciekawy 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 w jednym dokumencie.
Podsumowanie sekcji
W tej sekcji dowiesz się, jak używać:ParallelAgent
ParallelAgent„Rozgałęzia się” i uruchamia wszystkie podrzędne agenty w tym samym czasie, 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 równoległych agentów są „gromadzone” przez późniejszego agenta. Odbywa się to przez zapisywanie przez agentów równoległych wyników pracy w stanie sesji (za pomocą
output_key) i odczytywanie tych kluczy przez agenta końcowego (np.file_writer).
13. Agenty niestandardowych przepływów pracy
Jeśli predefiniowani agenci roboczy 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 wieloagentowy za pomocą pakietu Google Agent Development Kit (ADK). Przeszliśmy od prostej relacji agenta nadrzędnego i podrzędnego do koordynowania złożonych, zautomatyzowanych przepływów pracy, które mogą wyszukiwać informacje, pisać i ulepszać projekty kreatywne.
Podsumowanie
W tym module:
- Uporządkowane agenty w hierarchicznym drzewie z relacjami między agentem nadrzędnym a podrzędnym.
- 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 szablonów kluczy (np.
{ PLOT_OUTLINE? }) do odczytywania stanu sesji i kierowania promptem agenta. - Wdrożono
SequentialAgent, aby utworzyć prosty przepływ pracy krok po kroku (badanie –> pisanie –> zapisywanie). - Użyto
LoopAgentzcriticagentem iexit_loopnarzędziem do 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 eksperymentowanie
Możesz rozwijać swoją wiedzę na wiele sposobów. 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 agenta
researcher. 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.