الصورة الرمزية الخاصة بـ Aymeric Roucher


ليرة تركية؛ د: ScreenEnv هي مكتبة Python قوية تتيح لك إنشاء بيئات سطح مكتب Ubuntu معزولة في حاويات Docker لاختبار ونشر وكلاء واجهة المستخدم الرسومية (المعروفين أيضًا باسم وكلاء استخدام الكمبيوتر). بفضل الدعم المدمج لبروتوكول سياق النموذج (MCP)، لم يكن من السهل أبدًا نشر وكلاء سطح المكتب الذين يمكنهم رؤية التطبيقات الحقيقية والنقر عليها والتفاعل معها.

ما هو ScreenEnv؟



تخيل أنك بحاجة إلى أتمتة مهام سطح المكتب، أو اختبار تطبيقات واجهة المستخدم الرسومية، أو إنشاء وكيل ذكاء اصطناعي يمكنه التفاعل مع البرامج. يستخدم هذا ليتطلب إعدادات VM معقدة وأطر أتمتة هشة.

يقوم ScreenEnv بتغيير هذا من خلال توفير ملف بيئة سطح المكتب ذات وضع الحماية الذي يعمل في حاوية Docker. فكر في الأمر كجلسة سطح مكتب افتراضية كاملة يمكن للتعليمات البرمجية الخاصة بك التحكم فيها بشكل كامل – ليس فقط النقر على الأزرار وكتابة النص، ولكن إدارة تجربة سطح المكتب بالكامل بما في ذلك تشغيل التطبيقات وتنظيم النوافذ والتعامل مع الملفات وتنفيذ أوامر المحطة الطرفية وتسجيل الجلسة بأكملها.

لماذا ScreenEnv؟

  • 🖥️ التحكم الكامل بسطح المكتب: أتمتة كاملة للماوس ولوحة المفاتيح، وإدارة النوافذ، وتشغيل التطبيقات، وعمليات الملفات، والوصول إلى المحطة الطرفية، وتسجيل الشاشة
  • 🤖 أوضاع التكامل المزدوج: دعم كل من بروتوكول السياق النموذجي (MCP) لأنظمة الذكاء الاصطناعي وواجهة برمجة تطبيقات Sandbox المباشرة – التكيف مع أي وكيل أو منطق الواجهة الخلفية
  • 🐳 عامل ميناء الأصلي: لا يوجد إعداد VM معقد – فقط Docker. البيئة معزولة وقابلة للتكرار ويمكن نشرها بسهولة في أي مكان في أقل من 10 ثوانٍ. دعم معمارية AMD64 وARM64.

🎯 إعداد سطر واحد

from screenenv import Sandbox
sandbox = Sandbox()  

نهجان التكامل

يوفر ScreenEnv طريقتان متكاملتان للتكامل مع وكلائك وأنظمة الواجهة الخلفية لديك، مما يتيح لك المرونة في اختيار النهج الذي يناسب بنيتك بشكل أفضل:

الخيار 1: واجهة Sandbox API المباشرة

مثالي لأطر عمل الوكلاء المخصصة، أو الواجهات الخلفية الموجودة، أو عندما تحتاج إلى تحكم دقيق:

from screenenv import Sandbox


sandbox = Sandbox(headless=False)
sandbox.launch("xfce4-terminal")
sandbox.write("echo 'Custom agent logic'")
screenshot = sandbox.screenshot()
image = Image.open(BytesIO(screenshot_bytes))
...
sandbox.close()

الخيار 2: تكامل خادم MCP

مثالية لأنظمة الذكاء الاصطناعي التي تدعم بروتوكول السياق النموذجي:

from screenenv import MCPRemoteServer
from mcp import ClientSession
from mcp.client.streamable_http import streamablehttp_client


server = MCPRemoteServer(headless=False)
print(f"MCP Server URL: server.server_url")


async def mcp_session():
    async with streamablehttp_client(server.server_url) as streams:
        async with ClientSession(*streams) as session:
            await session.initialize()
            print(await session.list_tools())

            response = await session.call_tool("screenshot", )
            image_bytes = base64.b64decode(response.content[0].data)
            image = Image.open(BytesIO(image_bytes))

server.close()

يعني هذا النهج المزدوج أن ScreenEnv يتكيف مع البنية الأساسية الحالية لديك بدلاً من إجبارك على تغيير بنية الوكيل لديك.

✨ قم بإنشاء وكيل سطح المكتب باستخدام screenenv وsmolagents

screenenv يدعم أصلا smolagents، مما يجعل من السهل إنشاء وكيل سطح المكتب المخصص الخاص بك للتشغيل الآلي. فيما يلي كيفية إنشاء وكيل سطح المكتب الخاص بك والمدعوم بالذكاء الاصطناعي في بضع خطوات فقط:


1. اختر النموذج الخاص بك

اختر VLM الخلفية التي تريد تشغيل وكيلك بها.

import os

from smolagents import OpenAIServerModel
model = OpenAIServerModel(
    model_id="gpt-4.1",
    api_key=os.getenv("OPENAI_API_KEY"),
)


