تنفيذ التعليمات البرمجية

يوفّر 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 التعليمات البرمجية مباشرةً من خلال الواجهة الخلفية دون تجميع.

مصفوفة إمكانات الواجهات الخلفية

القدرةProcessBackendWasmBackendEmbeddedJsExecutorمنفّذات MontyDockerExecutor
المهلة الزمنيةمفروضةمفروضةمفروضةمفروضة (داخل الآلة الافتراضية)مفروضة
حد الذاكرةغير مفروضمفروضغير مفروضمفروضحدود الحاوية
عزل الشبكةغير مفروضلا توجد شبكة WASIلا يتوفر APIلا يتوفر APIقابل للتهيئة
عزل نظام الملفاتغير مفروضلا توجد عمليات preopens لـ WASIلا يتوفر APIنقاط التحميل الممنوحة فقطقابل للتهيئة
عزل البيئةenv_clear()كامللا يتوفر APIالخريطة الممنوحة فقطقابل للتهيئة
اللغاتRust، Python، JS، TS، الأوامرWasmJavaScriptPythonPython، Node.js

ProcessBackend صريحة بشأن ما لا تفرضه. استخدم WasmBackend لوضع الحماية الكامل أو DockerExecutor للعزل على مستوى الحاوية.

الأدوات

الأداةالحزمةالاسماللغةالنطاقات
CodeTooladk-codecode_execRustcode:execute، code:execute:rust
SandboxTooladk-sandboxsandbox_execمتعددة اللغاتcode:execute
PythonCodeTooladk-toolpython_codePython (CPython مدعوم بالحاويات)code:execute، code:execute:container
MontyPythonCodeTooladk-toolmonty_python_codePython (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)CodeTooladk-code
RustSandboxExecutorRustExecutoradk-code
ExecutionRequestExecRequestadk-sandbox
ExecutionResultExecResultadk-sandbox
CodeExecutorSandboxBackendadk-sandbox

راجع adk_code::compat للاطلاع على دليل الترحيل الكامل.

المتصفح JavaScript

يُعد تنفيذ صفحات المتصفح عبر JavaScript باستخدام adk-browser قدرةً منفصلة. ويعمل داخل سياق الصفحة البعيدة، ولا يُعد جزءًا من بنية تنفيذ التعليمات البرمجية. استخدم أدوات adk-browser لأتمتة الويب والتفاعل مع الصفحة.

التكامل مع Studio

يستخدم ADK Studio خط أنابيب تنفيذ التعليمات البرمجية نفسه:

  • المشغّل المباشر: ينفّذ Rust الذي ألّفه المستخدم عبر RustExecutor + ProcessBackend
  • إنشاء التعليمات البرمجية: يضمّن جسم Rust نفسه في المشاريع المُنشأة
  • إعدادات البيئة المعزولة: تُطابق الإمكانات التي يمكن للواجهة الخلفية فرضها