متقدم
⏱ ٥٥ دقيقة قراءة
© بوابة الذكاء الاصطناعي ٢٠٢٦-٠٤-١٩
اخرج من المحطة إلى واجهة المستخدم الرسومية. تعلم كيفية تنسيق تدفقات العمل للرؤية-اللغة-الفعل (VLA) لتمكين الذكاء الاصطناعي من التنقل بشكل مستقل في سطح المكتب، والتفاعل مع البرامج القديمة، واستخراج البيانات المرئية.
المتطلبات الأساسية
- Python ٣.١٢+ (مع
pip) - وصول إلى Anthropic Tier ٣+ API (لمعالجة صور Claude 4.5 بمعدل مرتفع)
- Docker (مطلوب بشكل صارم لعزل الوكيل لمنع التعديلات العرضية على نظام المضيف)
- الإلمام بتعيين إحداثيات الشاشة وترميز الصور بصيغة base64
ما الذي نبنيه
تتفاعل LLMs القياسية عبر تدفقات النصوص. في هذا الدرس التقني لعام ٢٠٢٦، نقوم ببناء وكيل مرئي مستقل. باستخدام بنية واجهة برمجة التطبيقات “استخدام الكمبيوتر” المُحدثة لـ Claude 4.5 من Anthropic، سنقوم بإنشاء حلقة Python تأخذ لقطة شاشة، وترسلها إلى الذكاء الاصطناعي، وتفسر الإجراءات المقصودة من الذكاء الاصطناعي (مثل تحريك الماوس إلى إحداثيات X/Y محددة أو كتابة نص)، وتنفذها باستخدام PyAutoGUI.
هذا يحل بشكل أساسي مشكلة “البرامج القديمة”، مما يسمح للذكاء الاصطناعي بأتمتة أدوات المؤسسات التي تفتقر إلى واجهات برمجة التطبيقات ببساطة عن طريق “النظر” إلى الشاشة والنقر، تمامًا مثل الإنسان.
إعداد وتحصين البيئة
نظرًا لأن التحكم في واجهة المستخدم الرسومية بالوكيل ينطوي على مخاطر بطبيعته، ننصح بشدة بتشغيل هذا داخل حاوية Ubuntu معزولة باستخدام إطار افتراضي (Xvfb). للاختبار المحلي، قم بتثبيت مكتبات التحكم اللازمة.
pip install anthropic pyautogui mss opencv-python python-dotenvقم بتكوين متغيرات البيئة الخاصة بك. لا تقم بتشغيل هذا البرنامج النصي بصلاحيات الجذر على جهازك الأساسي.
# .env file
ANTHROPIC_API_KEY=sk-ant-your-api-key-here
SAFE_MODE=enabled # علامة مخصصة لطلب تأكيد بشري قبل النقر
الخطوة ١: حلقة السياق المرئي
يحتاج الوكيل إلى “عيون”. نستخدم mss لالتقاط الشاشة بسرعة وترميزها إلى base64، وهو التنسيق القياسي المطلوب من قبل نقاط النهاية للرؤية متعددة الوسائط لعام ٢٠٢٦.
import mss
import base64
import pyautogui
from PIL import Image
import io
def capture_screen_base64():
with mss.mss() as sct:
# التقاط الشاشة الرئيسية
monitor = sct.monitors[1]
sct_img = sct.grab(monitor)
# تحويل إلى صورة PIL قياسية
img = Image.frombytes("RGB", sct_img.size, sct_img.bgra, "raw", "BGRX")
# تصغير الصورة قليلاً لتوفير الرموز وتقليل وقت الاستجابة
img.thumbnail((1280, 720))
buffered = io.BytesIO()
img.save(buffered, format="JPEG", quality=85)
return base64.b64encode(buffered.getvalue()).decode('utf-8'), img.size
الخطوة ٢: تعريف أداة “استخدام الكمبيوتر”
نقوم بتكوين عميل Anthropic، مع تحديد أداة تسمح للنموذج بإملاء إجراءات الماوس ولوحة المفاتيح بناءً على استنتاجه المكاني المتقدم.
import anthropic
client = anthropic.Anthropic()
computer_tool = {
"name": "computer_interaction",
"description": "Execute physical keyboard and mouse commands on the desktop.",
"input_schema": {
"type": "object",
"properties": {
"action": {"type": "string", "enum": ["click", "type", "scroll", "move"]},
"coordinates": {"type": "array", "items": {"type": "integer"}, "description": "[x, y] coordinates for mouse actions"},
"text": {"type": "string", "description": "Text to type if action is 'type'"}
},
"required": ["action"]
}
}
الخطوة ٣: محرك التنسيق المستقل
الآن، نبني الحلقة التكرارية. يشاهد الوكيل الشاشة، يقرر الخطوة المنطقية التالية لتحقيق هدفك، يخرج استدعاء الأداة، وينفذ برنامجنا النصي أوامر PyAutoGUI فعليًا.
def execute_agentic_task(objective):
print(f"Task Started: {objective}")
messages = [{"role": "user", "content": [{"type": "text", "text": objective}]}]
for step in range(10): # حد أقصى صارم لمنع الحلقات اللانهائية
b64_image, current_resolution = capture_screen_base64()
# إلحاق الحالة المرئية الحالية بالموجه
messages[-1]["content"].append({
"type": "image",
"source": {"type": "base64", "media_type": "image/jpeg", "data": b64_image}
})
response = client.messages.create(
model="claude-4-5-sonnet-20260215", # تم التحديث إلى النموذج الرائد لعام ٢٠٢٦
max_tokens=1024,
tools=[computer_tool],
messages=messages
)
# التحقق مما إذا كان النموذج قد قرر استخدام الكمبيوتر
if response.stop_reason == "tool_use":
tool_call = response.content[-1]
action = tool_call.input["action"]
print(f"Agent executing: {action}")
if action == "click":
x, y = tool_call.input["coordinates"]
# إعادة قياس الإحداثيات إلى الدقة الأصلية
pyautogui.click(x, y)
elif action == "type":
pyautogui.write(tool_call.input["text"], interval=0.05)
# إلحاق نتيجة الأداة بالذاكرة ليعرف الوكيل أنها نجحت
messages.append({"role": "assistant", "content": [tool_call]})
messages.append({
"role": "user",
"content": [{"type": "tool_result", "tool_use_id": tool_call.id, "content": "Success"}]
})
else:
print("Task Completed by Agent.")
break
execute_agentic_task("Open the calculator app, type 500 * 42, and click equals.")
OpenCV للتحقق من أن الزر المستهدف موجود بالضبط عند إحداثيات X/Y قبل إطلاق حدث pyautogui.click().اختبار وكيل واجهة المستخدم الخاص بك
قم بتشغيل البرنامج النصي الخاص بك في مساحة عمل نظيفة. تأكد من أن نافذة المحطة الطرفية الخاصة بك لا تحجب التطبيق الذي يحاول الذكاء الاصطناعي التفاعل معه.
python visual_agent.pyسترى الماوس يتحرك بشكل مستقل بينما يقوم الذكاء الاصطناعي بحساب الشبكة المرئية وتنفيذ أوامر نظام التشغيل في الوقت الفعلي.
التوسع إلى الإنتاج المؤسسي
- العزل الأصلي للمتصفح: بدلاً من التحكم في نظام التشغيل المضيف، اربط هذا المنطق بحالة Playwright بدون رأس لأتمتة الويب القابلة للتوسع.
- أشجار الإجراءات غير المتزامنة: اجمع هذا مع LangGraph ليكون لديك “وكيل مدير” يحلل الشاشة، بينما “وكلاء العمال” ينفذون ضغطات المفاتيح السريعة.
- استعادة الحالة: برمج الوكيل للتعرف على النوافذ المنبثقة للخطأ بصريًا وتنفيذ إجراءات الاسترداد بشكل مستقل (إغلاق النافذة المنبثقة وإعادة المحاولة).