Gemini 3.5 Flash计算机使用功能:从视觉理解到自动化操作实践
2026/7/8 22:23:52 网站建设 项目流程

🚀 30+款热门AI模型一站整合,DeepSeek/GLM/Qwen 随心用,限时 5 折。 👉 点击领海量免费额度

1. 先搞清楚 Gemini 3.5 Flash 的计算机使用到底能做什么

如果你正在寻找一个能真正"看到"屏幕并操作电脑的 AI 代理,Gemini 3.5 Flash 的计算机使用功能值得重点关注。这不是简单的文本对话,而是让 AI 模型通过屏幕截图理解界面,然后生成具体的鼠标点击、键盘输入等操作指令。

这个功能最实用的场景包括:

  • 自动化重复的网页操作,比如数据录入、表单填写
  • Web 应用的功能测试和用户流程验证
  • 跨网站的信息收集和比价分析
  • 移动端和桌面端应用的自动化操作

与传统的自动化脚本不同,Gemini 的计算机使用是基于视觉理解的。模型会分析屏幕截图,识别界面元素,然后决定下一步操作。这意味着它能够处理一些动态变化的界面,而不需要你预先编写固定的选择器或坐标。

2. 环境准备:从零搭建可运行的测试环境

要让 Gemini 3.5 Flash 的计算机使用功能跑起来,需要准备几个关键组件。我建议按这个顺序检查你的环境。

2.1 API 密钥和基础依赖

首先确保你有可用的 Gemini API 密钥。如果没有,需要到 Google AI Studio 申请。然后安装必要的 Python 包:

pip install google-genai playwright playwright install chromium

这里选择 Chromium 是因为它轻量且兼容性好。如果你的网络环境有限,可以考虑使用国内镜像源安装。

2.2 浏览器自动化环境设置

计算机使用的核心是浏览器自动化,我们使用 Playwright 作为执行引擎:

from playwright.sync_api import sync_playwright # 设置固定的屏幕尺寸,这对坐标映射很重要 SCREEN_WIDTH = 1440 SCREEN_HEIGHT = 900 # 启动浏览器,开发阶段建议先看实际操作 playwright = sync_playwright().start() browser = playwright.chromium.launch(headless=False) # 设为 True 可隐藏界面 context = browser.new_context( viewport={"width": SCREEN_WIDTH, "height": SCREEN_HEIGHT} ) page = context.new_page()

屏幕尺寸的设置很关键,因为模型返回的坐标是基于 1000x1000 的归一化坐标,需要根据实际屏幕尺寸进行缩放。

2.3 安全环境考虑

在实际使用中,我强烈建议在沙盒环境中运行这类自动化代理。可以用 Docker 容器隔离,避免对主机系统造成意外影响:

FROM mcr.microsoft.com/playwright/python:v1.40.0 WORKDIR /app COPY requirements.txt . RUN pip install -r requirements.txt COPY . .

即使不用 Docker,也至少要使用独立的浏览器配置文件,避免影响你的正常浏览数据。

3. 核心工作流程:从单次操作到完整任务循环

理解 Gemini 计算机使用的工作流程很重要,这能帮你更好地调试和优化。

3.1 四步循环机制

整个流程是一个持续的请求-执行-反馈循环:

  1. 发送请求:向模型发送当前屏幕截图和任务指令
  2. 接收响应:模型分析后返回具体的操作指令和推理意图
  3. 执行操作:在浏览器中执行点击、输入等操作
  4. 捕获状态:截图新的界面状态,准备下一轮请求

这个循环会一直持续,直到任务完成或达到最大步数限制。

3.2 首次交互的实现

先来看一个完整的初始化示例:

from google import genai import base64 client = genai.Client() # 导航到起始页面 page.goto("https://www.google.com") # 捕获初始屏幕截图 initial_screenshot = page.screenshot(type="png") # 创建首次交互 interaction = client.interactions.create( model='gemini-3.5-flash', input=[ {"type": "text", "text": "搜索 Gemini API 文档"}, {"type": "image", "data": base64.b64encode(initial_screenshot).decode("utf-8"), "mime_type": "image/png"} ], tools=[{ "type": "computer_use", "environment": "browser", "enable_prompt_injection_detection": True # 启用安全检测 }] )

注意这里同时发送了文本指令和图像数据,模型需要这两者来理解任务上下文。

3.3 操作执行的关键细节

模型返回的操作指令需要正确解析和执行。坐标映射是最容易出错的地方:

def denormalize_x(x: int, screen_width: int) -> int: """将归一化坐标 (0-1000) 转换为实际像素坐标""" return int(x / 1000 * screen_width) def denormalize_y(y: int, screen_height: int) -> int: return int(y / 1000 * screen_height)

执行操作时还要考虑页面加载时间,我一般会加上等待:

page.wait_for_load_state(timeout=5000) # 等待页面加载 time.sleep(1) # 额外等待确保界面稳定

