بيئات اختبار الوكلاء المعتمدة على Docker
إنشاء حاويات مؤقتة قابلة للتخلص منها لتنفيذ التعليمات البرمجية التي ينشئها الوكيل.
بيئات اختبار الوكلاء المعتمدة على Docker درس مجاني في AI Agents على CoddyKit. هذا هو الدرس 1 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في AI Agents، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة AI Agents 4 دروس في المجموع.
لماذا تحتاج الوكلاء إلى بيئات sandbox؟
عندما ينفذ الوكيل تعليمات برمجية كتبها LLM، تكون تلك التعليمات غير موثوقة. فقد تحاول قراءة ملفات حساسة، أو إنشاء اتصالات صادرة، أو استهلاك موارد غير محدودة.
تعزل بيئة sandbox تنفيذ التعليمات البرمجية، بحيث يظل الضرر محصورًا بصرف النظر عما تفعله التعليمات البرمجية.
Docker كطبقة sandbox
توفر حاويات Docker عزلًا خفيفًا على مستوى نظام التشغيل. ويعمل كل مقطع برمجي داخل حاوية جديدة مع حدود صريحة للموارد وقيود على الشبكة.
يتيح docker Python SDK إنشاء الحاويات وإتلافها برمجيًا من داخل وكيلك.
import docker
client = docker.from_env()
print(client.version()['Version'])تشغيل حاوية أساسي
تبدأ client.containers.run() تشغيل حاوية، وتنفّذ أمرًا، وتعيد المخرجات على هيئة بايتات. يؤدي ضبط auto_remove=True إلى تنظيف الحاوية بعد خروجها.
import docker
client = docker.from_env()
output = client.containers.run(
'python:3.12-slim',
'python -c "print(2 + 2)"',
auto_remove=True
)
print(output.decode()) # '4'حدود الذاكرة ووحدة المعالجة المركزية
من دون حدود، يمكن لبرنامج نصي ضار استنفاد ذاكرة المضيف. مرّر mem_limit وnano_cpus للحد من استهلاك الموارد.
إذا تجاوزت العملية mem_limit، تُنهى الحاوية بسبب نفاد الذاكرة، ويُرفع استثناء.
output = client.containers.run(
'python:3.12-slim',
'python -c "x = [0]*10**8"', # tries to allocate ~800 MB
mem_limit='256m',
nano_cpus=1_000_000_000, # 1 CPU
auto_remove=True
)
# Raises docker.errors.ContainerError if OOM-killedتعطيل الشبكة
يمنع ضبط network_disabled=True الحاوية من إجراء أي اتصالات شبكة صادرة أو واردة — وحتى عمليات بحث DNS تفشل. ويوقف ذلك تهريب البيانات واتصالات الاستدعاء من خوادم القيادة والتحكم.
output = client.containers.run(
'python:3.12-slim',
'python -c "import urllib.request; urllib.request.urlopen(\"http://example.com\")"',
network_disabled=True,
auto_remove=True
)
# Raises ContainerError: network unreachableمهلة التنفيذ
قد تؤدي حلقة لا نهائية داخل البيئة المعزولة إلى حظر وكيلك إلى الأبد. مرّر قيمة timeout بالثواني إلى containers.run() لكي ينهي Docker الحاوية بعد انقضاء المهلة.
import docker
from docker.errors import ContainerError
client = docker.from_env()
try:
output = client.containers.run(
'python:3.12-slim',
'python -c "while True: pass"',
mem_limit='256m',
network_disabled=True,
auto_remove=True,
timeout=30
)
except Exception as e:
print(f'Sandbox timeout or error: {e}')دالة مساعدة كاملة للبيئة المعزولة
يؤدي جمع جميع الإعدادات في دالة قابلة لإعادة الاستخدام إلى تسهيل استدعائها من أدوات الوكيل. أعد كلًا من stdout وعلامة حالة، لكي يتمكن الوكيل من التعامل مع حالات الفشل.
import docker
client = docker.from_env()
def run_in_sandbox(code: str, timeout: int = 30) -> dict:
cmd = f'python -c "{code.replace(chr(34), chr(39))}"'
try:
out = client.containers.run(
'python:3.12-slim',
cmd,
mem_limit='256m',
nano_cpus=500_000_000,
network_disabled=True,
auto_remove=True,
timeout=timeout
)
return {'success': True, 'output': out.decode()}
except Exception as e:
return {'success': False, 'error': str(e)}توصيل مساحة عمل مؤقتة
إذا احتاجت التعليمات البرمجية إلى قراءة ملفات إدخال أو كتابة ملفات إخراج، فقم بتوصيل مجلد مؤقت من المضيف بالحاوية. استخدم volumes مع الوضع 'rw' لمساحة العمل، ولا شيء غير ذلك.
import tempfile, os
with tempfile.TemporaryDirectory() as tmpdir:
# Write input data
with open(os.path.join(tmpdir, 'data.txt'), 'w') as f:
f.write('hello sandbox')
output = client.containers.run(
'python:3.12-slim',
'python -c "print(open(\"/workspace/data.txt\").read())"',
volumes={tmpdir: {'bind': '/workspace', 'mode': 'rw'}},
mem_limit='256m',
network_disabled=True,
auto_remove=True
)
print(output.decode())نظام ملفات للقراءة فقط
اضبط read_only=True لتوصيل نظام ملفات الجذر في الحاوية بوضع القراءة فقط. ولا يمكن للتعليمات البرمجية الكتابة إلا إلى وحدات التخزين الموصّلة صراحةً. ويمنع ذلك الكتابة إلى /etc أو /usr أو غيرهما من المسارات الحساسة داخل الصورة.
import tempfile
with tempfile.TemporaryDirectory() as tmpdir:
output = client.containers.run(
'python:3.12-slim',
'python -c "open(\"/output/result.txt\",\"w\").write(str(1+1))"',
volumes={tmpdir: {'bind': '/output', 'mode': 'rw'}},
read_only=True,
mem_limit='256m',
network_disabled=True,
auto_remove=True
)
print(open(f'{tmpdir}/result.txt').read()) # '2'دمج البيئة المعزولة في أداة وكيل
سجّل مشغّل البيئة المعزولة كأداة يمكن لـ LLM استدعاؤها. ينشئ الوكيل التعليمات البرمجية، وتنفّذ الأداة تلك التعليمات بشكل معزول، ثم تنتقل المخرجات إلى خطوة الاستدلال التالية.
tools = [
{
'type': 'function',
'function': {
'name': 'execute_python',
'description': 'Run a Python snippet in an isolated Docker sandbox.',
'parameters': {
'type': 'object',
'properties': {
'code': {'type': 'string', 'description': 'Python code to execute.'}
},
'required': ['code']
}
}
}
]
def handle_tool_call(name, args):
if name == 'execute_python':
return run_in_sandbox(args['code'])معالجة الأخطاء والتنظيف
قد تفشل الحاويات في البدء إذا لم تكن خدمة Docker قيد التشغيل أو إذا لم تكن الصورة مخزنة مؤقتًا. تعامل دائمًا مع docker.errors.DockerException، وتأكد من تنظيف الحاويات حتى عند حدوث استثناءات.
from docker.errors import DockerException, ImageNotFound
def safe_run(code: str) -> dict:
try:
return run_in_sandbox(code)
except ImageNotFound:
# Pull the image first
client.images.pull('python:3.12-slim')
return run_in_sandbox(code)
except DockerException as e:
return {'success': False, 'error': f'Docker unavailable: {e}'}
except Exception as e:
return {'success': False, 'error': str(e)}ما إعداد البيئة المعزولة الأهم لمنع تهريب البيانات؟
يجب أن تمنع بيئة الوكيل المعزولة التعليمات البرمجية المنفّذة من إرسال البيانات المسروقة إلى خادم خارجي. ما معلمة Docker التي تحظر الوصول إلى الشبكة الصادرة مباشرةً؟
مراجعة بيئة Docker المعزولة
توفر البيئات المعزولة القائمة على Docker بيئة تنفيذ آمنة للوكلاء من خلال الجمع بين حدود الذاكرة ووحدة المعالجة المركزية وعزل الشبكة ومهلات التنفيذ وأنظمة الملفات للقراءة فقط.
اجمع هذه الإعدادات في دالة مساعدة قابلة لإعادة الاستخدام، واعرضها كأداة للوكيل حتى يتمكن LLM من تشغيل التعليمات البرمجية المُنشأة بأمان من دون تعريض نظام المضيف للخطر.
الأسئلة الشائعة
هل درس «بيئات اختبار الوكلاء المعتمدة على Docker» مجاني؟
نعم — نص درس «بيئات اختبار الوكلاء المعتمدة على Docker» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة AI Agents، انتقل إلى CoddyKit PRO. تتضمن دورة AI Agents 4 دروس في المجموع.
ماذا ستتعلم في «بيئات اختبار الوكلاء المعتمدة على Docker»؟
إنشاء حاويات مؤقتة قابلة للتخلص منها لتنفيذ التعليمات البرمجية التي ينشئها الوكيل. تتمرن على AI Agents مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ AI Agents؟
لا تُشترط خبرة سابقة. AI Agents على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 1 من أصل 4.
كم من الوقت يستغرق درس «بيئات اختبار الوكلاء المعتمدة على Docker»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس AI Agents هذا؟
نعم. كل درس في AI Agents يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- بيئات اختبار الوكلاء المعتمدة على Docker
- العزل باستخدام الآلات الافتراضية لوكلاء التعليمات البرمجية عالية الأمان
- خدمات E2B وبيئات الاختبار السحابية
- سياسات الأمان لتنفيذ التعليمات البرمجية