É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étrique | Description |
|---|---|
| Démarrage à froid | Temps écoulé entre le lancement du processus et la première réponse LLM |
| Surcharge de la boucle de l’agent | Coût du framework par aller-retour d’appel d’outil (exclut le temps d’attente de LLM) |
| Débit | Requêtes par seconde sous charge soutenue |
| Mémoire | RSS maximal pendant l’exécution |
| Surcharge de jetons | Jetons 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ée1— au moins une métrique a régressé au-delà de la tolérance2— 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étrique | ADK-Rust | Gemini Python SDK | LangGraph |
|---|---|---|---|
| Démarrage à froid | 109 ms | 501 ms | 502 ms |
| Surcharge de boucle | 568 μs | 253 μs | 1228 ms |
| simple_tool_call | 1,2 s au total | 1,8 s au total | 2,1 s au total |
| multi_step_reasoning | 4,1 s au total | 5,9 s au total | 7,3 s au total |
| parallel_tool_invocation | 2,3 s au total | 3,7 s au total | 4,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 →