ADK Studio

Visuelle Entwicklungsumgebung zum Erstellen von KI-Agenten per Drag-and-drop.

Übersicht

ADK Studio bietet eine Low-Code-Oberfläche zum Entwerfen, Testen und Bereitstellen von KI-Agenten, die mit ADK-Rust erstellt wurden. Erstellen Sie komplexe Multi-Agenten-Workflows visuell und kompilieren Sie sie anschließend in produktionsreifen Rust-Code.

ADK Studio-Hauptoberfläche

Installation

# Install from crates.io (self-contained binary)
cargo install adk-studio

# Or build from source
cargo build --release -p adk-studio

Schnellstart

# Start the studio server
adk-studio

# Open in browser
open http://localhost:3000

CLI-Optionen

OptionBeschreibungStandard
--port, -pServer-Port3000
--host, -hBind-Adresse127.0.0.1
--dir, -dProjektverzeichnis~/.local/share/adk-studio/projects
--static, -sVerzeichnis zum Überschreiben statischer Dateien(eingebettet)
# Bind to all interfaces for remote access
adk-studio --host 0.0.0.0 --port 8080

# Custom projects directory
adk-studio --dir ./my-projects

Schritt-für-Schritt-Tutorial

Folgen Sie dieser Anleitung, um Ihren ersten KI-Agenten in ADK Studio zu erstellen.

Schritt 1: Neues Projekt erstellen

Klicken Sie oben rechts auf die Schaltfläche + Neues Projekt.

Neues Projekt erstellen

Geben Sie einen Namen für Ihr Projekt ein (z. B. „Demo-Projekt“) und klicken Sie auf Erstellen.

Schritt 2: Einen Agenten zur Arbeitsfläche hinzufügen

Die linke Seitenleiste enthält die Agentenpalette mit den verfügbaren Agententypen:

  • LLM Agent – Einzelner KI-Agent, der von einem Sprachmodell unterstützt wird
  • Sequenziell – Unteragenten der Reihe nach ausführen
  • Parallel – Unteragenten gleichzeitig ausführen
  • Schleife – Bis zur Beendigungsbedingung iterieren
  • Router – Anhand der Eingabe an Unteragenten weiterleiten

Unterhalb der Agentenpalette bietet die Aktionsknotenpalette 14 nicht auf LLM basierende programmgesteuerte Knoten für deterministische Vorgänge (HTTP-Anfragen, Datenbankabfragen, Verzweigungen, Schleifen usw.). Weitere Informationen finden Sie im Leitfaden zu Aktionsknoten.

Klicken Sie auf LLM Agent, um ihn zur Arbeitsfläche hinzuzufügen.

Agent auf der Arbeitsfläche

Schritt 3: Den Agenten konfigurieren

Wenn Sie einen Agenten auswählen, wird auf der rechten Seite das Eigenschaftenfenster angezeigt. Hier können Sie Folgendes konfigurieren:

  • Name – Bezeichner für den Agenten
  • Modell – LLM-Anbieter und -Modell (Gemini, OpenAI usw.)
  • Anweisungen – System-Prompt für den Agenten

Eigenschaftenfenster

Schritt 4: Tools zum Agenten hinzufügen

Scrollen Sie in der linken Seitenleiste nach unten, um die Tool-Palette zu finden:

  • Funktion – Benutzerdefinierte Rust-Funktion mit Code-Editor
  • MCP – Model Context Protocol-Server
  • Browser – 46 WebDriver-Automatisierungsaktionen
  • Google Search – Fundierte Websuche
  • Artefakt laden – Dateien in den Kontext laden

Klicken Sie auf ein Tool, um es zu Ihrem Agenten hinzuzufügen.

Agent mit Google-Suche-Tool

Schritt 5: Erstellen und testen

Klicken Sie auf Projekt erstellen, um Ihren Agenten zu kompilieren. Nach der Erstellung können Sie das Chat-Panel unten verwenden, um Ihren Agenten mit echten Gesprächen zu testen.

Chat-Panel

