Przykładowy kod źródłowy pozwalający na:
-
Skonfigurowanie własnej instancji modelu Bielik w oparciu o Ollama
-
Skonfigurowanie prostych systemów agentowych przy wykorzystaniu Agent Development Kit
-
Uruchomienie obu powyższych serwisów na Cloud Run
Poniższy diagram przedstawia architekturę rozwiązania, które będziemy budować podczas warsztatów.
Note
Warto zaznaczyć, że komponenty takie jak ADK, Ollama oraz model Bielik mogą być z powodzeniem uruchamiane lokalnie na Twoim komputerze (Local Environment). Jednak na potrzeby warsztatu, aby zapewnić wszystkim uczestnikom dostęp do odpowiedniej mocy obliczeniowej (GPU), wykorzystamy środowisko chmurowe Google Cloud Platform i usługę Cloud Run.
graph TD
subgraph Local_Environment ["💻 Local Environment (Twój komputer)"]
style Local_Environment fill:#e6f3ff,stroke:#333,stroke-width:2px
User[("👤 Użytkownik")]
Browser["🌐 Przeglądarka WWW"]
Terminal["⌨️ Terminal"]
end
subgraph GCP_Workshop ["☁️ Google Cloud Platform (Warsztat)"]
style GCP_Workshop fill:#fff0e6,stroke:#333,stroke-width:2px
subgraph Cloud_Run ["🚀 Cloud Run (Serverless)"]
style Cloud_Run fill:#e6ffe6,stroke:#333,stroke-width:2px
ADK_Service["🤖 ADK Service<br/>(Agent Development Kit)"]
Ollama_Service["🦙 Ollama Service<br/>(Inference Engine)"]
subgraph GPU_Acceleration ["⚡ GPU Acceleration"]
style GPU_Acceleration fill:#f9f9f9,stroke:#666,stroke-dasharray: 5 5
Bielik_Model["🦅 Model Bielik<br/>(LLM)"]
end
end
Artifact_Registry["📦 Artifact Registry<br/>(Docker Images)"]
Gemini_Model["✨ Gemini 2.5 Flash<br/>(Multimodal LLM)"]
end
User --> Browser
User --> Terminal
Browser -- "HTTPS" --> ADK_Service
Terminal -- "gcloud CLI" --> Cloud_Run
ADK_Service -- "API Call" --> Ollama_Service
ADK_Service -- "API Call" --> Gemini_Model
Ollama_Service -- "Load & Run" --> Bielik_Model
Cloud_Run -. "Pull Images" .-> Artifact_Registry
linkStyle 3 stroke:#0066cc,stroke-width:2px;
linkStyle 4 stroke:#0066cc,stroke-width:2px;
linkStyle 5 stroke:#0066cc,stroke-width:2px;
Note
Nie potrzebujesz karty kredytowej ani płatności — otrzymasz 10 dolarów darmowych środków. Zajmie Ci to mniej niż 2 minuty, wystarczy wpisać swoje imię i nazwisko oraz zaakceptować środki.
Krok 1: Włącz konto billingowe, dzięki uzyskanym środkom
- Załóż konto rozliczeniowe z 10 dolarami kredytu, który będzie potrzebny do wdrożenia. Upewnij się, że masz konto Gmail.
2 Wybierz konto z domeny @gmail.com i naciśnij przycisk: Dalej
3 Po poprawnym zalogowaniu pojawi się Twoje konto z domeny @gmail.com, naciśnij przycisk: Click here to access your credits
4 Otworzy się nowa zakładka w przeglądarce
-
Zweryfikuj uzupełnione pola: Imię, Nazwisko
-
W polu: Adres e-mail konta pojawi się adres Twojego konta w domenie @gmail.com
-
Pole: Kod kuponu - PROSZĘ NIE EDYTOWAĆ !
-
Naciśnij przycisk: Zaakceptuj i kontynuuj
5 W polu Konto rozliczeniowe pojawi się informacja o treści Google Cloud Platform Trial Billing... oznacza to, że środki zostały aktywowane na Twoim koncie @gmail.com oraz konto bilingowe zostało poprawnie aktywowane bez konieczności podawania karty kredytowej - masz środki na dalszą część warsztatu.
6 Zmieńmy nazwę na bardziej przyjazną, wybierz pozycję: Zarządzanie kontem
7 Kliknij w ikonkę: Edycji
pojawi się okno z informacją: Zmień nazwę konta rozliczeniowego w polu Nazwa podaj:
eskadra-bielik-misja18 W polu Konto rozliczeniowe nowa nazwa została poprawnie zmieniona.
9 W celu weryfikacji przyznanych środków wybierz pozycje: Środki i zobacz w tabeli przyznane środki kolumnę o tytule Stan, która wskazuje na Dostępny.
10 Gratulacje, możesz przejść do następnego kroku warsztatu.
Krok 2: Stwórz nowy projekt Google Cloud Platform i powiąż z utworzonym kontem biligowym
1 Powróć na główny ekran Google Cloud Platform.
2 Po wybraniu pojawi się okienko z informacją o projektach
3 Pojawi się formularz z informacją o nowym projekcie, gdzie nadamy własną nazwę projektu
4 W pozycji: Nazwa projektu podajemy naszą własną nazwę:
eskadra-bielik5 Pojawi się informacja o utworzeniu projektu
6 W celu weryfikacji czy utworzone konto zostało powiązane z kontem bilinowym, na którym mamy uzyskane środki kredytowe
7 Pojawiła się informacja o Twoich kontach rozliczeniowych
8 Jeżeli w pozycji Konto rozliczeniowe widzisz nazwę eskadra-bielik-misja1, to oznacza, że wszystkie kroki wcześniejsze zostały wykonane poprawnie
9 Powróć na główny ekran Google Cloud Platform.
10 Wybierz z listy projekt o nazwie: eskadra-bielik
11 Wracamy na główną stronę tym razem mamy już uzupełnione informacje na jakim projekcie pracujemy
-
Zobacz w opisie: Pracujesz w: jest informacja, że pracujemy na projkcie: eskadra-bielik
-
W Numer projektu i Identyfiaktor projektu znajdują się Twoje uniklane dane, gdzie pomoc Google Cloud Platform w tej sposób identyfikuje Twój projekt
12 Gratulacje, możesz przejść do następnego kroku warsztatu.
Krok 3: Otwórz terminal Cloud Shell ([dokumentacja](https://cloud.google.com/shell/docs))
1 Na górnym pasku Google Cloud Platform.
2 Po uruchomieniu terminala:
3 Terminal CLI poprawnie uruchomiony
Krok 4: Sklonuj repozytorium z przykładowym kodem i przejdź do nowo utworzonego katalogu
1 Skopiuj przygotowane komendy do terminala CLI i naciśnij na klawaiturze klawisz ENTER
git clone https://github.com/prositas/eskadra-bielik-misja1
cd eskadra-bielik-misja1- Wynik poprawnie wykonanego kroku (repozytorium cały czas żyje, więc wartości mogą być prezentowane inne):
......@cloudshell:~/test (eskadra-bielik-......)$ git clone https://github.com/Legard777/eskadra-bielik-misja1 cd eskadra-bielik-misja1 Cloning into 'eskadra-bielik-misja1'... remote: Enumerating objects: 337, done. remote: Counting objects: 100% (85/85), done. remote: Compressing objects: 100% (58/58), done. remote: Total 337 (delta 75), reused 27 (delta 27), pack-reused 252 (from 2) Receiving objects: 100% (337/337), 7.23 MiB | 28.68 MiB/s, done. Resolving deltas: 100% (173/173), done. ......@cloudshell:~/test/eskadra-bielik-misja1 (eskadra-bielik-......)$
Krok 5: Zmień nazwę pliku `.env.sample` na `.env`
1 Skopiuj przygotowane komendy do terminala CLI i naciśnij na klawaiturze klawisz ENTER
mv .env.sample .env
ls -la .envKrok 6: Skonfiguruj zmienne środowiskowe
W tym kroku uzupełnisz identyfikator warsztatów. Pozostałe parametry są już wstępnie skonfigurowane.
- Otwórz plik
.envw edytorze Cloud Shell, kopiując w terminalu poniższe polecenie:
cloudshell open-workspace . | cloudshell edit-file .env- W otwartym edytorze znajdź zmienną
BIELIK_EVENT_ID:
-
Usuń znak #, aby zmienna była widoczna
-
Wpisz swój kod (zgodny z OnRamp Credits) podany przez trenera podczas warsztatów.
- Zamień tekst na podany przez trenera
- Przykład prawidłowej zmiany dla fikcyjnego kodu przedstawiony jest poniżej
-
Twój plik powinien wyglądać następująco:
BIELIK_EVENT_ID="<IDENTYFIKATOR>" GOOGLE_CLOUD_LOCATION="europe-west1" BIELIK_SERVICE_NAME="ollama-bielik-v3" BIELIK_MODEL_NAME="SpeakLeash/bielik-4.5b-v3.0-instruct:Q8_0"
- Zapisz plik (File > Save lub skrót
Ctrl+S).
Opis zmiennych (informacyjnie):
BIELIK_EVENT_ID– (Do edycji) Unikalny identyfikator warsztatów podany przez trenera podczas warsztatów.GOOGLE_CLOUD_LOCATION– Region Google Cloud (domyślnie:europe-west1, Belgia).BIELIK_SERVICE_NAME– Nazwa usługi w Cloud Run.BIELIK_MODEL_NAME– Wersja modelu Bielik (domyślnie:v3.0-instruct:Q8_0).
Important
Zmiana wersji modelu
Jeżeli zdecydujesz się zmienić BIELIK_MODEL_NAME na inną wersję niż domyślna, pamiętaj, aby zaktualizować tę informację również w pliku ollama-bielik/Dockerfile:
ENV MODEL SpeakLeash/bielik-4.5b-v3.0-instruct:Q8_0Krok 7: Wczytaj zmienne środowiskowe korzystając z podręcznego skryptu
1 Kliknij w przycisk z napisem: Otwórz terminal, aby powrócić do linii komend
2 Skopiuj przygotowane komendy do terminala CLI i naciśnij na klawiaturze klawisz ENTER
source reload-env.sh-
Ustal domyślne konto serwisowe dla wybranego projektu
default service accountgcloud builds get-default-service-account
-
Poniższa komenda stworzy nową usługę w Cloud Run o nazwie takiej jak wartość zmiennej
$BIELIK_SERVICE_NAME. Na podstawie definicji wollama-bielik/Dockerfilenardzędziegcloudstworzy odpowiedni kontener, skonfiguruje usługę Ollama oraz wczyta odpowiednią wersję modelu Bielik.
Caution
Tworzenie modelu może potrwać od 8-10 min.
Warning
Twoja sesja terminala musi być aktywna !
Tip
Odpowiedz twierdząco, jeżeli system spyta o włączenie odpowiednich API oraz stworzenie rejestru artefaktów.
-
Skopiuj przygotowane komendy do terminala CLI i naciśnij na klawiaturze klawisz ENTER.
gcloud run deploy $BIELIK_SERVICE_NAME --source ollama-bielik/ --region $GOOGLE_CLOUD_LOCATION --concurrency 7 --cpu 8 --set-env-vars OLLAMA_NUM_PARALLEL=4 --gpu 1 --gpu-type nvidia-l4 --max-instances 1 --memory 16Gi --allow-unauthenticated --no-cpu-throttling --no-gpu-zonal-redundancy --timeout 600 --labels dev-tutorial=codelab-dos-$BIELIK_EVENT_ID
-
Na zadane pytanie, odpowiedz Y.
The following APIs are not enabled on project [eskadra-bielik-.....]: artifactregistry.googleapis.com cloudbuild.googleapis.com run.googleapis.com Do you want enable these APIs to continue (this will take a few minutes)? (Y/n)? -
Na kolejne zadane pytanie, odpowiedz Y.
Enabling APIs on project [eskadra-bielik-.....]... Operation "operations/............." finished successfully. Deploying from source requires an Artifact Registry Docker repository to store built containers. A repository named [cloud-run-source-deploy] in region [europe-west1] will be created. Do you want to continue (Y/n)?
-
Poprawne wykonanie zakończy się poniższym komunikatem:
Building using Dockerfile and deploying container to Cloud Run service [ollama-bielik-v3] in project [eskadra-bielik-.....] region [europe-west1] Building and deploying new service... Validating Service...done Uploading sources...done Building Container... Logs are available at [https://console.cloud.google.com/cloud-build/builds;region=europe-west1/3....]....done Setting IAM Policy...done Creating Revision...done Routing traffic...done Done. Service [ollama-bielik-v3] revision [ollama-bielik-v3-.....] has been deployed and is serving 100 percent of traffic. Service URL: https://ollama-bielik-v3-......europe-west1.run.app
-
Jeżeli pojawił się błąd z poniższą informacją:
Building using Dockerfile and deploying container to Cloud Run service [ollama-bielik-v3] in project [eskadra-bielik-.....] region [europe-west1] ERROR: (gcloud.run.deploy) spec.template.metadata.annotations[autoscaling.knative.dev/maxScale]: You do not have quota for using GPUs without zonal redundancy. Learn more about GPU zonal redundancy: g.co/cloudrun/gpu-redundancy-help To request quota: g.co/cloudrun/gpu-quota
Tip
Uruchom poniższą komendę bez GPU (będzie wolniej)...
gcloud run deploy $BIELIK_SERVICE_NAME --source ollama-bielik/ --region $GOOGLE_CLOUD_LOCATION --concurrency 7 --cpu 8 --set-env-vars OLLAMA_NUM_PARALLEL=4 --max-instances 1 --memory 16Gi --allow-unauthenticated --no-cpu-throttling --timeout 600 --labels dev-tutorial=xyz-$BIELIK_EVENT_IDCaution
Flaga --allow-unauthenticated udostępnia usługę publicznie w internecie i każdy kto zna URL, może zaczać z niej korzystać. W środowisku produkcyjnym zazwyczaj trzeba tę flagę usunąć i odpowiednio skonfigurować reguły dostępu.
-
Uruchom poniższą komendę, aby sprawdzić pod jakim URL jest dostępny Bielik
gcloud run services describe $BIELIK_SERVICE_NAME --region=$GOOGLE_CLOUD_LOCATION --format='value(status.url)'
-
Skopiuj uzyskany adres do "schowka"
-
Wykonaj te same czynności co w Kroku 6
- Możesz też kliknąć bezpośrednio w przycisk: Otwórz edytor
- Odnajdź pozycję # OLLAMA_API_BASE= (linia nr 27)
- Usuń znak #
- Po znaku = wklej skopiowany adres usługi Cloud Run ollama-bielik-v3....
- Przypisz powyższy URL do zmiennej środowiskowej
OLLAMA_API_BASEw pliku.envi następnie wczytaj zmienne środowiskowe ponownie:source reload-env.sh
Tip
Czy to faktycznie działa?
-
Sprawdź w Google Cloud console czy nowy serwis jest już dostępny
-
Sprawdź czy otwierając URL w przeglądarce zobaczysz informację:
Ollama is running -
Sprawdź przez API jakie modele są dostępne lokalnie na serwerze Ollama
curl "${OLLAMA_API_BASE}/api/tags" | jq .
- odpowiedź powinna wyglądać jak poniżej:
{ "models": [ { "name": "SpeakLeash/bielik-4.5b-v3.0-instruct:Q8_0", "model": "SpeakLeash/bielik-4.5b-v3.0-instruct:Q8_0", "modified_at": ".........", "size": 5061216212, "digest": "..............", "details": { "parent_model": "", "format": "gguf", "family": "llama", "families": [ "llama" ], "parameter_size": "4.8B", "quantization_level": "Q8_0" } } ] }- Jak to rozumieć...:
Wersja:
Q8_0(High Quality) | Rodzina:Llama| Parametry:4.8B- 📦 Format:
GGUF - 💾 Rozmiar: 4.71 GB
- 📅 Data: .....
Digest:
........ -
Wyślij zapytanie przez API
curl "${OLLAMA_API_BASE}/api/generate" -d "{ \"model\": \"$BIELIK_MODEL_NAME\", \"prompt\": \"Kto zabił smoka wawelskiego?\", \"stream\": false }" | jq .response
-
Uruchom 2-3 razy i zobacz jaką uzyskasz odpowiedź
-
Poniżej przykładowa odpowiedź (Ty możesz mieć inną...):
{ "model": "SpeakLeash/bielik-4.5b-v3.0-instruct:Q8_0", "created_at": "......", "response": "Smok wawelski został zabity przez szewca Skubę, który podrzucił mu barana wypchanego siarką i prochem. Gdy smok połknął baranka, wybuchł i zabił potwora.", "done": true, "done_reason": "stop", "context": [ 1, 31981, 31957, 11308, 102, 25726, 336, 102, 2910, 31957, 31977, 6583, 31894, 31981, 31957, 6788, 102, 25726, 336, 102, 2910, 31957, 31977, 20, 17, 20, 17, 31037, 17218, 6871, 298, 787, 18058, 632, 31956, 31981, 31957, 27399, 31897, 102, 2910, 31957, 31977, 31981, 31957, 11308, 102, 25726, 336, 102, 2910, 31957, 31977, 14550, 23924, 507, 31981, 31957, 6788, 102, 25726, 336, 102, 2910, 31957, 31977, 20, 17, 20, 17, 31926, 434, 31900, 787, 18058, 423, 1109, 3332, 339, 481, 937, 16243, 10170, 1279, 31909, 493, 392, 13198, 555, 17494, 268, 3585, 6193, 365, 27062, 704, 285, 884, 23257, 31917, 1645, 6871, 31900, 3174, 3479, 17494, 2652, 31909, 6320, 31907, 285, 17218, 19153, 31888, 31917 ], "total_duration": 10994891361, "load_duration": 64652723, "prompt_eval_count": 71, "prompt_eval_duration": 231194690, "eval_count": 54, "eval_duration": 10674966594 }-
Wyjaśnienie...
Model:
SpeakLeash/bielik-4.5b-v3.0-instruct:Q8_0Status: ✅ Zakończono pomyślnie (Reason:stop)Smok wawelski został zabity przez szewca Skubę, który podrzucił mu barana wypchanego siarką i prochem. Gdy smok połknął baranka, wybuchł i zabił potwora.
Poniższa tabela przedstawia szczegółowe czasy i prędkość generowania odpowiedzi (przeliczone z nanosekund).
Metryka Wartość Opis Całkowity czas 10.99 s Czas od zapytania do końca odpowiedzi. Czas ładowania 0.06 s Czas wczytania modelu do pamięci. Przetwarzanie promptu 0.23 s Czas "zrozumienia" Twojego pytania. Generowanie odp. 10.67 s Czas pisania odpowiedzi przez AI. Liczba tokenów (we) 71 Długość Twojego zapytania (prompt). Liczba tokenów (wy) 54 Długość odpowiedzi modelu. Prędkość (TPS) ~5.06 t/s Średnia prędkość generowania (tokens per second).
-
-
Skonfiguruj swój własny klucz Gemini API
-
Stwórz lub skopiuj istniejący Gemini API key z Google AI Studio.
1 Wybierz pozycję: Get API Key
2 Wybierz pozycję: Project
3 Kliknij w przycisk: + Create a new project
4 Podaj nazwę swojego projektu w pozycji: Name your project:
eskadra-bielik-misja1
5 Kliknij w przycisk: Create project
6 Kliknij w kolumnie Keys przy nazwie eskadra-bielik-misja1
7 Kliknij w przycisk: Create API key
8 Wybierz w pozycji: Choose an imported project utworzony projekt o nazwie eskadra-bielik-misja1
9 Podaj w pozycji: Name you key nazwę swojego klucza eskadra-bielik-misja1-klucz-1
10 Kliknij w przycisk: Create key, aby utworzyć klucz
11 Kliknij w nowo utworzony klucz. Pojawi się okienko z informacją o nowym kluczu: API key details
12 Kliknij w przycisk: Copy key, aby skopiować klucz do schowka
-
Dodaj wartość klucza ze swojego Gemini API key jako wartość zmiennej
GOOGLE_API_KEYw pliku.env
GOOGLE_API_KEY=TWÓJ_KLUCZ
-
-
Wczytaj zmienne środowiskowe ponownie
source reload-env.sh -
Przejdź do katalogu z agentami
cd adk-agents -
Stwórz i aktywuj wirtualne środowisko Python
python -m venv .venv source .venv/bin/activate -
Zainstaluj wymagane komponenty
pip install -r requirements.txt
Ten prosty system agentowy, działający jedynie w oparciu o model Bielik, jest prostym przykładem wykorzystania LLM Agents oraz Workflow Agents dostępnych w ADK. System ma na celu generowanie artykułów dla różnych grup docelowych (dzieci, kadra zarządzająca) w oparciu o temat zasugerowany przez użytkownika.
content_creator_agent- Główny, sekwencyjny agent, uruchamia pod-agentów jeden po drugimtopic_identifier_agent- Agent LLM odpowiedzialny za zidentyfikowanie tematu którym interesuje się użytkownik.topic_expander_agent- Agent LLM odpowiedzialny za rozwinięcie tematu. Generuje listę ciekawych faktów związanych z tematem.authoring_agent- Agent równoległy - uruchamia pod-agentów równolegle. Zawiera dwóch pod-agentów, po jednym na każdą grupę docelowąchildren_audience_agent- Agent LLM odpowiedzialny za tworzenie treści skierowanych do dzieci.executive_audience_agent- Agent LLM odpowiedzialny za tworzenie treści skierowanych do kadry zarządzającej.silesian_audience_agent- Agent LLM odpowiedzialny za tworzenie treści po śląsku.
graph TD
subgraph content_creator_agent [content_creator_agent:SequentialAgent]
direction LR
topic_identifier_agent("topic_identifier_agent:Agent") --> topic_expander_agent("topic_expander_agent:Agent");
topic_expander_agent --> authoring_agent;
end
subgraph authoring_agent [authoring_agent:ParallelAgent]
direction TB
children_audience_agent("children_audience_agent:Agent");
executive_audience_agent("executive_audience_agent:Agent");
silesian_audience_agent("silesian_audience_agent:Agent");
end
-
Upewnij się, że jesteś w katalogu
adk_agentsoraz że wszystkie zmienne środowiskowe są załadowane -
Uruchom agenta w konsoli Cloud Shell i rozpocznij interakcję
adk run content_creator/
Ten hybrydowy system agentowy, działający w oparciu o modele Gemini i Bielik, jest przykładem wykorzystania Agentów LLM (LLM Agents), funkcji-jako-narzędzi (Function Tools) oraz agentów-jako-narzędzi (Agent-as-a-tTool) dostępnych w ADK.
System ma na celu pełnienie roli międzynarodowego przewodnika kulinarnego, który deleguje zadania do wyspecjalizowanych pod-agentów lub narzędzi w zależności od kraju, o który pyta użytkownik.
culinary_guide_agent- Główny agent, który komunikuje się z użytkownikiem w języku angielskim. Jego zadaniem jest zrozumienie prośby o rekomendacje kulinarne, identyfikacja kraju i preferencji dietetycznych, a następnie delegowanie zadania do odpowiednich narzędzi.polish_expert_tool- Narzędzie typu AgentTool, które opakowuje agenta polish_culinary_expert_agent, umożliwiając głównemu agentowi korzystanie z jego wyspecjalizowanych zdolności.polish_culinary_expert_agent- Wyspecjalizowany Agent LLM oparty na modelu Bielik, ekspert w dziedzinie kuchni polskiej. Przyjmuje zapytania i odpowiada wyłącznie w języku polskim.german_food_tool- Proste narzędzie oparte na funkcji Pythona, które dostarcza rekomendacji kulinarnych dla Niemiec w oparciu o zdefiniowaną logikę.
graph TD
subgraph Culinary Recommendation System
direction TB
%% Define the Root Agent
A[fa:fa-robot culinary_guide_agent]
%% Define the Tools
subgraph polish_expert_tool
direction TB
B[fa:fa-wrench AgentTool] --> C[fa:fa-robot polish_culinary_agent]
end
D[fa:fa-wrench german_food_tool]
%% Define the relationships
A --> B
A --> D
end
-
Upewnij się, że jesteś w katalogu
adk_agentsoraz że wszystkie zmienne środowiskowe są załadowane -
Uruchom agenta w konsoli Cloud Shell i rozpocznij interakcję
adk run culinary_guide_agent/
Ten kompleksowy system agentowy, działający w oparciu o model Bielik, demonstruje zaawansowane możliwości planowania i orkiestracji workflow w ADK. System wykorzystuje zarówno Sequential Agents jak i Parallel Agents do tworzenia szczegółowych, spersonalizowanych planów podróży po Polsce.
System ma na celu stworzenie kompletnego, gotowego do użycia planu wycieczki na podstawie preferencji użytkownika. Showcaseuje możliwości Bielika w dziedzinie lokalnej wiedzy o Polsce, kulturze i praktycznych aspektach turystyki.
Architektura systemu:
polish_travel_planner_agent- Główny agent sekwencyjny, który orchestruje cały proces planowania podróżydestination_analyzer_agent- Agent LLM analizujący preferencje użytkownika (góry vs morze, historia vs przyroda, itp.) i sugerujący odpowiednie destynacje w Polsceresearch_team- Agent równoległy koordynujący pracę trzech wyspecjalizowanych ekspertów, którzy działają jednocześnie:history_expert_agent- Ekspert od polskiej historii i zabytków, dostarczający informacji o najważniejszych miejscach historycznychpractical_guide_agent- Praktyczny przewodnik zajmujący się logistyką: transport, noclegi, gastronomia i kosztycultural_activities_agent- Znawca kultury lokalnej, festiwali, tradycji i aktywności na świeżym powietrzu
itinerary_creator_agent- Agent syntetyzujący wszystkie zebrane informacje w szczegółowy, dzień-po-dniu plan podróży z budżetem i praktycznymi wskazówkami
graph TD
subgraph polish_travel_planner_agent [polish_travel_planner_agent:SequentialAgent]
direction LR
A[destination_analyzer_agent:Agent] --> B[research_team:ParallelAgent]
B --> C[itinerary_creator_agent:Agent]
end
subgraph research_team [research_team:ParallelAgent]
direction TB
D[history_expert_agent:Agent]
E[practical_guide_agent:Agent]
F[cultural_activities_agent:Agent]
end
B -.-> D
B -.-> E
B -.-> F
Przykładowe zapytania do przetestowania:
- "Chcę pojechać w góry na weekend, interesuje mnie historia i dobre jedzenie"
- "Planuję rodzinną wycieczkę do Krakowa na 3 dni"
- "Szukam spokojnego miejsca nad morzem, lubię przyrodę i długie spacery"
- "Chciałbym zwiedzić Wrocław, interesuję się architekturą i życiem nocnym"
-
Upewnij się, że jesteś w katalogu
adk_agentsoraz że wszystkie zmienne środowiskowe są załadowane -
Uruchom agenta w konsoli Cloud Shell i rozpocznij interakcję
adk run polish_travel_planner/
Ten hybrydowy system agentowy, działający w oparciu o modele Gemini i Bielik, jest przykładem zastosowania Agent-as-Tool oraz Function Tools w kontekście prawno-biznesowym. System demonstruje inteligentny routing zapytań i specjalizację agentów w polskim prawie konsumenckim.
System ma na celu pomoc konsumentom w nawigacji przez proces reklamacji i zwrotów zamówień, dostarczając precyzyjnych instrukcji zgodnych z polskim prawem konsumenckim. Główny agent (Gemini) klasyfikuje intencję użytkownika i deleguje zadanie do odpowiedniego eksperta (Bielik).
Architektura systemu:
polish_consumer_law_agent- Główny agent (Gemini) odpowiedzialny za wstępną analizę zapytania użytkownika, klasyfikację intencji (reklamacja vs zwrot vs inne) i delegowanie do odpowiedniego ekspertapolish_complaints_law_expert_agent- Wyspecjalizowany agent (Bielik) będący ekspertem od polskiego prawa reklamacyjnego. Dostarcza szczegółowych instrukcji krok po kroku dla procesu reklamacji uszkodzonych lub wadliwych produktówpolish_complaints_law_expert_tool- Narzędzie AgentTool opakowujące agenta eksperta od reklamacjipolish_return_policies_expert_agent- Wyspecjalizowany agent (Bielik) będący ekspertem od polskich przepisów dotyczących zwrotów. Wyjaśnia prawa konsumenta związane z 14-dniowym terminem odstąpienia od umowypolish_return_policies_expert_tool- Narzędzie AgentTool opakowujące agenta eksperta od zwrotówno_return_complain_possible_response- Prosta funkcja Pythona jako Function Tool, która informuje użytkownika, gdy reklamacja lub zwrot nie jest możliwy
graph TD
subgraph Consumer Law System
direction TB
A[fa:fa-robot polish_consumer_law_agent<br/>Gemini - Router]
subgraph Tools
direction TB
B[fa:fa-wrench polish_complaints_law_expert_tool<br/>AgentTool]
C[fa:fa-wrench polish_return_policies_expert_tool<br/>AgentTool]
D[fa:fa-wrench no_return_complain_possible_response<br/>Function Tool]
end
E[fa:fa-robot polish_complaints_law_expert_agent<br/>Bielik - Reklamacje]
F[fa:fa-robot polish_return_policies_expert_agent<br/>Bielik - Zwroty]
A --> B
A --> C
A --> D
B --> E
C --> F
end
Co demonstruje ten system:
- ✅ Hybrydowa architektura (Gemini jako router, Bielik jako ekspert domeny)
- ✅ Agent-as-Tool pattern (2 wyspecjalizowane agenty jako narzędzia)
- ✅ Function Tools (prosta funkcja Pythona jako narzędzie)
- ✅ Inteligentny routing zapytań na podstawie intencji użytkownika
- ✅ Specjalizacja agentów (każdy ekspert zna swoją domenę prawa)
- ✅ Lokalna wiedza Bielika (polskie prawo konsumenckie)
- ✅ Praktyczne zastosowanie biznesowe (customer support)
Przykładowe zapytania do przetestowania:
- "Otrzymałem uszkodzony produkt. Jak złożyć reklamację?"
- "Chcę zwrócić zamówienie, które nie spełnia moich oczekiwań"
- "Produkt działa, ale nie pasuje. Czy mogę go zwrócić?"
- "W jakim terminie muszę zgłosić reklamację?"
Scenariusze użycia:
- E-commerce customer support
- Automatyzacja obsługi reklamacji i zwrotów
- Edukacja konsumentów o ich prawach
- First-line support przed eskalacją do specjalisty
-
Upewnij się, że jesteś w katalogu
adk_agentsoraz że wszystkie zmienne środowiskowe są załadowane -
Uruchom agenta w konsoli Cloud Shell i rozpocznij interakcję
adk run order_compliant_agent/
- Upewnij się, że jesteś w katalogu
adk_agentsoraz że wszystkie zmienne środowiskowe są załadowane - Uruchom środowisko ADK Web
adk web
- Zmień port w Web View (jeżeli potrzeba, zazwyczaj jest to port 8000)
- Zaakceptuj zmiany poprzez: Change and Preview
- Z rozwijanego menu po lewej stronie ekranu wybierz system z którym chcesz pracować
- Upewnij się, że jesteś w katalogu
adk_agentsoraz że wszystkie zmienne środowiskowe są załadowanegcloud run deploy adk-agents --source . --region $GOOGLE_CLOUD_LOCATION --allow-unauthenticated --set-env-vars GOOGLE_CLOUD_LOCATION=$GOOGLE_CLOUD_LOCATION --set-env-vars OLLAMA_API_BASE=$OLLAMA_API_BASE --set-env-vars GOOGLE_API_KEY=$GOOGLE_API_KEY --labels dev-tutorial=codelab-dos-$BIELIK_EVENT_ID
Caution
Flaga --allow-unauthenticated udostępnia usługę publicznie w internecie i każdy kto zna URL, może zaczać z niej korzystać. W środowisku produkcyjnym zazwyczaj trzeba tę flagę usunąć i odpowiednio skonfigurować reguły dostępu.
Tip
Alternatywnie, możesz uruchomić powyższą komendę korzystając ze skryptu deploy-adk-agents.sh
./deploy-adk-agents.sh- Narzędzie
gcloudstworzy kontener na podstawie konfiguracji zawartej wadk-agents/Dockerfilei uruchomi usługę w Cloud Run, podając URL pod którym serwis będzie dostępny - Wywołaj otrzymany URL w przeglądarce WWW aby mieć dostęp do środowiska ADK Web
- Przejdź do instrukcji






