4. 完整代理循环:让任务自动执行下去

单次操作只是开始,真正的价值在于多步任务的自动化。

4.1 构建任务循环框架

下面是一个完整的代理循环实现:

def run_computer_use_agent(task_description, max_steps=10): """运行计算机使用代理的完整循环""" # 初始化环境 page.goto("https://www.google.com") screenshot = page.screenshot(type="png") # 首次请求 interaction = client.interactions.create( model='gemini-3.5-flash', input=[ {"type": "text", "text": task_description}, {"type": "image", "data": base64.b64encode(screenshot).decode("utf-8"), "mime_type": "image/png"} ], tools=[{"type": "computer_use", "environment": "browser"}] ) for step in range(max_steps): print(f"步骤 {step + 1}/{max_steps}") # 检查是否有需要执行的操作 function_calls = [s for s in interaction.steps if s.type == "function_call"] if not function_calls: print("任务完成或无需进一步操作") break # 执行所有操作 results = execute_function_calls(interaction, page, SCREEN_WIDTH, SCREEN_HEIGHT) # 捕获新状态并继续对话 function_responses = get_function_responses(page, results) interaction = client.interactions.create( model='gemini-3.5-flash', previous_interaction_id=interaction.id, # 保持对话连续性 input=function_responses, tools=[{"type": "computer_use", "environment": "browser"}] ) return interaction

4.2 操作执行函数的完善版

这是更健壮的操作执行实现:

def execute_function_calls(interaction, page, screen_width, screen_height): """执行模型返回的所有函数调用""" results = [] function_calls = [step for step in interaction.steps if step.type == "function_call"] for function_call in function_calls: action_result = {} fname = function_call.name args = function_call.arguments print(f"执行: {fname} | 意图: {args.get('intent', '未指定')}") try: # 处理点击类操作 if fname in ["click", "click_at", "double_click", "right_click"]: x = denormalize_x(args["x"], screen_width) y = denormalize_y(args["y"], screen_height) if fname in ["click", "click_at"]: page.mouse.click(x, y) elif fname == "double_click": page.mouse.dblclick(x, y) elif fname == "right_click": page.mouse.click(x, y, button="right") # 处理文本输入 elif fname in ["type", "type_text_at"]: text = args["text"] press_enter = args.get("press_enter", False) # 如果有坐标,先点击定位 if "x" in args and "y" in args: x = denormalize_x(args["x"], screen_width) y = denormalize_y(args["y"], screen_height) page.mouse.click(x, y) # 清空字段再输入 page.keyboard.press("Control+A") page.keyboard.press("Backspace") page.keyboard.type(text) if press_enter: page.keyboard.press("Enter") # 处理导航 elif fname == "navigate": page.goto(args["url"]) # 其他操作... # 等待界面稳定 page.wait_for_load_state(timeout=5000) time.sleep(1) except Exception as e: print(f"执行 {fname} 时出错: {e}") action_result["error"] = str(e) results.append((fname, function_call.id, action_result)) return results

4.3 状态捕获和反馈

执行操作后,需要将结果反馈给模型:

def get_function_responses(page, results): """捕获执行后的界面状态""" screenshot_bytes = page.screenshot(type="png") current_url = page.url function_responses = [] for name, call_id, result in results: response = { "type": "function_result", "name": name, "call_id": call_id, "result": [ { "type": "text", "text": f'{{"url": "{current_url}", "success": true, "details": {result}}}' }, { "type": "image", "data": base64.b64encode(screenshot_bytes).decode("utf-8"), "mime_type": "image/png" } ] } function_responses.append(response) return function_responses

5. 多环境支持:浏览器、移动端和桌面端

Gemini 3.5 Flash 支持三种不同的执行环境,每种环境有特定的操作集。

5.1 浏览器环境操作全集

浏览器环境下支持的操作最丰富:

操作类型说明关键参数
click左键点击x, y, intent
double_click双击x, y, intent
type输入文本text, press_enter, intent
navigate跳转到URLurl, intent
scroll滚动页面direction, magnitude_in_pixels, intent
press_key按键操作key, intent

移动端环境增加了应用管理操作,比如open_applist_apps,桌面端环境则支持更系统级的操作。

5.2 环境选择策略

选择环境时考虑这些因素:

  • 浏览器环境:最适合网页自动化任务,兼容性最好
  • 移动端环境:需要模拟移动设备界面时使用
  • 桌面端环境:系统级自动化,权限要求更高

我建议从浏览器环境开始测试,这是最稳定且文档最全的选项。

6. 安全配置:避免自动化带来的风险

计算机使用功能虽然强大,但也带来安全风险。正确的安全配置至关重要。

6.1 内置安全策略

Gemini 3.5 Flash 提供了可配置的安全策略:

