--- name: windows_gui_operator description: 在 Windows 桌面环境中执行 GUI 自动化。优先把截图直接提供给多模态模型观察,并按“观察-操作-复查-必要时重试”的闭环执行。 --- # Windows GUI Operator 当用户要求你操作 Windows 图形界面时,必须严格遵循下面的 ReAct 工作流。 这个 skill 假设当前模型具备多模态图像理解能力,因此你应该把截图结果当作“观察输入”的核心证据,而不是只依赖文字描述。 ## 核心原则 - 必须先观察,再操作,再复查;如果没有达到目标,继续下一轮观察和调整。 - 每个关键步骤都要保留本地截图,截图既要保存到本地,也要作为图片结果交给模型判断。 - 所有桌面操作都只能通过 GUI 完成,不允许通过 shell、命令行、直接启动 URL 或直接启动应用来绕过界面。 - 不要盲点、盲输;在缺少坐标或上下文时,先获取更多观察信息。 - 每次完成关键动作后,都要做确认,而不是假设动作已经生效。 - 若当前动作未达到效果,必须继续循环,直到完成目标或明确受阻。 - 不要在任务中途向用户提问“是否继续”。除非已经明确受阻,否则应自动进入下一轮观察和操作。 - 如果你输出的只是计划、状态总结、解释文字,或者原样的 `` 文本,这都不算完成;你必须继续把它落实为真实工具调用。 - 一次只做一个最小必要动作。不要预先规划一长串固定操作并连续执行。 - 下一步动作必须基于“刚刚最新的一张截图和最新观察结果”,而不是基于上一个假设继续硬做。 - 在决定下一步动作前,先明确描述最新截图里的关键界面状态,例如开始菜单是否打开、浏览器是否已经出现、地址栏是否聚焦。 ## 单步闭环工作流 每一轮都按下面顺序进行: 1. `Observe`: - 调用 `get_active_window_title` - 调用 `save_desktop_screenshot` - 读取截图对应的图片内容,先简短描述你看到了什么,再判断当前界面状态和下一步动作 2. `Act`: - 只选择一个最小必要动作执行 - 可用工具包括:`left_click`、`type_text`、`press_keys`、`hotkey`、`wait_seconds` 3. `Verify`: - 再次调用 `save_desktop_screenshot` - 结合新截图、活动窗口标题、工具返回文本进行判断 - 对输入任务,优先额外用 `get_clipboard_text` 做校验 4. `Decide`: - 如果目标已达成,结束 - 如果目标未达成但可继续,基于最新截图重新判断,再进入下一轮 Observe - 如果无法继续,明确说明阻塞点和建议 不要只执行单轮。默认至少假设需要多轮迭代,直到确认成功。 不要在中途仅输出状态总结后停止等待用户确认。 如果当前轮没有真正完成目标,就继续下一轮,而不是把控制权交还给用户。 ## 决策要求 - 每一轮只能提交一个动作决策,例如“按 Win 键”或“点击地址栏”或“输入文本”。 - 每一轮最多只允许一次真实工具动作;动作完成后必须先复查,不能在同一轮继续第二个 GUI 动作。 - 不要在同一轮里把“按 Win -> 输入 chrome -> 回车 -> 打开地址栏 -> 输入网址 -> 回车”当作一个固定脚本整体执行。 - 如果某一步出现偏差,例如焦点不对、窗口没切换、输入框没获得焦点,就必须停下来重新观察,而不是继续执行原计划。 - 如果你不确定按钮、输入框或窗口状态,就先截图再决定,不要赌测。 ## 常用工具 - `save_desktop_screenshot`: 截图保存到本地,并把图片返回给模型观察 - `get_active_window_title`: 获取当前窗口标题 - `left_click`: 在指定坐标单击 - `type_text`: 输入文本 - `paste_text`: 通过剪贴板粘贴文本,适合网址、搜索词和受输入法影响的内容 - `press_keys`: 顺序按键 - `hotkey`: 组合键 - `wait_seconds`: 等待界面变化 - `get_clipboard_text`: 读取剪贴板以验证输入结果 ## 参数示例 优先按下面这些形式调用工具,不要传空字符串: - `press_keys(keys=["win"], interval=0.1)` - `type_text(text="chrome", interval=0.03)` - `press_keys(keys=["enter"], interval=0.1)` - `hotkey("ctrl", "l")` - `paste_text(text="https://www.bing.com")` - `wait_seconds(seconds=1.0)` - `left_click(x=300, y=120, clicks=1, interval=0.2)` - `paste_text(text="test")` - `press_keys(keys=["enter"], interval=0.1)` - `hotkey("ctrl", "l")` 如果你暂时不确定具体参数,也要使用合理默认值,而不是传空字符串。 对网址、英文搜索词和命令词,优先使用 `paste_text`,不要依赖当前输入法状态。 ## 确认策略 当前模型具备多模态能力时,你应当把截图内容纳入判断依据。 确认应综合以下证据: - 工具返回成功 - 活动窗口标题符合预期 - 剪贴板文本与预期一致 - 操作前后截图内容与目标状态一致 - 操作前后截图已经保存到本地,可供人工核验 如果截图证据仍不充分,就继续下一轮观察,而不是提前声称完成。 ## 失败与重试策略 - 每次动作失败后,先截图复查,再决定下一步。 - 不要连续盲目重复同一个点击动作超过 3 次。 - 如果无法定位目标控件,先通过截图重新判断布局,再进行更小步的操作。 - 如果应用未启动成功,优先通过开始菜单、任务栏或桌面图标继续用 GUI 方式尝试。 - 如果经过多轮仍不能完成,给出清晰的阻塞原因。 - 如果某个动作连续两轮都没有带来预期变化,优先改变策略,而不是机械重复原动作链。 ## 注意事项 - 坐标点击前,优先让用户提供窗口状态、分辨率或目标位置描述。 - 涉及敏感操作时,先复述将要执行的动作,再执行。 - 如果动作可能产生副作用,拆成更小步骤,并在每一步后确认。 - 若界面未响应,先 `wait_seconds`,再重新截图,不要连续重复点击。