Évaluation des performances

Le crate adk-bench et la commande cargo adk bench fournissent une évaluation des performances réelle de LLM pour les agents ADK-Rust. Contrairement aux microévaluations synthétiques, adk-bench mesure les performances réelles de bout en bout avec des appels à des modèles en direct, en isolant la surcharge du framework de la latence du fournisseur.

Ce qui est mesuré

MétriqueDescription
Démarrage à froidTemps écoulé entre le lancement du processus et la première réponse LLM
Surcharge de la boucle de l’agentCoût du framework par aller-retour d’appel d’outil (exclut le temps d’attente de LLM)
DébitRequêtes par seconde sous charge soutenue
MémoireRSS maximal pendant l’exécution
Surcharge de jetonsJetons supplémentaires ajoutés par l’instrumentation du framework
CV (coefficient de variation)Stabilité des mesures d’une exécution à l’autre

Démarrage rapide

# 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

Référence de 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

Contrôle des coûts

Les benchmarks effectuent de véritables appels à LLM. Utilisez ces indicateurs pour éviter les factures imprévues :

# 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

L’estimateur de coûts utilise le nombre de tokens des exécutions précédentes (ou des estimations basées sur la définition de la charge de travail), multiplié par la tarification publiée par le fournisseur pour chaque token.

Détection des régressions

Suivez les performances au fil des versions :

# 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

Codes de sortie :

  • 0 — aucune régression détectée
  • 1 — au moins une métrique a régressé au-delà de la tolérance
  • 2 — erreur de configuration ou d’exécution

Les références sont stockées dans .adk-bench/baselines/ sous forme de fichiers JSON.

Comparaison avec des frameworks externes (EBP)

Le protocole de benchmark externe (EBP) permet une comparaison équitable avec d’autres frameworks d’agents. EBP définit un format de charge de travail et un protocole de mesure standard afin que les résultats soient comparables entre les implémentations.

# 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

Les fichiers de configuration du harnais définissent comment invoquer des frameworks externes avec les mêmes charges de travail et mesurer leurs résultats selon la même méthodologie.

Résultats des benchmarks

Résultats publiés comparant ADK-Rust à d’autres frameworks (configuration déterministe, même modèle, même charge de travail) :

MétriqueADK-RustGemini Python SDKLangGraph
Démarrage à froid109 ms501 ms502 ms
Surcharge de boucle568 μs253 μs1228 ms
simple_tool_call1,2 s au total1,8 s au total2,1 s au total
multi_step_reasoning4,1 s au total5,9 s au total7,3 s au total
parallel_tool_invocation2,3 s au total3,7 s au total4,8 s au total

Méthodologie :

  • Appels réels à Gemini 3.5 Flash-Lite (non simulés)
  • Configuration déterministe : temperature=0, valeur de départ fixe
  • 10 itérations après 2 exécutions de préchauffage
  • Isolation de la surcharge : temps total moins la latence mesurée de LLM
  • Mêmes définitions d’outils et mêmes invites dans tous les frameworks

Charges de travail

simple_tool_call

Un seul message utilisateur → un appel d’outil → une réponse. Mesure la surcharge minimale d’un aller-retour.

multi_step_reasoning

Conversation à plusieurs tours nécessitant 3 à 5 appels d’outils séquentiels, avec un raisonnement entre chacun. Mesure les performances soutenues de la boucle.

parallel_tool_invocation

Un seul message utilisateur déclenchant 3 appels d’outils parallèles. Mesure la surcharge de distribution concurrente.

Utilisation programmatique

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,
    );
}

Pour aller plus loin

Consultez adk-bench/README.md pour :

  • Définitions personnalisées de charges de travail
  • Guide de rédaction du harness
  • Modèles d’intégration CI
  • Suivi historique des résultats

Précédent : ← Exécution de code | Suivant : Outils ACP →