Server API
Der ADK-Rust-Server stellt eine REST API zum Ausführen von Agenten, Verwalten von Sitzungen und Zugreifen auf Artefakte bereit. Wenn Sie Ihren Agenten mithilfe des Launchers im Servermodus bereitstellen, stellt er diese Endpunkte zusammen mit einer Weboberfläche bereit.
Übersicht
Der Server basiert auf Axum und bietet:
- REST API: HTTP-Endpunkte für die Ausführung von Agenten und die Sitzungsverwaltung
- Server-Sent Events (SSE): Echtzeit-Streaming von Agentenantworten
- Weboberfläche: Interaktive browserbasierte Benutzeroberfläche
- CORS-Unterstützung: Cross-Origin-Anfragen aktiviert
- Telemetrie: Integrierte Beobachtbarkeit mit tracing
ServerConfig stellt außerdem eine Weiterleitung auf Runner-Ebene für langlebige
Bereitstellungen bereit:
let config = ServerConfig::new(agent_loader, session_service)
.with_compaction(compaction_config)
.with_context_cache(context_cache_config, cache_capable_model);
Starten des Servers
Verwenden Sie den Launcher, um den Server zu starten:
use adk_rust::prelude::*;
use adk_rust::Launcher;
use std::sync::Arc;
#[tokio::main]
async fn main() -> Result<()> {
let api_key = std::env::var("GOOGLE_API_KEY")?;
let model = Arc::new(GeminiModel::new(&api_key, "gemini-3.7-flash")?);
let agent = LlmAgentBuilder::new("my_agent")
.description("A helpful assistant")
.instruction("You are a helpful assistant.")
.model(model)
.build()?;
Launcher::new(Arc::new(agent)).run().await
}
Starten Sie aus dem validierten API-Gerüst:
cargo adk new my-api --template api
cd my-api
cargo run
REST API-Endpunkte
Zustandsprüfung
Prüfen Sie, ob der Server ausgeführt wird:
GET /api/health
Antwort:
OK
Agent mit Streaming ausführen
Führen Sie einen Agenten aus und streamen Sie Antworten mithilfe von Server-Sent Events:
POST /api/run_sse
Anfragetext:
{
"appName": "my_agent",
"userId": "user123",
"sessionId": "session456",
"newMessage": {
"role": "user",
"parts": [
{
"text": "What is the capital of France?"
}
]
},
"streaming": true
}
Antwort:
- Content-Type:
text/event-stream - Streamt Ereignisse als JSON-Objekte
Ereignisformat:
{
"id": "evt_123",
"timestamp": 1234567890,
"author": "my_agent",
"content": {
"role": "model",
"parts": [
{
"text": "The capital of France is Paris."
}
]
},
"actions": {},
"llm_response": {
"content": {
"role": "model",
"parts": [
{
"text": "The capital of France is Paris."
}
]
}
}
}
Agent ausführen (ohne Streaming)
Führen Sie einen Agenten bis zum Abschluss aus und empfangen Sie alle Ereignisse in einer einzigen JSON-Antwort:
POST /api/run
Anfragetext: gleiche Struktur wie POST /api/run_sse (das Feld streaming wird ignoriert):
{
"appName": "my_agent",
"userId": "user123",
"sessionId": "session456",
"newMessage": {
"role": "user",
"parts": [
{
"text": "What is the capital of France?"
}
]
}
}
Antwort:
- Content-Type:
application/json - Ein JSON-Array mit jedem vom Lauf erzeugten Ereignis in der entsprechenden Reihenfolge und im selben Ereignisformat wie
/api/run_sse
Dieser Endpunkt bildet die nicht streamende /run-Route von Google ADKs api_server nach.
Sitzungsverwaltung
Sitzung erstellen
Eine neue Sitzung erstellen:
POST /api/sessions
Anfragerumpf:
{
"appName": "my_agent",
"userId": "user123",
"sessionId": "session456"
}
Antwort:
{
"id": "session456",
"appName": "my_agent",
"userId": "user123",
"lastUpdateTime": 1234567890,
"events": [],
"state": {}
}
Sitzung abrufen
Sitzungsdetails abrufen:
GET /api/sessions/:app_name/:user_id/:session_id
Antwort:
{
"id": "session456",
"appName": "my_agent",
"userId": "user123",
"lastUpdateTime": 1234567890,
"events": [],
"state": {}
}
Sitzung löschen
Eine Sitzung löschen:
DELETE /api/sessions/:app_name/:user_id/:session_id
Antwort:
- Status:
204 No Content
Sitzungen auflisten
Alle Sitzungen für einen Benutzer auflisten:
GET /api/apps/:app_name/users/:user_id/sessions
Antwort:
[
{
"id": "session456",
"appName": "my_agent",
"userId": "user123",
"lastUpdateTime": 1234567890,
"events": [],
"state": {}
}
]
Artefaktverwaltung
Artefakte auflisten
Alle Artefakte für eine Sitzung auflisten:
GET /api/sessions/:app_name/:user_id/:session_id/artifacts
Antwort:
[
"image1.png",
"document.pdf",
"data.json"
]
Artefakt abrufen
Ein Artefakt herunterladen:
GET /api/sessions/:app_name/:user_id/:session_id/artifacts/:artifact_name
Antwort:
- Content-Type: Wird durch die Dateierweiterung bestimmt
- Body: Binärer oder Textinhalt
Anwendungsverwaltung
Anwendungen auflisten
Alle verfügbaren Agenten auflisten:
GET /api/apps
GET /api/list-apps (legacy compatibility)
Antwort:
{
"apps": [
{
"name": "my_agent",
"description": "A helpful assistant"
}
]
}
Weboberfläche
Der Server enthält eine integrierte Weboberfläche, die unter folgender Adresse erreichbar ist:
http://localhost:8080/ui/