Der Chat unterstützt:

  • Live-Streaming-Antworten von SSE
  • Animationen bei der Agentenausführung
  • Ereignisverfolgungs-Panel zur Fehlerbehebung

Schritt 6: Generierten Code anzeigen

Klicken Sie auf Code anzeigen, um den produktionsbereiten Rust-Code zu sehen, der aus Ihrem visuellen Entwurf generiert wurde.

Ansicht des generierten Codes

Sie können diesen Code kopieren oder Kompilieren verwenden, um ein vollständiges Rust-Projekt zu generieren.


Funktionen

Agententypen

AgentBeschreibung
LLM AgentEinzelner Agent, betrieben von einem LLM
SequenziellUnteragenten der Reihe nach ausführen
ParallelUnteragenten gleichzeitig ausführen
LoopBis zur Abbruchbedingung iterieren
RouterUnteragenten basierend auf der Eingabe weiterleiten

Aktionsknoten

14 nicht-LLM-programmatische Knoten für deterministische Workflow-Operationen. Ausführliche Informationen finden Sie im Leitfaden zu Aktionsknoten.

Workflow mit Aktionsknoten

KnotenBeschreibung
Trigger 🎯Einstiegspunkt des Workflows (manuell, Webhook, Zeitplan, Ereignis)
HTTP 🌐HTTP-Anfragen an externe APIs stellen
Set 📝Workflowstatusvariablen definieren und bearbeiten
Transform ⚙️Daten mit Ausdrücken oder integrierten Operationen transformieren
Switch 🔀Bedingte Verzweigung auf Grundlage von Bedingungen
Loop 🔄Arrays durchlaufen oder Operationen wiederholen
Zusammenführen 🔗Mehrere Zweige wieder zu einem einzigen Ablauf zusammenführen
Warten ⏱️Workflow für eine bestimmte Dauer oder Bedingung pausieren
Code 💻Benutzerdefiniertes JavaScript in einer abgeschotteten Laufzeitumgebung ausführen
Datenbank 🗄️Datenbankoperationen (PostgreSQL, MySQL, SQLite, MongoDB, Redis)
E-Mail 📧Senden über SMTP oder Überwachung über IMAP
Benachrichtigung 🔔An Slack, Discord, Teams oder Webhooks senden
RSS 📡RSS/Atom-Feeds überwachen
Datei 📁Dateioperationen auf lokalem oder Cloud-Speicher

Auslöser

Workflows beginnen mit einem Trigger-Knoten. Ausführliche Informationen finden Sie im Leitfaden zu Auslösern.

Eigenschaftenbereich des Auslösers

AuslöserBeschreibung
ManuellVom Benutzer über die Chateingabe initiiert
WebhookHTTP-Endpunkt mit optionaler Authentifizierung
ZeitplanCron-basierte Zeitplanung mit Zeitzone
EreignisEreignisse externer Systeme mit JSONPath-Filterung

Tool-Typen

ToolBeschreibung
FunctionBenutzerdefinierte Rust-Funktion mit Code-Editor
MCPModel Context Protocol-Server
Browser46 WebDriver-Automatisierungsaktionen
Google-SucheKontextbasierte Websuche
Artefakt ladenDateien in den Kontext laden

Echtzeit-Chat

Testen Sie Agents direkt im Studio:

  • Live-Streaming-Antworten von SSE
  • Animationen der Agent-Ausführung
  • Ereignisverfolgungsbereich zum Debuggen
  • Persistenz des Sitzungs-Speichers

Codegenerierung

Visuelle Entwürfe in produktionsreifen Code umwandeln:

  1. Code anzeigen – Generierten Rust-Code mit Syntaxhervorhebung in der Vorschau anzeigen
  2. Kompilieren – Vollständiges Rust-Projekt generieren
  3. Erstellen – In eine ausführbare Datei kompilieren und die Ausgabe in Echtzeit anzeigen
  4. Ausführen – Den erstellten Agent ausführen

