Erstellen von agentenbasierten Workflows in einer App mit Cloud-Backend und ADK

  • PublicPublic
  • 29 Sep, 2026
Erstellen von agentenbasierten Workflows in einer App mit Cloud-Backend und ADK

Manche Aufgaben sind zu komplex, um sie in einer einzigen Sitzung auf einem Gerät abzuschließen. Eine komplette Reise aus einer Hand zu buchen bedeutet, die Flugzeiten abzustimmen, Hotelzimmer auszuwählen, Museumstickets zu reservieren und Restaurants zu planen. Führt man einen solchen mehrstufigen Prozess direkt auf dem Telefon aus, besteht das Risiko, den Fortschritt zu verlieren, wenn die App geschlossen wird, und das Jonglieren mit vielen Schritten und API-Schlüsseln auf einem mobilen Gerät wird schnell unpraktisch. Für solche langwierigen Arbeitsabläufe ist ein eigener Self-hosted-Backend die bessere Wahl: Er führt die Buchungs-Agenten im Hintergrund aus, während die Android-App mit der Sitzung verbunden bleibt, den Fortschritt anzeigt und den Nutzer nur dann um Eingaben bittet, wenn es wirklich nötig ist.

Die Grundlage bildet das Agent Development Kit (ADK). Im Python-Beispiel wird ein spezialisierter Agent definiert, flight_agent über Agent(name="Flight Booker", model="gemini-3.1-flash-lite",...) mit zwei Funktionstools: search_flights(destination, date) und reserve_flight(flight_time). Bitte beachten Sie, dass bei reserve_flight festgelegt ist require_confirmation=True, daher pausiert ADK und wartet auf eine ausdrückliche Nutzerbestätigung, bevor es diesen unumkehrbaren Schritt ausführt. Der Agent wird ausgeführt über InMemoryRunner, wo run_async(user_id, session_id) treibt die Schleife an. ADK übernimmt die Ausführung selbst — es verfolgt den Gesprächskontext, leitet Nachrichten zwischen Nutzer und Modell weiter und ruft die registrierten Tools auf, wenn das Modell sie anfordert —, sodass Sie nur die prozedurale Logik schreiben müssen, während das Framework die Orchestrierung übernimmt.

Um Updates vom Backend in Echtzeit an das Gerät zu streamen, verwendet der Server AG-UI — ein bidirektionales Transportprotokoll, das die Nachrichtentypen zwischen Agenten und UI-Clients standardisiert. Der Agent kann den Client über Lebenszyklus-Ereignisse, Textnachrichten, Tool-Aufrufe und Zustandsänderungen benachrichtigen, während der Client Nutzernachrichten, Tool-Ergebnisse und benutzerdefinierte Aktionsereignisse zurücksendet. Auf dem Server liefert AG-UI Updates als Server-Sent Events (zum Beispiel event: TEXT_MESSAGE_CONTENT, das ein JSON-Delta trägt). Auf Android lauscht ein Kotlin-SDK auf diesen Stream und bildet die Payloads auf typsichere Client-Events ab: HttpAgent wird konfiguriert über HttpAgentConfig, RunAgentInput trägt den Thread und UserMessageund runAgentObservable(input).collect { ... } Sie können anhand von TextMessageStartEvent, TextMessageContentEvent und TextMessageEndEvent.

Отрисовка только этих текстовых событий даёт простого чат-бота. Чтобы показывать интерактивные компоненты нативно, A2UI позволяет агентам описывать элементы интерфейса динамически. Клиент объявляет каталог поддерживаемых компонентов, а сервер присылает JSON с раскладкой и свойствами — например, поверхность Flight Reservation, содержащую InteractiveOptionPicker with a prompt, options such as "10:00 AM" and "2:00 PM", and a confirm button. On the backend, the ADK A2UI integration uses an A2uiSchemaManagerto compile component JSON schemas and layout instructions into the system prompt via generate_system_prompt(...), — так модель узнаёт точную структуру, которую она должна выдавать, чтобы получались валидные A2UI-Payloads, die der Client rendern kann.

Auf dem Client beginnt das Hinzufügen von A2UI mit Gradle-Abhängigkeiten wie androidx.a2ui:a2ui-model, androidx.a2ui.compose:compose-runtime, compose-ui und androidx.compose.material3:material3-a2ui — alle Versionen 1.0.0-alpha01Die Klasse jeder Komponente aus dem Katalog bildet JSON-Eigenschaften auf eine Composable aus Jetpack Compose ab, und ein benutzerdefinierter A2uiCatalog, der mit einer catalogIdverbindet ihn mit der Serverdefinition. Für Standardelemente — Text, Schaltflächen, Kontrollkästchen sowie Datums- und Zeitauswähler — liefert materialA2uiBasicCatalogV1(...)fertige Material-3-Implementierungen, ohne eigenen Code zu schreiben. BookingAssistantViewModel füttert Nachrichten in A2uiMessageProcessor, dessen StateFlow activeSurfaces der Bildschirm rendert mit dem Composable A2uiSurface, das die Zustandsbeobachtung, Ladeindikatoren, Fehlerbehandlung und animierte Übergänge übernimmt. Beide Seiten müssen dieselbe Katalogdefinitions-ID verwenden; wenn Sie Eigenschaften hinzufügen oder ändern, müssen Sie die Versionsnummer erhöhen und die entsprechende Komponentenklasse in Kotlin aktualisieren, um Parsing-Fehler zu vermeiden.