قياس الأداء

يوفران adk-bench crate و cargo adk bench أمر قياس الأداء في الوقت-LLM لـ ADK-Rust agents. على عكس المقاييس الدقيقة الاصطناعية، يقيس adk-bench الأداء الفعلي الشامل مع استدعاءات النموذج المباشرة، عازلاً النفقات العامة للإطار عن زمن استجابة المزود.

ما الذي يقيسه

المقياسالوصف
Cold startالوقت من بدء العملية حتى أول استجابة LLM
Agent loop overheadتكلفة الإطار لكل دورة ذهاب وعودة لاستدعاء الأداة (يستثني وقت انتظار LLM)
Throughputالطلبات في الثانية تحت حمل مستمر
Memoryذروة RSS أثناء التنفيذ
Token overheadرموز إضافية مضافة بواسطة أدوات الإطار
CV (Coefficient of Variation)استقرار القياسات عبر عمليات التشغيل

بدء سريع

# 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-2.5-flash]
    --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 — خطأ في التكوين أو وقت التشغيل

يتم تخزين الخطوط الأساسية في .adk-bench/baselines/ كملفات JSON.

مقارنة الأطر الخارجية (EBP)

يتيح بروتوكول المعيار الخارجي (EBP) مقارنة متكافئة مع أطر عمل الوكلاء الأخرى. يحدد 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_call1.2s إجمالي1.8s إجمالي2.1s إجمالي
multi_step_reasoning4.1s إجمالي5.9s إجمالي7.3s إجمالي
parallel_tool_invocation2.3s إجمالي3.7s إجمالي4.8s إجمالي

المنهجية:

  • استدعاءات Gemini 2.5 Flash حقيقية (غير وهمية)
  • تكوين حتمي: temperature=0، بذرة ثابتة
  • 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-2.5-flash")
    .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 →