基准测试

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-RustGemini Python SDKLangGraph
冷启动109 ms501 ms502 ms
循环开销568 μs253 μs1228 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 集成模式
  • 历史结果跟踪

上一页← 代码执行 | 下一页ACP 工具 →

基准测试 - ADK-Rust 文档 | ADK-Rust