Runner
Die Ausfรผhrungs-Runtime von adk-runner, die die Agent-Ausfรผhrung orchestriert.
รbersicht
Der Runner verwaltet den kompletten Lebenszyklus der Agent-Ausfรผhrung:
- Sitzungsverwaltung (Sitzungen erstellen/abrufen)
- Memory-Injektion (relevante Memories suchen und injizieren)
- Artefakt-Verwaltung (bereichsbezogener Artefakt-Zugriff)
- Event-Streaming (Ereignisse verarbeiten und weiterleiten)
- Agent-Transfers (Multi-Agent-รbergaben handhaben)
Installation
[dependencies]
adk-runner = "0.2.0"
RunnerConfig
Konfigurieren Sie den Runner mit den benรถtigten Services:
use adk_runner::{Runner, RunnerConfig};
use adk_session::InMemorySessionService;
use adk_artifact::InMemoryArtifactService;
use std::sync::Arc;
let config = RunnerConfig {
app_name: "my_app".to_string(),
agent: Arc::new(my_agent),
session_service: Arc::new(InMemorySessionService::new()),
artifact_service: Some(Arc::new(InMemoryArtifactService::new())),
memory_service: None,
run_config: None,
};
let runner = Runner::new(config)?;
Konfigurationsfelder
| Feld | Typ | Erforderlich | Beschreibung |
|---|---|---|---|
app_name | String | Ja | Anwendungsbezeichner |
agent | Arc<dyn Agent> | Ja | Ausfรผhrender Root-Agent |
session_service | Arc<dyn SessionService> | Ja | Speicher-Backend fรผr Sitzungen |
artifact_service | Option<Arc<dyn ArtifactService>> | Nein | Artefakt-Speicher |
memory_service | Option<Arc<dyn Memory>> | Nein | Langzeitgedรคchtnis |
run_config | Option<RunConfig> | Nein | Ausfรผhrungsoptionen |
Agents ausfรผhren
Fรผhren Sie einen Agent mit Benutzereingabe aus:
use adk_core::Content;
use futures::StreamExt;
let user_content = Content::new("user").with_text("Hello!");
let mut stream = runner.run(
"user-123".to_string(),
"session-456".to_string(),
user_content,
).await?;
while let Some(event) = stream.next().await {
match event {
Ok(e) => {
if let Some(content) = e.content() {
for part in &content.parts {
if let Some(text) = part.text() {
print!("{}", text);
}
}
}
}
Err(e) => eprintln!("Error: {}", e),
}
}
Ausfรผhrungsablauf
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ Runner.run() โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ
โผ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ 1. Abruf der Session โ
โ โ
โ SessionService.get(app_name, user_id, session_id) โ
โ โ Erstellt neue Session, falls nicht vorhanden โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ
โผ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ 2. Agenten-Auswahl โ
โ โ
โ รberprรผft den Session-Status auf aktiven Agent โ
โ โ Verwendet Root-Agent oder รผbertragenen Agent โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ
โผ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ 3. Kontext-Erstellung โ
โ โ
โ InvocationContext mit: โ
โ - Session (verรคnderbar) โ
โ - Artefakte (auf Session beschrรคnkt) โ
โ - Speicher (falls konfiguriert) โ
โ - Run config โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ
โผ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ 4. Agenten-Ausfรผhrung โ
โ โ
โ agent.run(ctx) โ EventStream โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ
โผ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ 5. Ereignisverarbeitung โ
โ โ
โ Fรผr jedes Ereignis: โ
โ - Aktualisiert den Session-Status โ
โ - Behandelt Transfers โ
โ - Leitet an den Aufrufer weiter โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ
โผ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ 6. Session speichern โ
โ โ
โ SessionService.append_event(session, events) โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
InvocationContext
Der Kontext, der Agents wรคhrend der Ausfรผhrung bereitgestellt wird:
pub trait InvocationContext: CallbackContext {
/// Der auszufรผhrende Agent
fn agent(&self) -> Arc<dyn Agent>;
/// Memory-Dienst (falls konfiguriert)
fn memory(&self) -> Option<Arc<dyn Memory>>;
/// Aktuelle Session
fn session(&self) -> &dyn Session;
/// Ausfรผhrungskonfiguration
fn run_config(&self) -> &RunConfig;
/// Signalisiert das Ende der Invocation
fn end_invocation(&self);
/// Prรผft, ob die Invocation beendet wurde
fn ended(&self) -> bool;
}
RunConfig
Ausfรผhrungsoptionen:
pub struct RunConfig {
/// Streaming-Modus fรผr Antworten
pub streaming_mode: StreamingMode,
}
pub enum StreamingMode {
/// Kein Streaming, gibt vollstรคndige Antwort zurรผck
None,
/// Server-Sent Events (Standard)
SSE,
/// Bidirektionales Streaming (Echtzeit)
Bidi,
}
Hinweis: Zusรคtzliche Felder wie
max_turnsundinclude_historysind fรผr zukรผnftige Verรถffentlichungen geplant.
Agent Transfers
Der Runner handhabt Multi-Agent-Transfers automatisch:
// In an agent's tool or callback
if should_transfer {
// Set transfer in event actions
ctx.set_actions(EventActions {
transfer_to_agent: Some("specialist_agent".to_string()),
..Default::default()
});
}
Der Runner wird:
- Erkennt die Transferanfrage im Event
- Findet den Ziel-Agent in
sub_agents - Aktualisiert den
session-Zustand mit dem neuen aktivenagent - Setzt die Ausfรผhrung mit dem neuen
agentfort
Integration mit Launcher
Der Launcher verwendet den Runner intern:
// Launcher creates Runner with default services
Launcher::new(agent)
.app_name("my_app")
.run()
.await?;
// Equivalent to:
let runner = Runner::new(RunnerConfig {
app_name: "my_app".to_string(),
agent,
session_service: Arc::new(InMemorySessionService::new()),
artifact_service: Some(Arc::new(FileArtifactService::new("./artifacts")?)),
memory_service: None,
run_config: None,
})?;
Custom Runner Usage
Fรผr fortgeschrittene Szenarien verwenden Sie den Runner direkt:
use adk_runner::{Runner, RunnerConfig};
use adk_session::DatabaseSessionService;
use adk_artifact::S3ArtifactService;
use adk_memory::QdrantMemoryService;
// Produktionskonfiguration
let config = RunnerConfig {
app_name: "production_app".to_string(),
agent: my_agent,
session_service: Arc::new(DatabaseSessionService::new(db_pool)),
artifact_service: Some(Arc::new(S3ArtifactService::new(s3_client))),
memory_service: Some(Arc::new(QdrantMemoryService::new(qdrant_client))),
run_config: None, // Verwendet Standard-SSE-Streaming
};
let runner = Runner::new(config)?;
// Verwendung im HTTP-Handler
async fn chat_handler(runner: &Runner, request: ChatRequest) -> Response {
let stream = runner.run(
request.user_id,
request.session_id,
request.content,
).await?;
// Streamt Events an den Client
Response::sse(stream)
}
Zurรผck: โ Core Types | Weiter: Launcher โ