Die Schaltfläche „Erstellen“ wird automatisch angezeigt, wenn sich Ihr Workflow seit dem letzten Erstellen geändert hat.

Codegenerierung für Aktionsknoten

Aktionsknoten werden zusammen mit LLM-Agents in produktionsreifen Rust-Code kompiliert. Abhängigkeiten werden automatisch erkannt und dem generierten Cargo.toml hinzugefügt.

KnotenCrateWas es erzeugt
HTTPreqwestAsynchrone HTTP-Anfragen mit Authentifizierung, Headern, Body, JSONPath-Extraktion
Datenbanksqlx / mongodb / redisVerbindungspools, parametrisierte Abfragen, Redis-Befehle
E-Maillettre / imapSMTP senden mit TLS/Authentifizierung/CC/BCC; IMAP-Überwachung mit Suchfiltern
Codeboa_engineEingebettete JavaScript-Ausführung mit Graphzustand als input-Objekt
SetzennativVariablenzuweisung (Literal, Ausdruck, Geheimnis)
TransformierennativZuordnen, filtern, sortieren, reduzieren, abflachen, gruppieren, auswählen, zusammenführen, Vorlage
ZusammenführennativBranch-Kombination (waitAll, waitAny, append)

Alle Aktionsknoten unterstützen die Interpolation von {{variable}} und erhalten automatisch die Ausgaben der Vorgängerknoten.

Unterstützte Datenbanken

DatenbankTreiberFunktionen
PostgreSQLsqlx (postgres)Asynchroner Pool, parametrisierte Abfragen, Zuordnung von Zeilen zu JSON
MySQLsqlx (mysql)Asynchroner Pool, parametrisierte Abfragen, Zuordnung von Zeilen zu JSON
SQLitesqlx (sqlite)Asynchroner Pool, parametrisierte Abfragen, Zeilen-zu-JSON-Zuordnung
MongoDBmongodbNativer BSON-Treiber, Such-, Einfüge-, Aktualisierungs- und Löschvorgänge
RedisredisGET-, SET-, DEL-, HGET-, HSET-, LPUSH- und LRANGE-Befehle

Architektur

┌─────────────────────────────────────────────────────────────┐
│                     ADK Studio UI                           │
│  ┌─────────────┐  ┌─────────────┐  ┌─────────────────────┐ │
│  │   Palette   │  │   Canvas    │  │   Properties        │ │
│  │  - Agents   │  │  ReactFlow  │  │  - Name             │ │
│  │  - Tools    │  │  Workflow   │  │  - Model            │ │
│  │             │  │  Designer   │  │  - Instructions     │ │
│  └─────────────┘  └─────────────┘  └─────────────────────┘ │
└─────────────────────────────────────────────────────────────┘
                              │
                              ▼ HTTP/SSE