Der Schnellstart in fünf Minuten erstellt ein auf OpenAI basierendes Servergerüst und öffnet diese Oberfläche mit vier Befehlen. Die Aufzeichnung verwendet ein Team, um die aktive Topologiekante sichtbar zu machen; Blattagenten, Tools, Graphen, Workflows, Echtzeitagenten und Remote-Agenten verwenden dieselbe Oberfläche.
Funktionen
- Interaktive Abläufe: Nachrichten und Anhänge senden und sicher gerendertes Markdown, Streaming-Text, Tool-Aufrufe, Fehler und Übergaben überprüfen
- Sitzungsverwaltung: Sitzungen erstellen, anzeigen und zwischen ihnen wechseln
- Portierbare Teamtopologie: Exakte Delegations-und-Rückgabe-Kanten von Kontrollübergaben unterscheiden, mit einer Animation im Stil von Studio Next für das aktive Mitglied und die eingehende Kante
- Laufzeitinspektor: Geordnete Ereignisse, dedizierte Telemetrie-Spans, gemeinsamen Sitzungsstatus, konfigurierte Laufzeitdienste, A2A-Erkennung sowie Unterstützung des UI-/MCP-Apps-Protokolls überprüfen
- Echtzeitwiedergabe: Echtzeit-Agenten erkennen, Transkriptänderungen zusammenführen und abgeschlossene PCM-Ausgabe als WAV-Audio abspielen
- Artefakt-Viewer: Sitzungsartefakte anzeigen und herunterladen
- Responsive Designs: Tastaturzugängliche System-, helle und dunkle Layouts ohne externe Assets
UI-Routen
/– Leitet zu/ui/weiter/ui/– Haupt-Chat-Oberfläche/ui/assets/*– Statische Assets (CSS, JS, Bilder)/ui/assets/config/runtime-config.json– Laufzeitkonfiguration/api/ui/agents/{name}– Agentenfähigkeiten, Hierarchie und Metadaten der portierbaren Topologie
Die Oberfläche wird in adk-server/webui gepflegt, und ihr Produktions-Build ist
in den Server-Crate eingebettet. Dadurch verwenden generierte Projekte und Deployments
dieselbe Laufzeitoberfläche ohne einen separaten Frontend-Dienst.
Die ausführbare Laufzeit-UI-Demonstration
enthält separate, auf OpenAI basierende Anleitungen und Screenshots für einen Agenten mit Tool-Aufrufen, einen deterministischen Graph-Workflow und ein portables Übergabe-Team. Die
Galerie für fortgeschrittene Agenten ergänzt einen
Umgebungszeitplan, die OpenAI-Echtzeit-Sprachwiedergabe, die A2A-Erkennung, die MCP-Erkennung
von 2026-07-28 mit SEP-2663-Aufgaben sowie konfigurierte Telemetrie-, Artefakt-
und Speicherdienste in einem Server. Die Marke ADK Runtime verweist in einem neuen Tab auf
adk-rust.com.
Client-Beispiele
JavaScript/TypeScript
Verwendung von Fetch API mit SSE:
async function runAgent(message) {
const response = await fetch('http://localhost:8080/api/run_sse', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
body: JSON.stringify({
appName: 'my_agent',
userId: 'user123',
sessionId: 'session456',
newMessage: {
role: 'user',
parts: [{ text: message }]
},
streaming: true
})
});
const reader = response.body.getReader();
const decoder = new TextDecoder();
while (true) {
const { done, value } = await reader.read();
if (done) break;
const chunk = decoder.decode(value);
const lines = chunk.split('\n');
for (const line of lines) {
if (line.startsWith('data: ')) {
const event = JSON.parse(line.slice(6));
console.log('Event:', event);
}
}
}
}
Python
Verwendung der Bibliothek requests:
import requests
import json
def run_agent(message):
url = 'http://localhost:8080/api/run_sse'
payload = {
'appName': 'my_agent',
'userId': 'user123',
'sessionId': 'session456',
'newMessage': {
'role': 'user',
'parts': [{'text': message}]
},
'streaming': True
}
response = requests.post(url, json=payload, stream=True)
for line in response.iter_lines():
if line:
line_str = line.decode('utf-8')
if line_str.startswith('data: '):
event = json.loads(line_str[6:])
print('Event:', event)
run_agent('What is the capital of France?')
cURL
# Create session
curl -X POST http://localhost:8080/api/sessions \
-H "Content-Type: application/json" \
-d '{
"appName": "my_agent",
"userId": "user123",
"sessionId": "session456"
}'
# Run agent with streaming
curl -X POST http://localhost:8080/api/run_sse \
-H "Content-Type: application/json" \
-d '{
"appName": "my_agent",
"userId": "user123",
"sessionId": "session456",
"newMessage": {
"role": "user",
"parts": [{"text": "What is the capital of France?"}]
},
"streaming": true
}'
Serverkonfiguration
Benutzerdefinierter Port
Für einen benutzerdefinierten Port setzen Sie PORT, bevor Sie den generierten Server starten:
PORT=3000 cargo run
Benutzerdefinierter Artefaktdienst
Stellen Sie Ihren eigenen Artefaktdienst bereit:
use adk_artifact::InMemoryArtifactService;
let artifact_service = Arc::new(InMemoryArtifactService::new());
Launcher::new(Arc::new(agent))
.with_artifact_service(artifact_service)
.run()
.await
Benutzerdefinierter Sitzungsdienst
Verwenden Sie für Produktivbereitstellungen einen persistenten Sitzungsdienst:
use adk_session::SqliteSessionService;
// Note: This requires implementing a custom server setup
// The Launcher uses InMemorySessionService by default
Fehlerbehandlung
API verwendet strukturierte Fehlerantworten mit HTTP-Statuscodes, die aus der Fehlerkategorie abgeleitet werden:
| Statuscode | Kategorie | Bedeutung |
|---|---|---|
| 200 | — | Erfolg |
| 204 | — | Erfolg (Kein Inhalt) |
| 400 | invalid_input | Fehlerhafte Anfrage — ungültige Parameter oder Konfiguration |
| 401 | unauthorized | Fehlende oder ungültige Anmeldedaten |
| 403 | forbidden | Gültige Anmeldedaten, unzureichende Berechtigungen |
| 404 | not_found | Ressource nicht gefunden |
| 408 | timeout | Zeitüberschreitung des Vorgangs |
| 429 | rate_limited | Ratenlimit des Upstream-Dienstes überschritten |
| 500 | internal | Interner Serverfehler |
| 501 | unsupported | Funktion nicht unterstützt |
| 503 | unavailable | Upstream-Dienst nicht verfügbar |
Fehlerantwortformat (Problem JSON):
{
"error": {
"code": "model.openai.rate_limited",
"message": "OpenAI rate limit exceeded",
"component": "model",
"category": "rate_limited",
"requestId": "req-abc123",
"retryAfter": 5000,
"upstreamStatusCode": 429
}
}
Die Felder requestId, retryAfter und upstreamStatusCode werden aufgenommen, sofern sie verfügbar sind (andernfalls null).
CORS Konfiguration
Der Server aktiviert standardmäßig eine freizügige CORS, die Anfragen von jedem Ursprung zulässt. Dies ist für die Entwicklung geeignet, sollte aber in der Produktion eingeschränkt werden.
Telemetrie
Der Server initialisiert beim Start automatisch die Telemetrie. Protokolle werden mit strukturierter Formatierung nach stdout ausgegeben.
Protokollstufen:
ERROR: Kritische FehlerWARN: WarnungenINFO: Allgemeine Informationen (Standard)DEBUG: Detaillierte FehlersucheTRACE: Sehr detaillierte Ablaufverfolgung
Legen Sie die Protokollstufe mit der Umgebungsvariablen RUST_LOG fest:
RUST_LOG=debug cargo run
Bewährte Vorgehensweisen
- Sitzungsverwaltung: Erstellen Sie immer eine Sitzung, bevor Sie einen Agenten ausführen
- Fehlerbehandlung: Überprüfen Sie die HTTP-Statuscodes und behandeln Sie Fehler angemessen
- Streaming: Verwenden Sie SSE für Echtzeitantworten; analysieren Sie Ereignisse zeilenweise
- Sicherheit: Implementieren Sie in der Produktion eine Authentifizierung und schränken Sie CORS ein
- Persistenz: Verwenden Sie
SqliteSessionServiceoderPostgresSessionServicefür Produktionsbereitstellungen - Überwachung: Aktivieren Sie die Telemetrie und überwachen Sie die Protokolle auf Probleme
Full-Stack-Beispiel
Verwenden Sie für ein vollständiges, funktionsfähiges Servergerüst die validierte cargo-adk-Vorlage API. Diese veranschaulicht:
- Frontend: HTML/JavaScript-Client mit Echtzeit-Streaming
- Backend: ADK-Agent mit benutzerdefinierten Recherche- und PDF-Generierungswerkzeugen
- Integration: Vollständige Verwendung von REST API mit SSE-Streaming
- Artefakte: PDF-Generierung und -Download
- Sitzungsverwaltung: Automatische Sitzungserstellung und -verwaltung
Das Beispiel zeigt ein produktionsbereites Muster zum Erstellen KI-gestützter Webanwendungen mit ADK-Rust.
Schnellstart:
cargo adk new my-api --template api
cd my-api
cargo run
Dateien:
- Backend:
adk-rust-guide/examples/deployment/full_stack_research.rs - Frontend:
examples/research_paper/frontend.html - Dokumentation:
examples/research_paper/README.md - Architektur:
examples/research_paper/architecture.md
Verwandte Themen
- Starter – Starten des Servers
- Sitzungen – Sitzungsverwaltung
- Artefakte – Artefaktspeicherung
- Beobachtbarkeit – Telemetrie und Protokollierung
Zurück: ← Starter | Weiter: A2A Protokoll →