Avaliação de desempenho

O crate adk-bench e o comando cargo adk bench fornecem avaliações de desempenho de tempo real-LLM para agentes ADK-Rust. Ao contrário dos microbenchmarks sintéticos, adk-bench mede o desempenho real de ponta a ponta com chamadas ativas ao modelo, isolando a sobrecarga do framework da latência do provedor.

O que ele mede

MétricaDescrição
Inicialização a frioTempo desde o lançamento do processo até a primeira resposta de LLM
Sobrecarga do loop do agenteCusto do framework por ida e volta de chamada de ferramenta (exclui o tempo de espera de LLM)
VazãoSolicitações por segundo sob carga sustentada
MemóriaRSS de pico durante a execução
Sobrecarga de tokensTokens extras adicionados pela instrumentação do framework
CV (Coeficiente de Variação)Estabilidade das medições entre as execuções

Início 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

Referência 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

Controle de custos

Os benchmarks fazem chamadas reais de LLM. Use estes sinalizadores para evitar cobranças inesperadas:

# 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

O estimador de custos usa as contagens de tokens de execuções anteriores (ou estimativas da definição da carga de trabalho), multiplicadas pelo preço publicado por token pelo provedor.

Detecção de regressões

Acompanhe o desempenho entre versões:

# 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 saída:

  • 0 — nenhuma regressão detectada
  • 1 — pelo menos uma métrica regrediu além da tolerância
  • 2 — erro de configuração ou de execução

As linhas de base são armazenadas em .adk-bench/baselines/ como arquivos JSON.

Comparação com frameworks externos (EBP)

O Protocolo de Benchmark Externo (EBP) permite uma comparação equivalente com outros frameworks de agentes. O EBP define um formato de carga de trabalho e um protocolo de medição padrão, para que os resultados sejam comparáveis entre implementações.

# 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

Os arquivos de configuração do ambiente de execução definem como invocar frameworks externos com as mesmas cargas de trabalho e medir seus resultados usando a mesma metodologia.

Resultados dos benchmarks

Resultados publicados comparando ADK-Rust com outros frameworks (configuração determinística, mesmo modelo, mesma carga de trabalho):

MétricaADK-RustGemini Python SDKLangGraph
Início a frio109 ms501 ms502 ms
Sobrecarga do loop568 μs253 μs1228 ms
simple_tool_call1.2s total1.8s total2.1s total
multi_step_reasoning4.1s total5.9s total7.3s total
parallel_tool_invocation2.3s total3.7s total4.8s total

Metodologia:

  • Chamadas reais do Gemini 3.5 Flash-Lite (não simuladas)
  • Configuração determinística: temperature=0, seed fixo
  • 10 iterações após 2 execuções de aquecimento
  • Isolamento da sobrecarga: tempo total menos a latência medida de LLM
  • As mesmas definições de ferramentas e prompts em todos os frameworks

Cargas de trabalho

simple_tool_call

Uma única mensagem do usuário → uma chamada de ferramenta → uma resposta. Mede a sobrecarga mínima de ida e volta.

multi_step_reasoning

Conversa com várias interações que exige de 3 a 5 chamadas sequenciais de ferramentas, com raciocínio entre cada uma. Mede o desempenho sustentado do loop.

parallel_tool_invocation

Uma única mensagem do usuário acionando 3 chamadas paralelas de ferramentas. Mede a sobrecarga do despacho concorrente.

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

Leitura adicional

Consulte adk-bench/README.md para:

  • Definições personalizadas de cargas de trabalho
  • Guia de criação de harnesses
  • Padrões de integração com CI
  • Acompanhamento histórico dos resultados

Anterior: ← Execução de código | Próximo: ACP Ferramentas →