┌─────────────────────────────────────────────────────────────┐
│                    ADK Studio Server                        │
│  ┌─────────────┐  ┌─────────────┐  ┌─────────────────────┐ │
│  │   Routes    │  │   Codegen   │  │   Storage           │ │
│  │  /api/*     │  │  Rust code  │  │  Projects           │ │
│  │  /chat      │  │  generation │  │  File-based         │ │
│  └─────────────┘  └─────────────┘  └─────────────────────┘ │
└─────────────────────────────────────────────────────────────┘
                              │
                              ▼ Build
┌─────────────────────────────────────────────────────────────┐
│                   Generated Rust Project                    │
│  ┌─────────────────────────────────────────────────────┐   │
│  │  Cargo.toml + src/main.rs                           │   │
│  │  Uses: adk-rust, adk-agent, adk-model, etc.        │   │
│  └─────────────────────────────────────────────────────┘   │
└─────────────────────────────────────────────────────────────┘

API Endpunkte

Projekte

EndpunktMethodeBeschreibung
/api/projectsGETAlle Projekte auflisten
/api/projectsPOSTNeues Projekt erstellen
/api/projects/:idGETProjektdetails abrufen
/api/projects/:idPUTProjekt aktualisieren
/api/projects/:idDELETEProjekt löschen

Codegenerierung

EndpunktMethodeBeschreibung
/api/projects/:id/codegenPOSTRust-Code generieren
/api/projects/:id/buildPOSTProjekt kompilieren
/api/projects/:id/runPOSTGebaute ausführbare Datei ausführen

Chat

EndpunktMethodeBeschreibung
/api/chatPOSTNachricht senden (SSE-Stream)

Auslöser

EndpunktMethodeBeschreibung
/api/projects/:id/webhook/*pathPOST, GETWebhook-Auslöser (asynchron)
/api/projects/:id/webhook-exec/*pathPOSTWebhook-Auslöser (synchron, wartet auf das Ergebnis)
/api/projects/:id/webhook-eventsGETSSE-Stream für Webhook-Benachrichtigungen
/api/projects/:id/eventsPOSTEreignisauslöser
/api/sessions/:id/resumePOSTUnterbrochenen Workflow fortsetzen (HITL)

Umgebungsvariablen

VariableBeschreibungErforderlich
GOOGLE_API_KEYGemini API-SchlüsselFür Gemini-Modelle
GEMINI_API_KEYGemini API-Schlüssel (Alternative)Für Gemini-Modelle
OPENAI_API_KEYOpenAI API-SchlüsselFür OpenAI-Modelle
ANTHROPIC_API_KEYAnthropic API-SchlüsselFür Claude-Modelle
DEEPSEEK_API_KEYDeepSeek API-SchlüsselFür DeepSeek-Modelle
GROQ_API_KEYGroq API-SchlüsselFür Groq-Modelle
OLLAMA_HOSTOllama-Server URL (Standard: http://localhost:11434)Für Ollama-Modelle
ADK_DEV_MODELokale Workspace-Abhängigkeiten verwendenNein
RUST_LOGProtokollierungsstufeNein (Standard: info)

Hinweis: Sie benötigen nur den API-Schlüssel für die Provider, die Ihre Agents verwenden. ADK Studio erkennt den Provider automatisch anhand des Modellnamens und generiert den korrekten Code.

Struktur des generierten Codes

my-project/
├── Cargo.toml
└── src/
    └── main.rs

Der generierte Code passt sich an die in Ihrem Projekt verwendeten Provider an. ADK Studio erkennt den Provider anhand des Modellnamens jedes Agents und generiert die korrekten Imports, die API-Schlüsselauflösung und die Modellkonstruktoren.

Beispiel für generierten main.rs-Code (Gemini):

use adk_model::gemini::GeminiModel;
// ...

let gemini_api_key = std::env::var("GOOGLE_API_KEY")
    .or_else(|_| std::env::var("GEMINI_API_KEY"))
    .expect("GOOGLE_API_KEY or GEMINI_API_KEY must be set");

let model = Arc::new(GeminiModel::new(&gemini_api_key, "gemini-3.7-flash")?);

Beispiel mit OpenAI:

use adk_model::openai::{OpenAIClient, OpenAIConfig};
// ...

let openai_api_key = std::env::var("OPENAI_API_KEY")
    .expect("OPENAI_API_KEY must be set");

let model = Arc::new(OpenAIClient::new(OpenAIConfig::new(&openai_api_key, "gpt-5.6-terra"))?);

Beispiel mit Ollama (lokal, ohne API-Schlüssel):

use adk_model::ollama::{OllamaModel, OllamaConfig};
// ...

let model = Arc::new(OllamaModel::new(OllamaConfig::new("llama3.2"))?);

Der generierte Cargo.toml enthält automatisch die korrekten adk-model-Feature-Flags:

# Only Gemini
adk-model = { version = "2.1.0", default-features = false, features = ["gemini"] }

# Mixed providers (e.g., Gemini + Anthropic)
adk-model = { version = "2.1.0", default-features = false, features = ["gemini", "anthropic"] }

# Ollama only (no API key needed)
adk-model = { version = "2.1.0", default-features = false, features = ["ollama"] }

Generierter Code mit Aktionsknoten

Wenn Ihr Workflow Aktionsknoten enthält, verwendet der generierte Code adk-graph für die Workflow-Orchestrierung mit FunctionNode-Closures:

use adk_graph::prelude::*;

// HTTP action node → reqwest call
let http_node = FunctionNode::new("fetch_data", |ctx| async move {
    let client = reqwest::Client::new();
    let resp = client.get("https://api.example.com/data")
        .bearer_auth(&ctx.get("API_TOKEN").unwrap_or_default())
        .send().await
        .map_err(|e| GraphError::NodeExecutionFailed {
            node: "fetch_data".into(),
            message: e.to_string(),
        })?;
    let body: serde_json::Value = resp.json().await?;
    Ok(NodeOutput::new().with_update("apiData", body))
});

// Code action node → boa_engine JS execution
let code_node = FunctionNode::new("process", |ctx| async move {
    let mut js_ctx = boa_engine::Context::default();
    // Graph state injected as global `input` object
    // User code executed in thread-isolated sandbox
    Ok(NodeOutput::new().with_update("result", output))
});

Automatisch erkannte Abhängigkeiten werden zum generierten Cargo.toml hinzugefügt (reqwest, sqlx, mongodb, redis, lettre, imap, boa_engine).

Vorlagen

Studio enthält vorgefertigte Vorlagen:

  • Einfacher Assistent – Einfacher LLM-Agent
  • Recherche-Agent – Agent mit Google Search
  • Support-Router – Multi-Agent-Routing
  • Code-Assistent – Agent mit Code-Tools

Teamzusammenarbeit: Repository-lokale Projekte

Standardmäßig speichert ADK Studio Projekte in einem benutzerlokalen Verzeichnis (~/.local/share/adk-studio/projects unter Linux, ~/Library/Application Support/adk-studio/projects unter macOS). Dies funktioniert gut für die individuelle Nutzung, aber Teams, die Studio-Projekte zusammen mit ihrem Quellcode versionieren und teilen möchten, können stattdessen ein repository-lokales Projektverzeichnis verwenden.

Speichern Sie Projekte im .adk-studio/projects-Verzeichnis im Stammverzeichnis Ihres Repositorys:

my-repo/
├── .adk-studio/
│   └── projects/       # Studio project JSON files
├── src/
├── Cargo.toml
└── .gitignore

Starten Sie Studio mit dem repository-lokalen Verzeichnis:

adk-studio --dir ./.adk-studio/projects

Hinweise zu .gitignore

Entscheide anhand deines Workflows, was du committen möchtest:

# Option A: Version-control project definitions, ignore build artifacts
.adk-studio/projects/*/build/
.adk-studio/projects/*/target/

# Option B: Ignore all Studio data (treat as local-only)
.adk-studio/

Option A wird für Teams empfohlen — damit könnt ihr Agent-Entwürfe teilen und gleichzeitig verhindern, dass kompilierte Ausgaben in die Versionsverwaltung gelangen.

Tipps

  • Jedes Teammitglied startet Studio mit demselben Flag --dir, um an gemeinsam genutzten Projekten zu arbeiten.
  • Projektdateien JSON sind die maßgebliche Quelle; generierter Rust-Code kann daraus erneut generiert werden.
  • Der benutzerlokale Standardpfad bleibt unverändert — wenn --dir weggelassen wird, wird weiterhin der Systemstandard verwendet.

Bewährte Vorgehensweisen

VorgehensweiseBeschreibung
Einfach beginnenMit einem einzelnen LLM-Agenten beginnen und Komplexität hinzufügen
Häufig testenDas Chatfenster verwenden, um das Verhalten zu validieren
Code überprüfenGenerierten Code vor der Bereitstellung prüfen
Projekte versionierenProjekte für die Zusammenarbeit im Team in .adk-studio/projects speichern
Vorlagen verwendenFür gängige Muster mit Vorlagen beginnen

Vorherige: ← Memory | Nächste: Action Nodes →

ADK Studio - ADK-Rust Dokumentation | ADK-Rust