ランチャー

Launcherは、ADKエージェントを実行するためのシンプルで一行で完結する方法を提供します。デフォルトの最小限のティアでは、adk-runnerからの軽量なコンソールランチャーです。完全なCLI引数パーサーとHTTPサーバーモードが必要な場合は、cli-openaiのようなオプトインのCLI機能を有効にしてください。

概要

ランチャーは、エージェントのデプロイを可能な限りシンプルにするように設計されています。一行のコードで、以下のことが可能です。

  • テストおよび開発のために、エージェントをインタラクティブなコンソールで実行する
  • cli-*機能またはcargo-adk apiテンプレートが使用されている場合、エージェントをWeb UI付きのHTTPサーバーとしてデプロイする
  • アプリケーション名とアーティファクトストレージをカスタマイズする

基本的な使用法

コンソールモード(デフォルト)

ランチャーを使用する最も簡単な方法は、エージェントでランチャーを作成し、run()を呼び出すことです。

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-2.5-flash")?);
    
    let agent = LlmAgentBuilder::new("my_agent")
        .description("A helpful assistant")
        .instruction("You are a helpful assistant.")
        .model(model)
        .build()?;
    
    // Run with the lightweight console launcher
    Launcher::new(Arc::new(agent)).run().await
}

エージェントを実行します。

# Interactive console (default)
cargo run

# Full CLI mode is available when your app enables a `cli-*` feature

サーバーモード

エージェントをWeb UI付きのHTTPサーバーとして実行するには、apiテンプレートを使用するか、cli-*機能を有効にします。

cargo adk new my-api --template api
cd my-api
cargo run

サーバーが起動し、以下が表示されます。

🚀 ADK Server starting on http://localhost:8080
📱 Open http://localhost:8080 in your browser
Press Ctrl+C to stop

設定オプション

カスタムアプリケーション名

デフォルトでは、ランチャーはエージェントの名前をアプリケーション名として使用します。これをカスタマイズできます。

Launcher::new(Arc::new(agent))
    .app_name("my_custom_app")
    .run()
    .await

カスタムアーティファクトサービス

独自のアーティファクトサービス実装を提供します。

use adk_artifact::InMemoryArtifactService;

let artifact_service = Arc::new(InMemoryArtifactService::new());

Launcher::new(Arc::new(agent))
    .with_artifact_service(artifact_service)
    .run()
    .await

コンソールモードの詳細

コンソールモードでは、ランチャーは以下を行います。

  1. インメモリセッションサービスを作成します
  2. ユーザーのためにセッションを作成します
  3. インタラクティブなREPLループを開始します
  4. エージェントの応答をリアルタイムでストリーミングします
  5. マルチエージェントシステムにおけるエージェントの転送を処理します

コンソールインタラクション

🤖 Agent ready! Type your questions (or 'exit' to quit).

You: What is the capital of France?
Assistant: The capital of France is Paris.

You: exit
👋 Goodbye!

マルチエージェントコンソール

マルチエージェントシステムを使用する場合、コンソールはどのエージェントが応答しているかを表示します。

You: I need help with my order

[Agent: customer_service]
Assistant: I'll help you with your order. What's your order number?

You: ORDER-12345

🔄 [Transfer requested to: order_lookup]

[Agent: order_lookup]
Assistant: I found your order. It was shipped yesterday.

サーバーモードの詳細

サーバーモードでは、ランチャーは以下を行います。

  1. 可観測性のためのテレメトリを初期化します
  2. インメモリセッションサービスを作成します
  3. REST APIエンドポイントを持つHTTPサーバーを起動します
  4. エージェントと対話するためのWeb UIを提供します

本番環境向けエスケープハッチ

カスタムルート、ミドルウェア、メトリクス、またはサーブループの所有権が必要な本番アプリケーションでは、build_app()を使用します。

let app = Launcher::new(Arc::new(agent))
    .with_a2a_base_url("https://agent.example.com")
    .build_app()?;

let app = app.merge(my_admin_routes());
let listener = tokio::net::TcpListener::bind("0.0.0.0:8080").await?;
axum::serve(listener, app).await?;

