UI-Tools
Die adk-ui Crate ermΓΆglicht KI-Agenten, dynamisch reichhaltige BenutzeroberflΓ€chen durch Tool-Aufrufe zu generieren. Agenten kΓΆnnen Formulare, Karten, Warnmeldungen, Tabellen, Diagramme und mehr rendern β alles ΓΌber eine typsichere Rust API, die zu JSON fΓΌr die Frontend-Nutzung serialisiert wird.
Was Sie erstellen werden

SchlΓΌsselkonzepte:
- Formulare β Sammeln Sie Benutzereingaben mit verschiedenen Feldtypen
- Karten β Zeigen Sie Informationen mit AktionsschaltflΓ€chen an
- Tabellen β PrΓ€sentieren Sie strukturierte Daten in Zeilen/Spalten
- Diagramme β Visualisieren Sie Daten mit Balken-, Linien-, FlΓ€chen- und Kreisdiagrammen
- Warnmeldungen β Zeigen Sie Benachrichtigungen und Statusmeldungen an
- Modale Dialoge β BestΓ€tigungsdialoge und fokussierte Interaktionen
- Toasts β Kurze Statusbenachrichtigungen
Beispiel: Analyse-Dashboard

Beispiel: Registrierungsformular

Funktionsweise
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β STEP 1: User requests something β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β β
β User: "I want to register for an account" β
β β
β β β
β β
β ββββββββββββββββββββββββββββββββββββββββ β
β β AI AGENT (LLM) β β
β β "I should show a registration form" β β
β ββββββββββββββββββββββββββββββββββββββββ β
β β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β STEP 2: Agent calls render_form tool β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β β
β π Tool Call: render_form({ β
β title: "Registration", β
β fields: [ β
β {name: "email", type: "email"}, β
β {name: "password", type: "password"} β
β ] β
β }) β
β β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β STEP 3: Frontend renders the form β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β π Registration β β
β β ββββββββββββββββββββββββββββββββββββββββββββ β β
β β Email: [________________________] β β
β β Password: [________________________] β β
β β β β
β β [ Register ] β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β
β β
User sees an interactive form, fills it out, clicks Register β
β β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β STEP 4: Form submission sent back to agent β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β β
β π© Event: { β
β type: "form_submit", β
β data: { email: "user@example.com", password: "***" } β
β } β
β β
β Agent: "Great! I'll process your registration and show a success alert" β
β β
β π Tool Call: render_alert({ β
β title: "Registration Complete!", β
β variant: "success" β
β }) β
β β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
Γbersicht
UI tools ermΓΆglichen Agents, Folgendes zu tun:
- Benutzereingaben ΓΌber dynamische Formulare mit Textarea-UnterstΓΌtzung zu erfassen
- Informationen mit cards, alerts und notifications anzuzeigen
- Daten in Tabellen und interaktiven Charts (Recharts) darzustellen
- Fortschritts- und LadezustΓ€nde (spinner, skeleton) anzuzeigen
- Dashboard-Layouts mit mehreren components zu erstellen
- BenutzerbestΓ€tigung ΓΌber modals anzufordern
- toast notifications fΓΌr Statusaktualisierungen anzuzeigen
Schnellstart
FΓΌgen Sie dies Ihrer Cargo.toml hinzu:
[dependencies]
adk-rust = { version = "0.2.0", features = ["ui"] }
# Or use individual crates:
adk-ui = "0.2.0"
adk-agent = "0.2.0"
adk-model = "0.2.0"
Grundlegende Verwendung
use adk_rust::prelude::*;
use adk_rust::ui::UiToolset;
use std::sync::Arc;
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
let model = Arc::new(GeminiModel::from_env("gemini-2.0-flash")?);
// Get all 10 UI tools
let ui_tools = UiToolset::all_tools();
// Create AI agent with UI tools
let mut builder = LlmAgentBuilder::new("ui_agent")
.model(model)
.instruction(r#"
You are a helpful assistant that uses UI components to interact with users.
Use render_form for collecting information.
Use render_card for displaying results.
Use render_alert for notifications.
Use render_modal for confirmation dialogs.
Use render_toast for brief status messages.
"#);
for tool in ui_tools {
builder = builder.tool(tool);
}
let agent = builder.build()?;
Ok(())
}
VerfΓΌgbare Tools
render_form
Rendert interaktive Formulare zur Erfassung von Benutzereingaben.
{
"title": "Registration Form",
"description": "Create your account",
"fields": [
{"name": "username", "label": "Username", "type": "text", "required": true},
{"name": "email", "label": "Email", "type": "email", "required": true},
{"name": "password", "label": "Password", "type": "password", "required": true},
{"name": "newsletter", "label": "Subscribe to newsletter", "type": "switch"}
],
"submit_label": "Register"
}
Wird gerendert als:
βββββββββββββββββββββββββββββββββββββββββββββββββββ
β π Registration Form β
β Create your account β
β βββββββββββββββββββββββββββββββββββββββββββββ β
β β
β Username * β
β βββββββββββββββββββββββββββββββββββββββββββ β
β β β β
β βββββββββββββββββββββββββββββββββββββββββββ β
β β
β Email * β
β βββββββββββββββββββββββββββββββββββββββββββ β
β β β β
β βββββββββββββββββββββββββββββββββββββββββββ β
β β
β Password * β
β βββββββββββββββββββββββββββββββββββββββββββ β
β β β’β’β’β’β’β’β’β’ β β
β βββββββββββββββββββββββββββββββββββββββββββ β
β β
β Subscribe to newsletter [β] β
β β
β βββββββββββββββββββββββββββββββββββββββββββ β
β β Register β β
β βββββββββββββββββββββββββββββββββββββββββββ β
β β
βββββββββββββββββββββββββββββββββββββββββββββββββββ
Feldtypen: text, email, password, number, date, select, multiselect, switch, slider, textarea
render_card
Zeigt Informationskarten mit optionalen AktionsschaltflΓ€chen an.
{
"title": "Order Confirmed",
"description": "Order #12345",
"content": "Your order has been placed successfully. Expected delivery: Dec 15, 2025.",
"actions": [
{"label": "Track Order", "action_id": "track", "variant": "primary"},
{"label": "Cancel", "action_id": "cancel", "variant": "danger"}
]
}
SchaltflΓ€chenvarianten: primary, secondary, danger, ghost, outline
render_alert
Zeigt Benachrichtigungen und Statusmeldungen an.
{
"title": "Payment Successful",
"description": "Your payment of $99.00 has been processed.",
"variant": "success"
}
Varianten: info, success, warning, error
render_confirm
Fordert BenutzerbestΓ€tigung vor Aktionen an.
{
"title": "Delete Account",
"message": "Are you sure you want to delete your account? This action cannot be undone.",
"confirm_label": "Delete",
"cancel_label": "Keep Account",
"variant": "danger"
}
render_table
Zeigt tabellarische Daten an.
{
"title": "Recent Orders",
"columns": [
{"header": "Order ID", "accessor_key": "id"},
{"header": "Date", "accessor_key": "date"},
{"header": "Amount", "accessor_key": "amount"},
{"header": "Status", "accessor_key": "status"}
],
"data": [
{"id": "#12345", "date": "2025-12-10", "amount": "$99.00", "status": "Delivered"},
{"id": "#12346", "date": "2025-12-11", "amount": "$149.00", "status": "Shipped"}
]
}
render_chart
Erstellt Datenvisualisierungen.
{
"title": "Monthly Sales",
"chart_type": "bar",
"x_key": "month",
"y_keys": ["revenue", "profit"],
"data": [
{"month": "Jan", "revenue": 4000, "profit": 2400},
{"month": "Feb", "revenue": 3000, "profit": 1398},
{"month": "Mar", "revenue": 5000, "profit": 3800}
]
}
Diagrammtypen: bar, line, area, pie
render_progress
Zeigt den Aufgabenfortschritt mit optionalen Schritten an.
{
"title": "Installing Dependencies",
"value": 65,
"description": "Installing package 13 of 20...",
"steps": [
{"label": "Download", "completed": true},
{"label": "Extract", "completed": true},
{"label": "Install", "current": true},
{"label": "Configure", "completed": false}
]
}
render_layout
Erstellt Dashboard-Layouts mit mehreren Abschnitten.
{
"title": "System Status",
"description": "Current system health overview",
"sections": [
{
"title": "Services",
"type": "stats",
"stats": [
{"label": "API Server", "value": "Healthy", "status": "operational"},
{"label": "Database", "value": "Degraded", "status": "warning"},
{"label": "Cache", "value": "Down", "status": "error"}
]
},
{
"title": "Recent Errors",
"type": "table",
"columns": [{"header": "Time", "key": "time"}, {"header": "Error", "key": "error"}],
"rows": [{"time": "10:30", "error": "Connection timeout"}]
}
]
}
Abschnittstypen: stats, table, chart, alert, text
render_modal
Zeigt modale Dialoge fΓΌr BestΓ€tigungen oder fokussierte Interaktionen an.
{
"title": "Confirm Deletion",
"message": "Are you sure you want to delete this item? This action cannot be undone.",
"size": "medium",
"closable": true,
"confirm_label": "Delete",
"cancel_label": "Cancel",
"confirm_action": "delete_confirmed"
}
GrΓΆΓen: small, medium, large, full
render_toast
Zeigt kurze Toast-Benachrichtigungen fΓΌr Statusaktualisierungen an.
{
"message": "Settings saved successfully",
"variant": "success",
"duration": 5000,
"dismissible": true
}
Varianten: info, success, warning, error
Gefilterte Tools
WΓ€hlen Sie nur die Tools aus, die Ihr Agent benΓΆtigt:
let toolset = UiToolset::new()
.without_chart() // Diagramme deaktivieren
.without_table() // Tabellen deaktivieren
.without_progress() // Fortschritt deaktivieren
.without_modal() // Modals deaktivieren
.without_toast(); // Toasts deaktivieren
// Oder nur Formulare verwenden
let forms_only = UiToolset::forms_only();
Behandlung von UI Events
Wenn Benutzer mit der gerenderten BenutzeroberflΓ€che interagieren (Formulare absenden, SchaltflΓ€chen anklicken), werden Events an den Agent zurΓΌckgesendet:
use adk_ui::{UiEvent, UiEventType};
// Struktur von UiEvent
pub struct UiEvent {
pub event_type: UiEventType, // FormSubmit, ButtonClick, InputChange
pub action_id: Option<String>,
pub data: Option<HashMap<String, Value>>,
}
// In Nachricht fΓΌr den Agent umwandeln
let message = ui_event.to_message();
Streaming von UI Updates
FΓΌr Echtzeit-UI-Updates verwenden Sie UiUpdate, um Komponenten nach ID zu patchen:
use adk_ui::{UiUpdate, UiOperation};
let update = UiUpdate {
target_id: "progress-bar".to_string(),
operation: UiOperation::Patch,
payload: Some(Component::Progress(Progress {
id: Some("progress-bar".to_string()),
value: 75,
label: Some("75%".to_string()),
})),
};
Operationen: Replace, Patch, Append, Remove
Komponenten-Schema
Alle 28 Komponententypen unterstΓΌtzen optionale id-Felder fΓΌr Streaming-Updates:
Atome: Text, Button, Icon, Image, Badge Eingaben: TextInput, NumberInput, Select, MultiSelect, Switch, DateInput, Slider, Textarea Layouts: Stack, Grid, Card, Container, Divider, Tabs Daten: Table, List, KeyValue, CodeBlock Visualisierung: Chart (Balken, Linie, FlΓ€che, Kreis via Recharts) Feedback: Alert, Progress, Toast, Modal, Spinner, Skeleton
React Client
Eine Referenzimplementierung fΓΌr React wird bereitgestellt:
cd official_docs_examples/tools/ui_test
# UI-Server starten
cargo run --bin ui_server
# In einem anderen Terminal den React Client starten
cd ui_react_client
npm install && npm run dev -- --host
Der React Client umfasst:
- TypeScript-Typen, die dem Rust-Schema entsprechen
- Komponenten-Renderer fΓΌr alle 28 Typen
- Recharts-Integration fΓΌr interaktive Diagramme
- UnterstΓΌtzung fΓΌr Markdown-Rendering
- UnterstΓΌtzung fΓΌr den Dunkelmodus
- Handhabung von FormularΓΌbermittlungen
- Modal- und Toast-Komponenten
Architektur
βββββββββββββββ βββββββββββββββ
β Agent β ββ[render_* tool]βββ UiResponse β
β (LLM) β β (JSON) β
βββββββββββββββ ββββββββ¬βββββββ
β² β
β β SSE
β βΌ
β βββββββββββββββ
βββββββ UiEvent βββββββββββββ Client β
(user action) β (React) β
βββββββββββββββ
Beispiele
Drei Beispiele demonstrieren UI-Tools:
| Beispiel | Beschreibung | AusfΓΌhrungsbefehl |
|---|---|---|
ui_agent | Konsolen-Demo | cargo run --bin ui_agent |
ui_server | HTTP-Server mit SSE | cargo run --bin ui_server |
ui_react_client | React-Frontend | cd ui_react_client && npm run dev |
AusfΓΌhren von official_docs_examples/tools/ui_test/.
Beispiel-Prompts
Testen Sie die UI-Tools mit diesen Prompts:
# Forms
"I want to register for an account"
"Create a contact form"
"Create a feedback form with a comments textarea"
# Cards
"Show me my profile"
"Display a product card for a laptop"
# Alerts
"Show a success message"
"Display a warning about expiring session"
# Modals
"I want to delete my account" (shows confirmation modal)
"Show a confirmation dialog before submitting"
# Toasts
"Show a success toast notification"
"Display an error toast"
# Tables
"Show my recent orders"
"List all users"
# Charts
"Show monthly sales chart"
"Display traffic trends as a line chart"
"Show revenue breakdown as a pie chart"
# Progress & Loading
"Show upload progress at 75%"
"Display a loading spinner"
"Show skeleton loading state"
# Dashboards
"Show system status dashboard"
ZurΓΌck: β Browser-Tools | Weiter: MCP-Tools β