基准测试
adk-bench crate 和 cargo adk bench 命令为 ADK-Rust agents 提供真实的 LLM 基准测试。与合成微基准测试不同,adk-bench 通过实时模型调用测量实际的端到端性能,将框架开销与提供商延迟隔离开来。
测量内容
| 指标 | 描述 |
|---|---|
| 冷启动 | 从进程启动到首次 LLM 响应的时间 |
| 智能体循环开销 | 每次工具调用往返的框架开销(不包括 LLM 等待时间) |
| 吞吐量 | 持续负载下每秒的请求数 |
| 内存 | 执行期间的峰值 RSS |
| Token 开销 | 框架插桩额外添加的 Token |
| CV(变异系数) | 各次运行测量结果的稳定性 |
快速开始
# 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
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
成本控制
基准测试会执行真实的 LLM 调用。使用以下标志可避免产生意外费用:
# 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
成本估算器使用之前运行中的令牌数量(或根据工作负载定义进行估算),再乘以提供商公布的每令牌定价。
回归检测
跟踪不同版本之间的性能:
# 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
退出代码:
0— 未检测到回归1— 至少有一项指标的回归超出容差2— 配置或运行时错误
基线以 JSON 文件的形式存储在 .adk-bench/baselines/ 中。
外部框架比较(EBP)
外部基准测试协议(EBP)支持与其他 agent 框架进行同类比较。EBP 定义了标准的工作负载格式和测量协议,因此不同实现之间的结果具有可比性。
# 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
Harness 配置文件定义了如何使用相同的工作负载调用外部框架,并使用相同的方法测量其结果。
基准测试结果
已发布的结果将 ADK-Rust 与其他框架进行比较(确定性配置、相同模型、相同工作负载):
| 指标 | ADK-Rust | Gemini Python SDK | LangGraph |
|---|---|---|---|
| 冷启动 | 109 ms | 501 ms | 502 ms |
| 循环开销 | 568 μs | 253 μs | 1228 ms |
| simple_tool_call | 总计 1.2 秒 | 总计 1.8 秒 | 总计 2.1 秒 |
| multi_step_reasoning | 总计 4.1 秒 | 总计 5.9 秒 | 总计 7.3 秒 |
| parallel_tool_invocation | 总计 2.3 秒 | 总计 3.7 秒 | 总计 4.8 秒 |
方法:
- 使用真实的 Gemini 3.5 Flash-Lite 调用(非模拟)
- 确定性配置:
temperature=0,固定种子 - 预热运行 2 次后进行 10 次迭代
- 隔离开销:总耗时减去测得的 LLM 延迟
- 所有框架使用相同的工具定义和提示
工作负载
simple_tool_call
一条用户消息 → 一次工具调用 → 一次响应。测量最小往返开销。
multi_step_reasoning
需要在每次工具调用之间进行推理的多轮对话,连续调用 3–5 次工具。测量持续循环性能。
parallel_tool_invocation
一条用户消息触发 3 次并行工具调用。测量并发调度开销。
编程式用法
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,
);
}
延伸阅读
请参阅 adk-bench/README.md,了解:
- 自定义工作负载定义
- Harness 编写指南
- CI 集成模式
- 历史结果跟踪