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étricaDescripción
Arranque en fríoTiempo desde el inicio del proceso hasta la primera respuesta de LLM
Sobrecarga del ciclo del agenteCoste del framework por cada ida y vuelta de llamada a la herramienta (excluye el tiempo de espera de LLM)
RendimientoSolicitudes por segundo bajo carga sostenida
MemoriaRSS máximo durante la ejecución
Sobrecarga de tokensTokens 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 regresiones
  • 1 — al menos una métrica retrocedió más allá de la tolerancia
  • 2 — 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étricaADK-RustGemini Python SDKLangGraph
Inicio en frío109 ms501 ms502 ms
Sobrecarga del bucle568 μs253 μs1228 ms
simple_tool_call1.2s en total1.8s en total2.1s en total
multi_step_reasoning4.1s en total5.9s en total7.3s en total
parallel_tool_invocation2.3s en total3.7s en total4.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 →

Evaluación comparativa - Documentación ADK-Rust | ADK-Rust