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étrica | Descrição |
|---|---|
| Inicialização a frio | Tempo desde o lançamento do processo até a primeira resposta de LLM |
| Sobrecarga do loop do agente | Custo do framework por ida e volta de chamada de ferramenta (exclui o tempo de espera de LLM) |
| Vazão | Solicitações por segundo sob carga sustentada |
| Memória | RSS de pico durante a execução |
| Sobrecarga de tokens | Tokens 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 detectada1— pelo menos uma métrica regrediu além da tolerância2— 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étrica | ADK-Rust | Gemini Python SDK | LangGraph |
|---|---|---|---|
| Início a frio | 109 ms | 501 ms | 502 ms |
| Sobrecarga do loop | 568 μs | 253 μs | 1228 ms |
| simple_tool_call | 1.2s total | 1.8s total | 2.1s total |
| multi_step_reasoning | 4.1s total | 5.9s total | 7.3s total |
| parallel_tool_invocation | 2.3s total | 3.7s total | 4.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 →