Google DeepMind 推出的 Gemini 2.5 Computer Use 模型,讓 AI 真正學會「操作電腦」。這不僅是技術突破,更是自動化的未來。本文將從核心概念、應用場景,到手把手的 Python 實作教學,帶你全面掌握這項強大工具。
你有沒有想過,如果 AI 不僅能跟你對話,還能像一位真人助理,親手「操作」你的電腦或手機應用程式,那會是什麼樣子?它不再只是透過冷冰冰的程式碼傳遞指令,而是能直接看懂畫面,然後點擊按鈕、填寫表單、拖曳檔案。
這聽起來像是科幻電影的情節,但 Google DeepMind 最新發布的 Gemini 2.5 Computer Use 模型,正讓這一切成為現實。這是一個基於 Gemini 2.5 Pro 強大視覺理解與推理能力所打造的特化模型,它的目標很明確:賦予 AI 代理(Agent)一雙能看懂並操作使用者介面(UI)的「手」。
為何我們需要一個會「用電腦」的 AI?
過去的 AI 與軟體互動,大多依賴 API(應用程式介面)。你可以把 API 想像成一個軟體的「點餐單」,AI 只能根據上面寫好的選項來下指令。這種方式雖然高效,但限制非常大。
現實世界中,無數的數位任務——從線上預訂餐廳、填寫複雜的申請表,到管理專案看板——都需要直接與圖形使用者介面(GUI)互動。我們需要點擊、輸入、滾動、選擇下拉選單。這些對人類來說再自然不過的動作,對傳統 AI 而言卻像一道難以跨越的鴻溝。
Gemini 2.5 Computer Use 的出現,就是為了解決這個根本問題。它能讓 AI 代理真正做到:
- 自動化重複性資料輸入: 不再需要手動複製貼上,讓 AI 為你填寫網站上的各種表單。
- 執行自動化測試: 模擬真實使用者的操作流程,對網頁應用程式進行端對端的測試。
- 跨網站研究與資訊整合: 讓 AI 代理瀏覽多個電商網站,蒐集產品資訊、價格和評論,幫助你做出購買決策。
這一步,對於建立更強大、更通用的 AI 代理至關重要。
它是如何運作的?解密幕後的「代理迴圈」
那麼,這個模型究竟是如何像人一樣「看」和「做」的呢?它的核心運作機制,是一個不斷循環的「代理迴圈」(Agent Loop)。整個流程可以簡化成以下四個步驟:
- 發送請求 (Send a request to the model): 你給 AI 一個任務(例如「幫我找找評分最高的智慧冰箱」),同時附上當前螢幕的截圖。
- 接收模型回應 (Receive the model response): 模型會「看到」截圖,分析你的請求,然後決定下一步該做什麼。它會回傳一個具體的 UI 操作指令,例如「在座標 (371, 470) 的搜尋框輸入文字」。這個回應還可能包含一個安全決策,提醒你此操作是否存在風險。
- 執行收到的動作 (Execute the received action): 你的應用程式(用戶端程式碼)接收到這個指令後,便會實際執行這個點擊或輸入的動作。如果模型要求使用者確認,你的程式就需要先跳出提示,等待使用者同意。
- 擷取新的環境狀態 (Capture the new environment state): 動作完成後,你的程式會擷取一張新的螢幕截圖,連同操作結果一起回傳給模型。
接著,這個過程會從第 2 步重新開始,模型會根據新的畫面決定下一步動作,如此循環往復,直到整個任務完成。
手把手教學:用 Python 和 Playwright 打造你的第一個 AI 代理
理論聽起來很酷,但怎麼實際動手做呢?接下來,我們將使用 Python 和 Playwright(一個強大的瀏覽器自動化工具)來建立一個簡單的 AI 代理。
第 0 步:環境準備
在開始之前,你需要兩樣東西:
- 安全的執行環境: 由於 AI 代理會實際操作瀏覽器,強烈建議在一個受控的環境中執行,例如沙盒化的虛擬機、容器(Docker),或是一個權限受限的瀏覽器設定檔。
- 用戶端動作處理器: 你需要編寫程式碼來執行模型產生的指令(例如點擊、輸入)並擷取螢幕畫面。這就是 Playwright 要發揮作用的地方。
第 1 步:安裝必要套件
打開你的終端機,輸入以下指令來安裝 Google Generative AI 和 Playwright 的 Python 函式庫。
pip install google-genai playwright
playwright install chromium
第 2 步:初始化 Playwright 瀏覽器
我們需要建立一個 Python 腳本,並初始化一個由 Playwright 控制的瀏覽器視窗。這將是我們 AI 代理的工作空間。
from playwright.sync_api import sync_playwright
# 1. 設定目標環境的螢幕尺寸
SCREEN_WIDTH = 1440
SCREEN_HEIGHT = 900
# 2. 啟動 Playwright 瀏覽器
# 在生產環境中,請使用沙盒環境
playwright = sync_playwright().start()
# 設定 headless=False 可以在螢幕上看到 AI 的操作過程
browser = playwright.chromium.launch(headless=False)
# 3. 建立具有指定尺寸的上下文和頁面
context = browser.new_context(
viewport={"width": SCREEN_WIDTH, "height": SCREEN_HEIGHT}
)
page = context.new_page()
# 4. 導航到一個初始頁面開始任務
page.goto("https://www.google.com")
print("瀏覽器已初始化,準備開始任務。")
第 3 步:建構代理迴圈
這是整個專案的核心。我們將實作前面提到的四步迴圈,讓 AI 能夠持續與瀏覽器互動。
首先,我們需要一些輔助函式來執行模型的回應並回傳結果。
# 輔助函式:將模型回傳的正規化座標 (0-999) 轉換為實際像素座標
def denormalize_x(x, screen_width):
return int(x / 1000 * screen_width)
def denormalize_y(y, screen_height):
return int(y / 1000 * screen_height)
# 輔助函式:執行模型回傳的 function calls
def execute_function_calls(candidate, page, screen_width, screen_height):
results = []
for part in candidate.content.parts:
if not part.function_call:
continue
fname = part.function_call.name
args = part.function_call.args
print(f"-> 正在執行: {fname},參數: {args}")
try:
if fname == "click_at":
x = denormalize_x(args["x"], screen_width)
y = denormalize_y(args["y"], screen_height)
page.mouse.click(x, y)
elif fname == "type_text_at":
x = denormalize_x(args["x"], screen_width)
y = denormalize_y(args["y"], screen_height)
page.mouse.click(x, y)
page.keyboard.type(args["text"])
if args.get("press_enter", False):
page.keyboard.press("Enter")
# ... 在此處實現其他支援的動作 ...
else:
print(f"警告: 未實現的函式 {fname}")
# 等待頁面加載
page.wait_for_load_state(timeout=5000)
results.append((fname, {"status": "success"}))
except Exception as e:
print(f"錯誤: 執行 {fname} 時發生錯誤: {e}")
results.append((fname, {"error": str(e)}))
return results
# 輔助函式:擷取新的螢幕狀態並打包成回傳格式
def get_function_responses(page, results):
screenshot_bytes = page.screenshot(type="png")
current_url = page.url
function_responses = []
for name, result in results:
response_data = {"url": current_url, **result}
function_responses.append({
"name": name,
"response": response_data,
"screenshot": screenshot_bytes
})
return function_responses
現在,將所有部分組合起來,形成完整的代理迴圈。
# (請確保您已設定好您的 genai API 金鑰)
import google.genai as genai
from google.genai import types
# --- 完整的代理迴圈主程式 ---
try:
# 1. 設定模型
model = genai.GenerativeModel(
'gemini-2.5-computer-use-preview-10-2025',
tools=[types.Tool(
computer_use=types.ComputerUse(
environment=types.Environment.ENVIRONMENT_BROWSER
)
)]
)
chat = model.start_chat()
# 2. 初始化任務
USER_PROMPT = "前往 aistudio.google.com 並搜尋關於 agents 的文件"
print(f"目標: {USER_PROMPT}")
initial_screenshot = page.screenshot(type="png")
# 3. 進入代理迴圈
turn_limit = 10
for i in range(turn_limit):
print(f"\n--- 第 {i+1} 輪 ---")
# 發送請求給模型
if i == 0:
response = chat.send_message(
[USER_PROMPT, initial_screenshot],
)
else:
response = chat.send_message(function_responses)
# 接收並執行模型的回應
candidate = response.candidates[0]
if not any(part.function_call for part in candidate.content.parts):
print("代理完成:", candidate.content.parts[0].text)
break
results = execute_function_calls(candidate, page, SCREEN_WIDTH, SCREEN_HEIGHT)
# 擷取新狀態並準備下一輪
print("-> 正在擷取新狀態...")
function_responses = get_function_responses(page, results)
finally:
# 清理資源
print("\n任務結束,關閉瀏覽器...")
browser.close()
playwright.stop()
AI 的工具箱:支援的 UI 動作
Gemini 2.5 Computer Use 模型可以生成多種 UI 操作指令,以下是一些最常用的:
click_at(x, y): 在指定的座標點擊滑鼠。type_text_at(x, y, text, ...): 在指定座標點擊後輸入文字。drag_and_drop(from_x, from_y, to_x, to_y): 拖曳一個元素到另一個位置。scroll_document(direction): 向特定方向滾動整個頁面。navigate(url): 直接導航到指定的 URL。key_combination(keys): 按下組合鍵,如 “Control+C”。
安全性:賦予 AI 強大能力,更要套上「韁繩」
讓 AI 掌握電腦的控制權是一把雙面刃。惡意使用、網路釣魚、誤操作等風險也隨之而來。因此,從一開始就建立完善的安全護欄至關重要。Google 提供了多層次的防護措施:
- 人類參與迴圈 (Human-in-the-Loop): 當模型的回應中包含
require_confirmation的安全決策時,你的程式必須暫停並請求使用者確認,才能繼續執行。你不能編寫程式碼繞過這個請求。 - 自訂安全指令: 開發者可以提供自訂的系統指令,來限制模型的行為。例如,你可以設定規則,禁止 AI 點擊任何「同意服務條款」的按鈕,或是在進行任何金融交易前都必須獲得使用者授權。
- 安全執行環境: 再次強調,在沙盒化的環境中執行代理,可以大幅限制潛在的負面影響。
開發者有責任謹慎對待這些風險,並實施適當的安全措施。
demo影片
結論與下一步
Gemini 2.5 Computer Use 的推出,不僅是 AI 技術的一大步,也為人機互動的未來開啟了全新的想像空間。一個真正能理解我們、並為我們分擔數位世界繁瑣任務的通用 AI 代理,或許已經離我們不遠了。
準備好開始打造你的 AI 助理了嗎?
- 立即試用: 前往由 Browserbase 託管的展示環境,親身體驗它的操作。
- 查看範例程式碼: 在 GitHub 參考實作 中找到更完整的程式碼範例。
- 加入社群: 在 開發者論壇 中分享你的想法和回饋,與全球的開發者一同塑造這項技術的未來。
- 文檔: https://ai.google.dev/gemini-api/docs/computer-use


