قياس الأداء
توفر حزمة adk-bench وأمر cargo adk bench قياس أداء واقعي-LLM للوكلاء ADK-Rust. وعلى خلاف الاختبارات المعيارية المصغّرة الاصطناعية، تقيس adk-bench الأداء الفعلي من البداية إلى النهاية مع استدعاءات مباشرة للنموذج، مما يعزل الحمل الزائد لإطار العمل عن زمن استجابة المزوّد.
ما الذي يقيسه
| المقياس | الوصف |
|---|---|
| بدء التشغيل البارد | الوقت من إطلاق العملية إلى أول استجابة LLM |
| النفقات العامة لحلقة الوكيل | تكلفة إطار العمل لكل رحلة ذهابًا وإيابًا لاستدعاء الأداة (باستثناء وقت انتظار LLM) |
| الإنتاجية | عدد الطلبات في الثانية تحت حمل مستمر |
| الذاكرة | ذروة RSS أثناء التنفيذ |
| الحمل الزائد للرموز | الرموز الإضافية التي تضيفها أدوات قياس إطار العمل |
| معامل الاختلاف (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— خطأ في الإعداد أو وقت التشغيل
تُخزَّن الخطوط الأساسية في .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
تحدد ملفات إعداد أداة الاختبار كيفية استدعاء أطر العمل الخارجية باستخدام أعباء العمل نفسها، وقياس نتائجها باستخدام المنهجية نفسها.
نتائج الاختبارات المعيارية
النتائج المنشورة التي تقارن 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 3.5 Flash-Lite (وليست محاكاة)
- إعدادات حتمية:
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-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 للاطلاع على:
- تعريفات أعباء العمل المخصصة
- دليل تأليف أدوات الاختبار
- أنماط التكامل مع CI
- تتبع النتائج التاريخية
السابق: ← تنفيذ التعليمات البرمجية | التالي: الأدوات ACP →