from smolagents import HfApiModel
model = HfApiModel(
    model_id="Qwen/Qwen2.5-VL-7B-Instruct",
    token=os.getenv("HF_TOKEN"),
    provider="nebius",
)


from smolagents import TransformersModel
model = TransformersModel(
    model_id="Qwen/Qwen2.5-VL-7B-Instruct",
    device_map="auto",
    torch_dtype="auto",
    trust_remote_code=True,
)


from smolagents import LiteLLMModel
model = LiteLLMModel(model_id="anthropic/claude-sonnet-4-20250514")



2. حدد وكيل سطح المكتب المخصص الخاص بك

يرث من DesktopAgentBase وتنفيذ _setup_desktop_tools طريقة لبناء مساحة العمل الخاصة بك!

from screenenv import DesktopAgentBase, Sandbox
from smolagents import Model, Tool, tool
from smolagents.monitoring import LogLevel
from typing import List

class CustomDesktopAgent(DesktopAgentBase):
    """Agent for desktop automation"""

    def __init__(
        self,
        model: Model,
        data_dir: str,
        desktop: Sandbox,
        tools: List[Tool] | None = None,
        max_steps: int = 200,
        verbosity_level: LogLevel = LogLevel.INFO,
        planning_interval: int | None = None,
        use_v1_prompt: bool = False,
        **kwargs,
    ):
        super().__init__(
            model=model,
            data_dir=data_dir,
            desktop=desktop,
            tools=tools,
            max_steps=max_steps,
            verbosity_level=verbosity_level,
            planning_interval=planning_interval,
            use_v1_prompt=use_v1_prompt,
            **kwargs,
        )

        
        
        
        
        

    def _setup_desktop_tools(self) -> None:
        """Define your custom tools here."""
        
        
        @tool
        def click(x: int, y: int) -> str:
            """
            Clicks at the specified coordinates.
            Args:
                x: The x-coordinate of the click
                y: The y-coordinate of the click
            """
            self.desktop.left_click(x, y)
            
            return f"Clicked at (x, y)"
        
        self.tools["click"] = click
        

        @tool
        def write(text: str) -> str:
            """
            Types the specified text at the current cursor position.
            Args:
                text: The text to type
            """
            self.desktop.write(text, delay_in_ms=10)
            return f"Typed text: 'text'"

        self.tools["write"] = write

        @tool
        def press(key: str) -> str:
            """
            Presses a keyboard key or combination of keys
            Args:
                key: The key to press (e.g. "enter", "space", "backspace", etc.) or a multiple keys string to press, for example "ctrl+a" or "ctrl+shift+a".
            """
            self.desktop.press(key)
            return f"Pressed key: key"

        self.tools["press"] = press
        
        @tool
        def open(file_or_url: str) -> str:
            """
            Directly opens a browser with the specified url or opens a file with the default application.
            Args:
                file_or_url: The URL or file to open
            """

            self.desktop.open(file_or_url)
            
            self.logger.log(f"Opening: file_or_url")
            return f"Opened: file_or_url"

        @tool
        def launch_app(app_name: str) -> str:
            """
            Launches the specified application.
            Args:
                app_name: The name of the application to launch
            """
            self.desktop.launch(app_name)
            return f"Launched application: app_name"

        self.tools["launch_app"] = launch_app

        ... 

3. قم بتشغيل الوكيل على مهمة سطح المكتب

from screenenv import Sandbox


sandbox = Sandbox(headless=False, resolution=(1920, 1080))


agent = CustomDesktopAgent(
    model=model,
    data_dir="data",
    desktop=sandbox,
)


task = "Open LibreOffice, write a report of approximately 300 words on the topic ‘AI Agent Workflow in 2025’, and save the document."

result = agent.run(task)
print(f"📄 Result: result")

sandbox.close()

إذا واجهت خطأ في الوصول إلى عامل الإرساء، فيمكنك محاولة تشغيل الوكيل باستخدام sudo -E python -m test.py أو قم بإضافة المستخدم الخاص بك إلى docker مجموعة.

💡 للحصول على تنفيذ شامل، راجع مصدر CustomDesktopAgent هذا على GitHub.

ابدأ اليوم


pip install screenenv


git clone git@github.com:huggingface/screenenv.git
cd screenenv
python -m examples.desktop_agent

ما هي الخطوة التالية؟

يهدف ScreenEnv إلى التوسع إلى ما هو أبعد من Linux لدعمه أندرويد، وماك، وويندوز، وفتح أتمتة حقيقية لواجهة المستخدم الرسومية عبر الأنظمة الأساسية. سيمكن هذا المطورين والباحثين من بناء وكلاء يمكنهم التعميم عبر البيئات بأقل قدر من الإعداد.

هذه التطورات تمهد الطريق للإبداع بيئات رملية قابلة للتكرار مثالية للقياس والتقييم.

المستودع: https://github.com/huggingface/screenenv

شاركها.
اترك تعليقاً