قياس الأداء
يوفران 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-Rust | Gemini Python SDK | LangGraph |
|---|---|---|---|
| بدء التشغيل البارد | 109 ms | 501 ms | 502 ms |
| الحمل الزائد للحلقة | 568 μs | 253 μs | 1228 ms |
| simple_tool_call | 1.2s إجمالي | 1.8s إجمالي | 2.1s إجمالي |
| multi_step_reasoning | 4.1s إجمالي | 5.9s إجمالي | 7.3s إجمالي |
| parallel_tool_invocation | 2.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 →