# 启用严格的安全策略 interaction = client.interactions.create( model="gemini-3.5-flash", input="完成网上购物流程", tools=[{ "type": "computer_use", "environment": "browser", # 禁用某些敏感操作 "disabled_safety_policies": [ "FINANCIAL_TRANSACTIONS", # 财务交易 "ACCOUNT_CREATION" # 账号创建 ] }] )

主要的安全策略类别包括:

  • FINANCIAL_TRANSACTIONS:财务交易保护
  • SENSITIVE_DATA_MODIFICATION:敏感数据修改保护
  • COMMUNICATION_TOOL:通信工具限制
  • USER_CONSENT_MANAGEMENT:用户同意管理

6.2 提示注入检测

这是一个重要的安全功能,可以检测屏幕截图中隐藏的恶意指令:

tools=[{ "type": "computer_use", "environment": "browser", "enable_prompt_injection_detection": True # 启用检测 }]

当模型检测到可能的提示注入时,会返回需要确认的安全决策。

6.3 人工确认机制

对于敏感操作,实现人工确认流程:

def handle_safety_decision(safety_decision): """处理需要确认的安全决策""" explanation = safety_decision.get('explanation', '操作需要确认') decision = safety_decision.get('decision', 'require_confirmation') if decision == 'require_confirmation': print(f"安全确认: {explanation}") user_input = input("确认执行? (y/n): ") return user_input.lower() == 'y' return False

7. 实战调试:常见问题和解决方案

在实际使用中,你会遇到各种问题。这里分享一些调试经验。

7.1 坐标映射问题

最常见的错误是坐标计算不正确:

# 正确的坐标映射示例 def safe_denormalize(x, y, width, height): """安全的坐标映射,包含边界检查""" x = max(0, min(1000, x)) # 限制在 0-1000 范围内 y = max(0, min(1000, y)) actual_x = int(x / 1000 * width) actual_y = int(y / 1000 * height) # 确保坐标在屏幕范围内 actual_x = max(0, min(width - 1, actual_x)) actual_y = max(0, min(height - 1, actual_y)) return actual_x, actual_y

7.2 界面稳定性处理

动态界面可能导致操作失败:

def wait_for_ui_stable(page, timeout=10): """等待界面稳定""" import time start_time = time.time() while time.time() - start_time < timeout: try: # 检查页面是否完全加载 page.wait_for_load_state('networkidle', timeout=5000) # 额外的稳定等待 time.sleep(2) return True except: time.sleep(1) return False

7.3 错误处理和重试机制

健壮的代理需要错误处理:

def execute_with_retry(operation_func, max_retries=3): """带重试的操作执行""" for attempt in range(max_retries): try: return operation_func() except Exception as e: if attempt == max_retries - 1: raise e print(f"操作失败,第 {attempt + 1} 次重试: {e}") time.sleep(2)

8. 性能优化和最佳实践

要让计算机使用代理在实际项目中可靠运行,还需要一些优化技巧。

8.1 屏幕截图优化

截图质量和大小影响性能和准确性:

def optimize_screenshot(page): """优化屏幕截图""" # 降低截图质量以减小尺寸(如果任务不需要高精度) screenshot = page.screenshot( type="jpeg", # JPEG 比 PNG 体积小 quality=80, # 质量参数 clip={"x": 0, "y": 0, "width": SCREEN_WIDTH, "height": SCREEN_HEIGHT} ) return screenshot

8.2 任务分解策略

复杂任务需要合理分解:

def break_down_complex_task(main_task): """分解复杂任务为可执行的子任务""" sub_tasks = [ "打开目标网站", "登录系统(如果需要)", "执行主要操作", "验证结果", "清理退出" ] # 为每个子任务设置检查点 checkpoints = [] for i, task in enumerate(sub_tasks): checkpoints.append({ "step": i + 1, "description": task, "verification": f"检查步骤 {i + 1} 完成状态" }) return checkpoints

8.3 资源管理和清理

正确的资源管理避免内存泄漏:

class ComputerUseAgent: def __init__(self): self.browser = None self.context = None self.page = None def __enter__(self): self.setup_environment() return self def __exit__(self, exc_type, exc_val, exc_tb): self.cleanup() def setup_environment(self): """设置执行环境""" playwright = sync_playwright().start() self.browser = playwright.chromium.launch(headless=False) self.context = self.browser.new_context( viewport={"width": SCREEN_WIDTH, "height": SCREEN_HEIGHT} ) self.page = self.context.new_page() def cleanup(self): """清理资源""" if self.browser: self.browser.close()

通过这种上下文管理器模式,可以确保即使任务执行失败,资源也能被正确释放。

Gemini 3.5 Flash 的计算机使用功能为自动化任务提供了新的可能性,但实际落地时需要仔细考虑环境配置、安全措施和错误处理。先从简单的任务开始,逐步验证每个环节的稳定性,再扩展到更复杂的应用场景。

🚀 30+款热门AI模型一站整合,DeepSeek/GLM/Qwen 随心用,限时 5 折。 👉 点击领海量免费额度

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询