Evaluación comparativa
El crate adk-bench y el comando cargo adk bench proporcionan evaluación comparativa de LLM en condiciones reales para agentes ADK-Rust. A diferencia de las microevaluaciones comparativas sintéticas, adk-bench mide el rendimiento real de extremo a extremo con llamadas activas al modelo, aislando la sobrecarga del framework de la latencia del proveedor.
Qué mide
| Métrica | Descripción |
|---|---|
| Arranque en frío | Tiempo desde el inicio del proceso hasta la primera respuesta de LLM |
| Sobrecarga del ciclo del agente | Coste del framework por cada ida y vuelta de llamada a la herramienta (excluye el tiempo de espera de LLM) |
| Rendimiento | Solicitudes por segundo bajo carga sostenida |
| Memoria | RSS máximo durante la ejecución |
| Sobrecarga de tokens | Tokens adicionales añadidos por la instrumentación del framework |
| CV (coeficiente de variación) | Estabilidad de las mediciones entre ejecuciones |
Inicio rápido
# 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
Referencia 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
Control de costes
Los benchmarks realizan llamadas reales a LLM. Usa estas opciones para evitar cargos inesperados:
# 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
El estimador de costes utiliza los recuentos de tokens de ejecuciones anteriores (o estimaciones basadas en la definición de la carga de trabajo) multiplicados por los precios por token publicados por el proveedor.
Detección de regresiones
Realiza un seguimiento del rendimiento entre versiones:
# 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
Códigos de salida:
0— no se detectaron regresiones1— al menos una métrica retrocedió más allá de la tolerancia2— error de configuración o de ejecución
Las líneas base se almacenan en .adk-bench/baselines/ como archivos JSON.
Comparación con frameworks externos (EBP)
El Protocolo de Benchmarks Externos (EBP) permite realizar comparaciones directas con otros frameworks de agentes. EBP define un formato de carga de trabajo y un protocolo de medición estándar para que los resultados sean comparables entre implementaciones.
# 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
Los archivos de configuración del arnés definen cómo invocar frameworks externos con las mismas cargas de trabajo y medir sus resultados utilizando la misma metodología.
Resultados de los benchmarks
Resultados publicados que comparan ADK-Rust con otros frameworks (configuración determinista, mismo modelo, misma carga de trabajo):
| Métrica | ADK-Rust | Gemini Python SDK | LangGraph |
|---|---|---|---|
| Inicio en frío | 109 ms | 501 ms | 502 ms |
| Sobrecarga del bucle | 568 μs | 253 μs | 1228 ms |
| simple_tool_call | 1.2s en total | 1.8s en total | 2.1s en total |
| multi_step_reasoning | 4.1s en total | 5.9s en total | 7.3s en total |
| parallel_tool_invocation | 2.3s en total | 3.7s en total | 4.8s en total |
Metodología:
- Llamadas reales a Gemini 3.5 Flash-Lite (no simuladas)
- Configuración determinista:
temperature=0, semilla fija - 10 iteraciones después de 2 ejecuciones de calentamiento
- Aislamiento de la sobrecarga: tiempo total menos la latencia medida de LLM
- Las mismas definiciones de herramientas y prompts en todos los frameworks
Cargas de trabajo
simple_tool_call
Un único mensaje del usuario → una llamada a una herramienta → una respuesta. Mide la sobrecarga mínima de ida y vuelta.
multi_step_reasoning
Conversación de varios turnos que requiere entre 3 y 5 llamadas secuenciales a herramientas, con razonamiento entre cada una. Mide el rendimiento sostenido del bucle.
parallel_tool_invocation
Un único mensaje del usuario que activa 3 llamadas paralelas a herramientas. Mide la sobrecarga del envío simultáneo.
Uso programático
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,
);
}
Lecturas adicionales
Consulta adk-bench/README.md para:
- Definiciones de cargas de trabajo personalizadas
- Guía para crear el sistema de pruebas
- Patrones de integración con CI
- Seguimiento histórico de resultados
Anterior: ← Ejecución de código | Siguiente: ACP Herramientas →