تنفيذ التعليمات البرمجية
يوفّر ADK-Rust تنفيذ التعليمات البرمجية من خلال حزمتين:
adk-sandbox— بيئة تشغيل معزولة للتنفيذ معProcessBackend(عملية فرعية) وWasmBackend(wasmtime)adk-code— سلسلة أدوات واعية باللغة معRustExecutor(خط أنابيب الفحص والبناء والتنفيذ) وCodeTool
هذا الفصل مقصود: يتولى adk-sandbox العزل، بينما يتولى adk-code التجميع والمنطق الخاص باللغة.
البدء السريع
use adk_code::{CodeTool, RustExecutor, RustExecutorConfig};
use adk_sandbox::ProcessBackend;
use std::sync::Arc;
let backend = Arc::new(ProcessBackend::default());
let executor = RustExecutor::new(backend, RustExecutorConfig::default());
let tool = Arc::new(CodeTool::new(executor));
let agent = LlmAgentBuilder::new("code_agent")
.instruction("Execute Rust code when asked to compute something.")
.model(model)
.tool(tool)
.build()?;
للتنفيذ المباشر في البيئة المعزولة دون خط أنابيب تجميع Rust:
use adk_sandbox::{SandboxTool, ProcessBackend};
use std::sync::Arc;
let backend = Arc::new(ProcessBackend::default());
let tool = Arc::new(SandboxTool::new(backend));
البنية
يضيف CodeTool خط أنابيب لتجميع Rust (الفحص بحثًا عن الأخطاء، وبناء الملف الثنائي، ثم التنفيذ). وينفّذ SandboxTool التعليمات البرمجية مباشرةً من خلال الواجهة الخلفية دون تجميع.
مصفوفة إمكانات الواجهات الخلفية
| القدرة | ProcessBackend | WasmBackend | EmbeddedJsExecutor | منفّذات Monty | DockerExecutor |
|---|---|---|---|---|---|
| المهلة الزمنية | مفروضة | مفروضة | مفروضة | مفروضة (داخل الآلة الافتراضية) | مفروضة |
| حد الذاكرة | غير مفروض | مفروض | غير مفروض | مفروض | حدود الحاوية |
| عزل الشبكة | غير مفروض | لا توجد شبكة WASI | لا يتوفر API | لا يتوفر API | قابل للتهيئة |
| عزل نظام الملفات | غير مفروض | لا توجد عمليات preopens لـ WASI | لا يتوفر API | نقاط التحميل الممنوحة فقط | قابل للتهيئة |
| عزل البيئة | env_clear() | كامل | لا يتوفر API | الخريطة الممنوحة فقط | قابل للتهيئة |
| اللغات | Rust، Python، JS، TS، الأوامر | Wasm | JavaScript | Python | Python، Node.js |
ProcessBackend صريحة بشأن ما لا تفرضه. استخدم WasmBackend لوضع الحماية الكامل أو DockerExecutor للعزل على مستوى الحاوية.
الأدوات
| الأداة | الحزمة | الاسم | اللغة | النطاقات |
|---|---|---|---|---|
CodeTool | adk-code | code_exec | Rust | code:execute، code:execute:rust |
SandboxTool | adk-sandbox | sandbox_exec | متعددة اللغات | code:execute |
PythonCodeTool | adk-tool | python_code | Python (CPython مدعوم بالحاويات) | code:execute، code:execute:container |
MontyPythonCodeTool | adk-tool | monty_python_code | Python (Monty داخل العملية) | code:execute |
CodeTool وSandboxTool وMontyPythonCodeTool تتبع نمط الأخطاء باعتبارها معلومات: تُعاد الأخطاء بصيغة JSON مهيكلة مع حقل "status"، ولا تُعاد مطلقًا بصيغة ToolError. يتيح ذلك للوكلاء تحليل حالات الفشل. تُعد PythonCodeTool استثناءً — إذ تُعيد ToolError عند غياب الوسيطة code وعند حالات الفشل على مستوى المنفّذ؛ أما حالات الفشل على مستوى البرنامج النصي فقط فتظهر كبيانات.
للاطلاع على التنفيذ داخل العملية باستخدام Python — أوضاع التنفيذ لمرة واحدة وREPL، ومنح الوصول إلى نظام التشغيل، ووظائف المضيف — راجع تنفيذ تعليمات Python البرمجية.
التشخيصات المهيكلة
تُعيد CodeTool تشخيصات المترجم المحللة لأخطاء تجميع Rust:
{
"status": "compile_error",
"diagnostics": [
{
"level": "error",
"message": "expected `;`",
"code": "E0308",
"spans": [{ "file_name": "main.rs", "line_start": 3, "column_start": 15 }]
}
],
"stderr": "error: expected `;`"
}
تتضمن استجابات النجاح مخرجات مهيكلة مستخرجة من أداة التشغيل:
{
"status": "success",
"stdout": "",
"output": { "greeting": "hello" },
"exit_code": 0,
"duration_ms": 42
}
عقد كود Rust
يجب أن يوفّر كود المستخدم fn run(input: serde_json::Value) -> serde_json::Value. وتغلفه أداة التشغيل باستخدام fn main() وتحليل stdin وتسلسل stdout. يجب ألا يعرّف كود المستخدم fn main() أو يستخدم سمات على مستوى الصندوق (#![...]).
الترحيل من API السابق
تمت إزالة أنواع adk-code السابقة (CodeExecutor وExecutionRequest وRustSandboxExecutor) وRustCodeTool الخاصة بـadk-tool. استخدم الأنواع الجديدة بدلًا منها:
| المُزال | البديل | الحزمة |
|---|---|---|
RustCodeTool (تمت إزالته في 0.8.0) | CodeTool | adk-code |
RustSandboxExecutor | RustExecutor | adk-code |
ExecutionRequest | ExecRequest | adk-sandbox |
ExecutionResult | ExecResult | adk-sandbox |
CodeExecutor | SandboxBackend | adk-sandbox |
راجع adk_code::compat للاطلاع على دليل الترحيل الكامل.
المتصفح JavaScript
يُعد تنفيذ صفحات المتصفح عبر JavaScript باستخدام adk-browser قدرةً منفصلة. ويعمل داخل سياق الصفحة البعيدة، ولا يُعد جزءًا من بنية تنفيذ التعليمات البرمجية. استخدم أدوات adk-browser لأتمتة الويب والتفاعل مع الصفحة.
التكامل مع Studio
يستخدم ADK Studio خط أنابيب تنفيذ التعليمات البرمجية نفسه:
- المشغّل المباشر: ينفّذ Rust الذي ألّفه المستخدم عبر
RustExecutor+ProcessBackend - إنشاء التعليمات البرمجية: يضمّن جسم Rust نفسه في المشاريع المُنشأة
- إعدادات البيئة المعزولة: تُطابق الإمكانات التي يمكن للواجهة الخلفية فرضها