ベンチマーク

adk-bench クレートと cargo adk bench コマンドは、ADK-Rust エージェント向けの実際の LLM ベンチマークを提供します。合成マイクロベンチマークとは異なり、adk-bench はライブモデル呼び出しによる実際のエンドツーエンドのパフォーマンスを測定し、フレームワークのオーバーヘッドとプロバイダーのレイテンシを切り分けます。

測定対象

指標説明
コールドスタートプロセス起動から最初のLLM応答までの時間
エージェントループのオーバーヘッドツール呼び出しの往復ごとのフレームワークコスト(LLMの待機時間を除く)
スループット継続的な負荷下での毎秒リクエスト数
メモリ実行中のピークRSS
トークンオーバーヘッドフレームワークのインストルメンテーションによって追加される余分なトークン
CV(変動係数)実行間における測定値の安定性

クイックスタート

# Run all benchmarks with default settings
cargo adk bench

# Run a specific workload
cargo adk bench --workload simple_tool_call

# Dry run (no LLM calls, validates config only)
cargo adk bench --dry-run

CLI リファレンス

cargo adk bench [OPTIONS]

OPTIONS:
    --workload <NAME>          Run a specific workload (simple_tool_call,
                               multi_step_reasoning, parallel_tool_invocation)
    --iterations <N>           Number of iterations per workload [default: 10]
    --warmup <N>               Warmup iterations before measurement [default: 2]
    --provider <NAME>          LLM provider to benchmark [default: gemini]
    --model <MODEL>            Model ID to use [default: gemini-3.5-flash-lite]
    --output <FORMAT>          Output format: table, json, csv [default: table]
    --output-file <PATH>       Write results to file instead of stdout

    # Cost control
    --dry-run                  Validate configuration without making LLM calls
    --max-cost-usd <AMOUNT>    Abort if estimated cost exceeds this amount
    --confirm-cost             Prompt for confirmation before running

    # Regression detection
    --save-baseline <NAME>     Save results as a named baseline
    --check-regression <NAME>  Compare against a saved baseline
    --tolerance <PERCENT>      Regression threshold percentage [default: 10]

    # External comparison
    --ebp                      Enable External Benchmark Protocol output
    --harness <PATH>           Path to external framework harness config

コスト管理

ベンチマークでは実際の LLM 呼び出しが行われます。予期しない請求を避けるには、次のフラグを使用してください。

# Preview what would run without spending anything
cargo adk bench --dry-run

# Set a hard cost ceiling
cargo adk bench --max-cost-usd 5.00

# Require manual confirmation after cost estimate
cargo adk bench --confirm-cost

コスト見積もりでは、過去の実行結果のトークン数(またはワークロード定義からの推定値)に、プロバイダーが公開しているトークン単価を乗算します。

回帰検出

リリース間でパフォーマンスを追跡します。

# Establish a baseline after a release
cargo adk bench --save-baseline v1.0.0

# On the next change, check for regressions
cargo adk bench --check-regression v1.0.0 --tolerance 10

# Tighter tolerance for critical paths
cargo adk bench --workload simple_tool_call --check-regression v1.0.0 --tolerance 5

終了コード:

  • 0 — 回帰は検出されませんでした
  • 1 — 少なくとも1つのメトリクスが許容範囲を超えて悪化しました
  • 2 — 構成またはランタイムエラー

ベースラインは .adk-bench/baselines/ に JSON ファイルとして保存されます。

外部フレームワーク比較(EBP)

External Benchmark Protocol(EBP)により、他のエージェントフレームワークとの公平な比較が可能になります。EBP は標準のワークロード形式と測定プロトコルを定義しているため、実装間で結果を比較できます。

# Output EBP-compatible results
cargo adk bench --ebp --output json > results.json

# Run against an external harness (e.g., LangGraph, Python SDK)
cargo adk bench --harness harnesses/langraph.toml

ハーネス構成ファイルでは、同じワークロードを使用して外部フレームワークを呼び出し、同じ方法論でその結果を測定する方法を定義します。

ベンチマーク結果

(決定論的な構成、同じモデル、同じワークロードで)ADK-Rust と他のフレームワークを比較した公開結果:

指標ADK-RustGemini Python SDKLangGraph
コールドスタート109 ms501 ms502 ms
ループオーバーヘッド568 μs253 μs1228 ms
simple_tool_call合計1.2秒合計1.8秒合計2.1秒
multi_step_reasoning合計4.1秒合計5.9秒合計7.3秒
parallel_tool_invocation合計2.3秒合計3.7秒合計4.8秒

方法論:

  • モックではない、実際の Gemini 3.5 Flash-Lite 呼び出し
  • 決定論的な設定: temperature=0、固定シード
  • ウォームアップ実行 2 回後に 10 回反復
  • オーバーヘッドの分離: 合計時間から測定済みの LLM レイテンシを差し引く
  • すべてのフレームワークで同一のツール定義とプロンプトを使用

ワークロード

simple_tool_call

1 つのユーザーメッセージ → 1 回のツール呼び出し → 1 つのレスポンス。最小限のラウンドトリップオーバーヘッドを測定します。

multi_step_reasoning

各ツール呼び出しの間に推論を挟み、3~5 回の逐次的なツール呼び出しを必要とするマルチターンの会話。持続的なループ性能を測定します。

parallel_tool_invocation

1 つのユーザーメッセージによって 3 つのツール呼び出しを並列で実行します。同時ディスパッチのオーバーヘッドを測定します。

プログラムによる使用

use adk_bench::{BenchmarkSuite, BenchConfig, Workload};

let config = BenchConfig::builder()
    .iterations(10)
    .warmup(2)
    .provider("gemini")
    .model("gemini-3.5-flash-lite")
    .build()?;

let suite = BenchmarkSuite::new(config);
let results = suite.run_all().await?;

for result in &results {
    println!("{}: cold_start={}ms overhead={}μs",
        result.workload,
        result.cold_start_ms,
        result.loop_overhead_us,
    );
}

参考資料

以下については adk-bench/README.md を参照してください:

  • カスタムワークロードの定義
  • ハーネス作成ガイド
  • CI 統合パターン
  • 過去の結果の追跡

前へ: ← コード実行 | 次へ: ACP ツール →