ScreenEnv- Triển khai Agent Desktop full stack của bạn
Bài viết này thảo luận về cách sử dụng ScreenEnv để triển khai một tác nhân desktop full stack.
- 7 min read
ScreenEnv: Triển Khai Agent Desktop Full Stack Của Bạn
Tóm tắt: ScreenEnv là một thư viện Python mạnh mẽ cho phép bạn tạo môi trường desktop Ubuntu biệt lập trong các container Docker để kiểm tra và triển khai GUI Agent (hay còn gọi là các agent Sử Dụng Máy Tính). Với sự hỗ trợ tích hợp cho Model Context Protocol (MCP), việc triển khai các agent desktop có thể nhìn, nhấp và tương tác với các ứng dụng thực chưa bao giờ dễ dàng đến thế.
ScreenEnv Là Gì?
Hãy tưởng tượng bạn cần tự động hóa các tác vụ trên desktop, kiểm tra các ứng dụng GUI hoặc xây dựng một AI agent có thể tương tác với phần mềm. Trước đây, điều này đòi hỏi các thiết lập VM phức tạp và các framework tự động hóa dễ hỏng.
ScreenEnv thay đổi điều này bằng cách cung cấp một môi trường desktop sandbox chạy trong một container Docker. Hãy nghĩ về nó như một phiên desktop ảo hoàn chỉnh mà code của bạn có thể kiểm soát hoàn toàn - không chỉ nhấp vào các nút và nhập văn bản, mà còn quản lý toàn bộ trải nghiệm desktop bao gồm khởi chạy các ứng dụng, sắp xếp các cửa sổ, xử lý các tệp và thực thi các lệnh terminal, và ghi lại toàn bộ phiên.
Tại Sao Nên Sử Dụng ScreenEnv?
- 🖥️ Kiểm Soát Desktop Toàn Diện: Tự động hóa hoàn toàn chuột và bàn phím, quản lý cửa sổ, khởi chạy ứng dụng, thao tác tệp, truy cập terminal và ghi lại màn hình.
- 🤖 Chế Độ Tích Hợp Kép: Hỗ trợ cả Model Context Protocol (MCP) cho các hệ thống AI và API Sandbox trực tiếp - thích ứng với bất kỳ agent hoặc logic backend nào.
- 🐳 Docker Native: Không cần thiết lập VM phức tạp - chỉ cần Docker. Môi trường được cô lập, có thể tái tạo và dễ dàng triển khai ở bất cứ đâu trong vòng chưa đến 10 giây. Hỗ trợ kiến trúc AMD64 và ARM64.
🎯 Thiết Lập Một Dòng Lệnh
from screenenv import Sandbox
sandbox = Sandbox() # Chỉ vậy thôi!
Hai Phương Pháp Tích Hợp
ScreenEnv cung cấp hai cách bổ sung để tích hợp với các agent và hệ thống backend của bạn, mang lại cho bạn sự linh hoạt để chọn phương pháp phù hợp nhất với kiến trúc của bạn:
Option 1: API Sandbox Trực Tiếp
Hoàn hảo cho các framework agent tùy chỉnh, các backend hiện có hoặc khi bạn cần kiểm soát chi tiết:
from screenenv import Sandbox
# Kiểm soát lập trình trực tiếp
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()
# Nếu close() không được gọi, bạn có thể cần phải tắt container theo cách thủ công.
Option 2: Tích Hợp Máy Chủ MCP
Lý tưởng cho các hệ thống AI hỗ trợ Model Context Protocol:
from screenenv import MCPRemoteServer
from mcp import ClientSession
from mcp.client.streamable_http import streamablehttp_client
# Khởi động máy chủ MCP để tích hợp AI
server = MCPRemoteServer(headless=False)
print(f"MCP Server URL: {server.server_url}")
# Các AI agent giờ đây có thể kết nối và điều khiển desktop
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()
# Nếu close() không được gọi, bạn có thể cần phải tắt container theo cách thủ công.
Phương pháp kép này có nghĩa là ScreenEnv thích ứng với cơ sở hạ tầng hiện có của bạn thay vì buộc bạn phải thay đổi kiến trúc agent của mình.
✨ Tạo Agent Desktop Với screenenv và smolagents
screenenv hỗ trợ tự nhiên smolagents, giúp bạn dễ dàng xây dựng Agent Desktop tùy chỉnh của riêng mình để tự động hóa. Dưới đây là cách tạo AI-powered Desktop Agent của riêng bạn chỉ trong một vài bước:
1. Chọn Mô Hình Của Bạn
Chọn VLM backend bạn muốn cung cấp năng lượng cho agent của mình.
import os
from smolagents import OpenAIServerModel
model = OpenAIServerModel(
model_id="gpt-4o-mini",
api_key=os.getenv("OPENAI_API_KEY"),
)
# Inference Endpoints
from smolagents import HfApiModel
model = HfApiModel(
model_id="Qwen/Qwen2.5-VL-7B-Instruct",
token=os.getenv("HF_TOKEN"),
provider="nebius",
)
# Transformer models
from smolagents import TransformersModel
model = TransformersModel(
model_id="Qwen/Qwen2.5-VL-7B-Instruct",
device_map="auto",
torch_dtype="auto",
trust_remote_code=True,
)
# Other providers
from smolagents import LiteLLMModel
model = LiteLLMModel(model_id="anthropic/claude-sonnet-4-20250514")
# xem smolagents để lấy danh sách các trình kết nối mô hình có sẵn
2. Định Nghĩa Agent Desktop Tùy Chỉnh Của Bạn
Kế thừa từ DesktopAgentBase và triển khai phương thức _setup_desktop_tools để xây dựng không gian hành động của riêng bạn!
from screenenv import DesktopAgentBase, Sandbox
from smolagents import Model, Tool, tool
from smolagents.monitoring import LogLevel
from typing import List
class CustomDesktopAgent(DesktopAgentBase):
"""Agent cho tự động hóa desktop"""
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,
)
# TÙY CHỌN: Thêm một mẫu lời nhắc tùy chỉnh - xem src/screenenv/desktop_agent/desktop_agent_base.py để biết thêm chi tiết về mẫu lời nhắc mặc định
# self.prompt_templates["system_prompt"] = CUSTOM_PROMPT_TEMPLATE.replace(
# "<<resolution_x>>", str(self.width)
# ).replace("<<resolution_y>>", str(self.height))
# Quan trọng: Điều chỉnh lời nhắc dựa trên không gian hành động của bạn để cải thiện kết quả.
def _setup_desktop_tools(self) -> None:
"""Định nghĩa các công cụ tùy chỉnh của bạn ở đây."""
@tool
def click(x: int, y: int) -> str:
"""
Nhấp vào tọa độ được chỉ định.
Args:
x: Tọa độ x của cú nhấp chuột
y: Tọa độ y của cú nhấp chuột
"""
self.desktop.left_click(x, y)
# self.click_coordinates = (x, y) để thêm tọa độ nhấp vào ảnh chụp màn hình quan sát
return f"Đã nhấp vào ({x}, {y})"
self.tools["click"] = click
@tool
def write(text: str) -> str:
"""
Nhập văn bản được chỉ định tại vị trí con trỏ hiện tại.
Args:
text: Văn bản để nhập
"""
self.desktop.write(text, delay_in_ms=10)
return f"Đã nhập văn bản: '{text}'"
self.tools["write"] = write
@tool
def press(key: str) -> str:
"""
Nhấn một phím bàn phím hoặc tổ hợp phím
Args:
key: Phím cần nhấn (ví dụ: "enter", "space", "backspace", v.v.) hoặc một chuỗi nhiều phím để nhấn, ví dụ: "ctrl+a" hoặc "ctrl+shift+a".
"""
self.desktop.press(key)
return f"Đã nhấn phím: {key}"
self.tools["press"] = press
@tool
def open(file_or_url: str) -> str:
"""
Mở trực tiếp trình duyệt với url được chỉ định hoặc mở một tệp với ứng dụng mặc định.
Args:
file_or_url: URL hoặc tệp để mở
"""
self.desktop.open(file_or_url)
# Cho nó thời gian để tải
self.logger.log(f"Đang mở: {file_or_url}")
return f"Đã mở: {file_or_url}"
@tool
def launch_app(app_name: str) -> str:
"""
Khởi chạy ứng dụng được chỉ định.
Args:
app_name: Tên của ứng dụng để khởi chạy
"""
self.desktop.launch(app_name)
return f"Đã khởi chạy ứng dụng: {app_name}"
self.tools["launch_app"] = launch_app
... # Tiếp tục triển khai không gian hành động của riêng bạn.
3. Chạy Agent Trên Một Tác Vụ Desktop
from screenenv import Sandbox
# Xác định môi trường sandbox của bạn
sandbox = Sandbox(headless=False, resolution=(1280, 720))
# Tạo agent của bạn
agent = CustomDesktopAgent(
model=model,
data_dir="data",
desktop=sandbox,
)
# Chạy một tác vụ
task = "Mở LibreOffice, viết một báo cáo khoảng 300 từ về chủ đề ‘Quy trình AI Agent năm 2025’ và lưu tài liệu."
result = agent.run(task)
print(f"📄 Kết quả: {result}")
sandbox.close()
💡 Để triển khai toàn diện, hãy xem CustomDesktopAgent nguồn này trên GitHub.
Bắt Đầu Ngay Hôm Nay
# Cài đặt ScreenEnv
pip install screenenv
# Thử các ví dụ
git clone git@github.com:huggingface/screenenv.git
cd screenenv
python -m examples.desktop_agent
# sử dụng `sudo -E python -m examples.desktop_agent` nếu bạn không ở trong nhóm `docker`
Những Bước Tiếp Theo?
ScreenEnv hướng đến việc mở rộng ra ngoài Linux để hỗ trợ Android, macOS và Windows, mở khóa tự động hóa GUI đa nền tảng thực sự. Điều này sẽ cho phép các nhà phát triển và nhà nghiên cứu xây dựng các agent tổng quát hóa trên các môi trường với thiết lập tối thiểu.
Những tiến bộ này mở đường cho việc tạo ra môi trường sandbox, có thể tái tạo lý tưởng cho việc benchmark và đánh giá.
Repository: https://github.com/huggingface/screenenv
Link bài viết gốc
- Tags:
- Ai
- July 10, 2025
- Huggingface.co