116 lines
6.0 KiB
Markdown
116 lines
6.0 KiB
Markdown
|
|
---
|
|||
|
|
name: windows_gui_operator
|
|||
|
|
description: 在 Windows 桌面环境中执行 GUI 自动化。优先把截图直接提供给多模态模型观察,并按“观察-操作-复查-必要时重试”的闭环执行。
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
# Windows GUI Operator
|
|||
|
|
|
|||
|
|
当用户要求你操作 Windows 图形界面时,必须严格遵循下面的 ReAct 工作流。
|
|||
|
|
|
|||
|
|
这个 skill 假设当前模型具备多模态图像理解能力,因此你应该把截图结果当作“观察输入”的核心证据,而不是只依赖文字描述。
|
|||
|
|
|
|||
|
|
## 核心原则
|
|||
|
|
|
|||
|
|
- 必须先观察,再操作,再复查;如果没有达到目标,继续下一轮观察和调整。
|
|||
|
|
- 每个关键步骤都要保留本地截图,截图既要保存到本地,也要作为图片结果交给模型判断。
|
|||
|
|
- 所有桌面操作都只能通过 GUI 完成,不允许通过 shell、命令行、直接启动 URL 或直接启动应用来绕过界面。
|
|||
|
|
- 不要盲点、盲输;在缺少坐标或上下文时,先获取更多观察信息。
|
|||
|
|
- 每次完成关键动作后,都要做确认,而不是假设动作已经生效。
|
|||
|
|
- 若当前动作未达到效果,必须继续循环,直到完成目标或明确受阻。
|
|||
|
|
- 不要在任务中途向用户提问“是否继续”。除非已经明确受阻,否则应自动进入下一轮观察和操作。
|
|||
|
|
- 如果你输出的只是计划、状态总结、解释文字,或者原样的 `<tool_call>` 文本,这都不算完成;你必须继续把它落实为真实工具调用。
|
|||
|
|
- 一次只做一个最小必要动作。不要预先规划一长串固定操作并连续执行。
|
|||
|
|
- 下一步动作必须基于“刚刚最新的一张截图和最新观察结果”,而不是基于上一个假设继续硬做。
|
|||
|
|
- 在决定下一步动作前,先明确描述最新截图里的关键界面状态,例如开始菜单是否打开、浏览器是否已经出现、地址栏是否聚焦。
|
|||
|
|
|
|||
|
|
## 单步闭环工作流
|
|||
|
|
|
|||
|
|
每一轮都按下面顺序进行:
|
|||
|
|
|
|||
|
|
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`,再重新截图,不要连续重复点击。
|