A2Aルートを明示的に有効にしたい場合は、build_app_with_a2a(...)を使用します。

利用可能なエンドポイント

サーバーは以下のREST APIエンドポイントを公開します。

  • GET /health - ヘルスチェックエンドポイント
  • POST /run_sse - Server-Sent Eventsストリーミングでエージェントを実行
  • GET /sessions - セッションを一覧表示
  • POST /sessions - 新しいセッションを作成
  • GET /sessions/:app_name/:user_id/:session_id - セッションの詳細を取得
  • DELETE /sessions/:app_name/:user_id/:session_id - セッションを削除

詳細なエンドポイント仕様については、Server APIドキュメントを参照してください。

Web UI

サーバーには、http://localhost:8080/ui/でアクセス可能な組み込みのWeb UIが含まれています。UIは以下を提供します。

  • インタラクティブなチャットインターフェース
  • セッション管理
  • リアルタイムストリーミング応答
  • マルチエージェントの視覚化

CLI引数

完全なCLIランチャーは、cli-*機能が有効になっている場合、以下のコマンドをサポートします。

コマンド説明
(なし)対話型コンソール (デフォルト)cargo run
chat対話型コンソール (明示的)cargo run -- chat
serveHTTP サーバーモードcargo run -- serve
serve --port PORTHTTP カスタムポートでサーバーcargo run -- serve --port 3000

完全な例

両方のモードを示す完全な例を以下に示します。

use adk_rust::prelude::*;
use adk_rust::Launcher;
use std::sync::Arc;

#[tokio::main]
async fn main() -> Result<()> {
    // Load API key
    let api_key = std::env::var("GOOGLE_API_KEY")
        .expect("GOOGLE_API_KEY environment variable not set");
    
    // Create model
    let model = Arc::new(GeminiModel::new(&api_key, "gemini-2.5-flash")?);
    
    // Create agent with tools
    let weather_tool = FunctionTool::new(
        "get_weather",
        "Get the current weather for a location",
        |params, _ctx| async move {
            let location = params["location"].as_str().unwrap_or("unknown");
            Ok(json!({
                "location": location,
                "temperature": 72,
                "condition": "sunny"
            }))
        },
    );
    
    let agent = LlmAgentBuilder::new("weather_agent")
        .description("An agent that provides weather information")
        .instruction("You are a weather assistant. Use the get_weather tool to provide weather information.")
        .model(model)
        .tool(Arc::new(weather_tool))
        .build()?;
    
    // Run with Launcher. Enable a `cli-*` feature for full CLI/server mode.
    Launcher::new(Arc::new(agent))
        .app_name("weather_app")
        .run()
        .await
}

コンソールモードで実行:

cargo run

生成された API プロジェクトからサーバーモードで実行:

cargo adk new weather-api --template api
cd weather-api
cargo run

デプロイ前検証

agent をデプロイする前に、実際にデプロイすることなくプロジェクトが正しくコンパイルされることを cargo adk build を使用して検証します:

# Verify compilation (no deployment)
cargo adk build

# Build with release optimizations
cargo adk build --release

これにより、デプロイをコミットする前に、コンパイルエラー、依存関係の欠落、および構成の問題を検出できます。これは、cargo adk deploy の前のゲートとして CI パイプラインで特に役立ちます。

完全なコマンドドキュメントについては、cargo adk build を参照してください。

ベストプラクティス

  1. 環境変数: 機密性の高い設定 (API キー) は常に環境変数からロードします
  2. エラー処理: Result 型を使用して適切なエラー処理を行います
  3. グレースフルシャットダウン: Launcher は両方のモードで Ctrl+C をグレースフルに処理します
  4. ポート選択: 他のサービスと競合しないポートを選択します (デフォルト 8080)
  5. セッション管理: 本番環境では、インメモリセッションの代わりに PostgresSessionService または SqliteSessionService の使用を検討してください
  6. デプロイ前チェック: 問題を早期に検出するために、デプロイ前に cargo adk build を実行します

前へ: ← Telemetry | 次へ: Server →