返回技能市场

桌面自动驾驶为 AI Agent 提供基于视觉的智能 GUI 自动化能力。它不依赖固定坐标,而是通过图像识别、OCR 文本定位、智能等待元素出现来操控界面,内置工作流编排、录制回放、DPI 自适应与多显示器支持,让自动化脚本像人一样"看着屏幕操作"。 核心能力:视觉元素定位(图像匹配+OCR)、智能等待(等元素出现/消失)、工作流编排(步骤序列+条件分支)、录制回放、DPI 自适应坐标转换、多显示器管理、安全护栏(确认模式+操作日志+回滚快照)。 适用场景:表单自动填写、数据录入、应用间数据搬运、UI 回归测试、重复性操作自动化、一人公司省人力。 差异化:相比仅暴露原始鼠标键盘 API 的方案,本技能新增视觉优先定位(先找图/找字再点击,而非盲点坐标)、智能等待(轮询元素出现,不再硬编码 sleep)、工作流编排(把多步操作封装为可重放流程)、DPI 自适应(自动校正缩放导致的坐标偏移)、操作快照回滚(危险操作前截图,出错可参照)。定位为"自动驾驶层",与系统控制器(系统层进程/文件)明确分工。 触发关键词:桌面自动化, GUI, 鼠标, 键盘, 截图, 图像识别, 表单填写, 自动驾驶, desktop, mouse, keyboard, screenshot, OCR, autopilot

版本: 1.0.0分类: 开发工具
中文

SKILL.md

桌面自动驾驶

让 AI Agent 像人一样"看着屏幕操作",而不是盲点坐标。本技能解决五个核心痛点:坐标漂移(DPI 缩放、窗口移动导致固定坐标失效)、时机不对(元素没加载就点击)、识别率低(原始 locateOnScreen 效果差)、操作不可逆(点错了无法回退)、流程难复用(每次重写脚本).

职责边界

本技能聚焦 GUI 层自动化,与系统控制器(系统层)明确分工:

本技能负责系统控制器负责
鼠标点击与移动进程/服务管理
键盘输入与快捷键文件系统操作
屏幕截图与图像识别环境变量/注册表
窗口管理(GUI 层)计划任务(系统级)
GUI 工作流编排系统资源监控

核心理念:视觉优先

铁律:优先用"找图/找字"定位元素,最后才用固定坐标。坐标会因 DPI、窗口位置、分辨率而漂移,图像识别不会.

输入定义

参数名类型必填说明
inputstring是桌面自动驾驶处理的输入数据或指令
optionsobject否附加配置选项,如模式选择、格式偏好等
callback_urlstring否异步处理完成后的回调通知URL
dc.click(500, 300)
location = dc.find_on_screen("submit_button.png")
if location:
    dc.click_center(location)
location = dc.find_text("提交")
if location:
    dc.click_center(location)

初学者指南

  1. 阅读## 核心能力章节了解skill功能
  2. 按## 依赖说明配置环境
  3. 执行所需能力对应的命令
  4. 参考## 错误处理章节处理异常
  5. 查看## FAQ解答常见疑问

依赖详情

pip install pyautogui pillow opencv-python pygetwindow pytesseract
```bash
# 在此执行相关操作
echo "操作完成"
```python
from desktop_autopilot import Autopilot
ap = Autopilot(failsafe=True, dpi_aware=True)
ap.wait_for_image("login_button.png", timeout=10)
ap.click_image("login_button.png")
ap.wait_for_image("username_field.png", timeout=5)
ap.click_image("username_field.png")
ap.type_text("john@example.com")
ap.screenshot("after_login.png")

智能等待(核心差异化)

原始方案用 time.sleep(2) 硬等,慢且不可靠。本技能提供智能等待:

wait_for_image - 等图像出现

ap.wait_for_image(
    "submit_button.png",
    timeout=10,        # 最长等 10 秒
    interval=0.5,      # 每 0.5 秒检查一次
    confidence=0.8     # 匹配置信度
)
```bash
# 在此执行相关操作
echo "操作完成"
```python
ap.wait_for_text("登录成功", timeout=10)
```bash
# 在此执行相关操作
echo "操作完成"
```python
ap.wait_for_image_gone("loading_spinner.png", timeout=30)
```bash
# 在此执行相关操作
echo "操作完成"
```python
ap.wait_for_color(500, 300, (0, 200, 0), timeout=10)
```bash
# 在此执行相关操作
echo "操作完成"
```python
ap.wait_any(
    lambda: ap.find_image("success.png"),
    lambda: ap.find_image("error.png"),
    timeout=15
)

视觉定位(核心差异化)

find_image - 多尺度图像匹配

原始 locateOnScreen 只做单尺度匹配,DPI 变化就找不到。本技能做多尺度:

location = ap.find_image(
    "button.png",
    confidence=0.8,
    multiscale=True,     # 多尺度匹配(抗 DPI)
    grayscale=True       # 灰度匹配(加速)
)
```bash
# 在此执行相关操作
echo "操作完成"
```python
location = ap.find_text("提交订单")
if location:
    ap.click_center(location)
```bash
# 在此执行相关操作
echo "操作完成"
```python
buttons = ap.find_all_images("delete_icon.png")
for btn in buttons:
    ap.click_center(btn)
```bash
# 在此执行相关操作
echo "操作完成"
```python
ap.click_image("save_button.png", confidence=0.85)
```bash
# 在此执行相关操作
echo "操作完成"
```python
def click_center(self, location):
    """location 是 (x, y, w, h),点击中心点"""
    x, y, w, h = location
    self.click(x + w//2, y + h//2)

DPI 自适应(核心差异化)

Windows DPI 缩放(125%/150%)是坐标漂移的首要原因。本技能自动处理:

ap = Autopilot(dpi_aware=True)
scale = ap.get_dpi_scale()  # 返回 1.0 / 1.25 / 1.5 等
print(f"当前 DPI 缩放: {scale*100}%")
```bash
# 在此执行相关操作
echo "操作完成"
```python
ap.move_mouse(x, y, duration=0, smooth=True)  # 移动到绝对坐标
ap.move_relative(dx, dy)                       # 相对移动
ap.click(x, y, button='left', clicks=1)        # 点击
ap.click(button='right')                       # 右键
ap.double_click(x, y)                          # 双击
ap.drag(x1, y1, x2, y2, duration=0.5)          # 拖拽
ap.scroll(-5)                                  # 滚动(负=向下)
ap.get_mouse_position()                        # 获取当前位置
```bash
# 在此执行相关操作
echo "操作完成"
```python
ap.type_text("Hello", interval=0, wpm=None)    # 输入文本
ap.press('enter')                               # 单键
ap.press('tab', presses=3)                      # 多次按键
ap.hotkey('ctrl', 'c')                          # 快捷键
ap.key_down('shift')                            # 按住
ap.key_up('shift')                              # 释放

键名速查

类别键名
字母数字'a'-'z', '0'-'9'
功能键'f1'-'f24'
特殊键enter/esc/space/tab/backspace/delete/home/end/pageup/pagedown
方向键up/down/left/right
修饰键ctrl/shift/alt/win/cmd
标点./,/?/!/;/:/[/]/{/}/(/)/+/-/*///=

屏幕操作

ap.screenshot()                          # 全屏截图,返回 Image
ap.screenshot(region=(x,y,w,h))         # 区域截图
ap.screenshot(filename="cap.png")       # 保存到文件
ap.get_pixel_color(x, y)                # 取色 (r,g,b)
ap.get_screen_size()                    # 屏幕分辨率 (w,h)
```bash
# 在此执行相关操作
echo "操作完成"
```python
ap.get_all_windows()                    # 列出所有窗口
ap.activate_window("Chrome")            # 按标题激活
ap.get_active_window()                  # 当前焦点窗口
ap.minimize_window("Calculator")        # 最小化
ap.maximize_window("Calculator")        # 最大化
ap.get_window_rect("Chrome")            # 窗口位置与大小

工作流编排(核心差异化)

把多步操作封装为可重放的工作流:

wf = ap.workflow("fill-form")
wf.step("等待表单加载", lambda: ap.wait_for_image("form.png", timeout=10))
wf.step("填写姓名", lambda: (ap.click_image("name_field.png"), ap.type_text("张三")))
wf.step("填写邮箱", lambda: (ap.click_image("email_field.png"), ap.type_text("z@x.com")))
wf.step("提交", lambda: ap.click_image("submit.png"))
wf.step("等待成功", lambda: ap.wait_for_text("提交成功", timeout=10), critical=True)
wf.run()
```bash
# 在此执行相关操作
echo "操作完成"
```python
wf = ap.workflow("smart-login")
wf.step("找登录按钮", lambda: ap.find_image("login_btn.png"))
wf.branch(
    condition=lambda result: result is not None,
    steps=[
        ("点击登录", lambda: ap.click_image("login_btn.png")),
        ("输入凭据", lambda: (ap.click_image("user.png"), ap.type_text("john")))
    ],
    else_steps=[
        ("可能已登录,找首页", lambda: ap.wait_for_image("home.png", timeout=5))
    ]
)
```bash
# 在此执行相关操作
echo "操作完成"
```python
wf.save("workflows/fill-form.json")
wf2 = ap.load_workflow("workflows/fill-form.json")
wf2.run()

录制回放(核心差异化)

手动操作一次,录制后无限回放:

ap.record_start("data-entry")
ap.record_stop()
ap.playback("data-entry", verify=True)

安全护栏(核心差异化)

操作快照回滚

危险操作前自动截图,出错可参照:

ap.snapshot("before-form-submit")  # 截图存档
ap.click_image("submit.png")
if not ap.wait_for_text("成功", timeout=5):
    ap.show_snapshot("before-form-submit")  # 展示操作前状态
    ap.alert("提交可能失败,请检查")
```bash
# 在此执行相关操作
echo "操作完成"
```python
ap = Autopilot(require_approval=True)
ap.click(500, 300)  # 弹窗确认:"允许点击 (500,300)? [y/n]"

Failsafe(急停)

鼠标移到屏幕任一角落立即中止所有自动化:

ap = Autopilot(failsafe=True)

操作日志

所有操作自动记录到 $HOME/.skill-platform/autopilot/logs/:

2026-07-18T09:00:00Z | click_image | submit.png | SUCCESS | (520, 340)
2026-07-18T09:00:02Z | type_text | john@example.com | SUCCESS
2026-07-18T09:00:05Z | wait_for_text | 提交成功 | TIMEOUT | 等待10秒未出现
```bash
# 在此执行相关操作
echo "操作完成"
```python
ap = Autopilot(dpi_aware=True)
ap.snapshot("before")
ap.wait_for_image("name_field.png", timeout=10)
ap.type_text("张三")
ap.press('tab')
ap.type_text("zhang@example.com")
ap.press('tab')
ap.type_text("13800138000")
ap.click_image("submit.png")
ap.wait_for_text("提交成功", timeout=10) or ap.show_snapshot("before")
```bash
# 在此执行相关操作
echo "操作完成"
```python
ap.activate_window("Excel")
ap.hotkey('ctrl', 'c')  # 假设已选中
ap.activate_window("CRM")
ap.wait_for_image("crm_input.png", timeout=10)
ap.click_image("crm_input.png")
ap.hotkey('ctrl', 'v')
ap.click_image("save.png")
```bash
# 在此执行相关操作
echo "操作完成"
```python
wf = ap.workflow("login-test")
wf.step("打开登录页", open_login_page)
wf.step("输入凭据", enter_credentials, critical=True)
wf.step("提交", click_submit)
wf.step("验证首页", lambda: ap.png", timeout=10), critical=True)
result = wf.run()
print("测试结果:", "PASS" if result.success else "FAIL")
```bash
# 在此执行相关操作
echo "操作完成"
```python
ap.key_down('ctrl')
for file_pos in [(100, 200), (100, 250), (100, 300)]:
    ap.click(*file_pos)
ap.key_up('ctrl')
ap.hotkey('ctrl', 'c')
ap.activate_window("目标文件夹")
ap.hotkey('ctrl', 'v')

安全风险防范

风险项等级防护措施验证方法
API密钥泄露高通过环境变量配置,禁止硬编码定期检查代码和配置文件
命令执行风险高仅执行白名单命令,避免拼接用户输入使用沙箱环境测试
网络通信安全中使用HTTPS协议,验证SSL证书定期检查证书有效期
敏感数据暴露高输出结果中不包含密钥、令牌等敏感信息日志脱敏审查
未授权访问中限制访问权限,实施认证机制定期审计访问日志

问题解答汇总

Q:图像识别找不到元素怎么办? A:① 提高置信度容差 confidence=0.7;② 开启 multiscale=True 抗 DPI;③ 改用 OCR find_text;④ 检查截图模板是否过期(UI 改版后需更新模板). Q:DPI 缩放导致坐标偏移? A:用 dpi_aware=True 初始化,本技能自动校正。或优先用图像/文字定位,避免硬坐标. Q:多显示器负坐标怎么处理? A:副显示器在主显示器左侧/上方时坐标为负。get_screen_size() 只返回主屏,用 get_all_monitors() 获取全部。图像定位不受影响(全屏搜索). Q:某些应用屏蔽了模拟输入? A:游戏和部分安全应用(如银行 U 盾)会屏蔽 SendInput。可尝试以管理员权限运行,或改用应用本身的 API/CLI. Q:录制回放可靠吗? A:verify=True 时每步回放前截图校验,UI 变化会暂停等人工介入。纯坐标回放不可靠,建议结合视觉校验. Q:和系统控制器怎么配合? A:本技能管 GUI 操作(点击、输入、截图),系统控制器管系统操作(进程、文件、服务)。如"启动应用"用系统控制器,"在应用里填表"用本技能.

异常处理指南

症状可能原因处置
图像找不到DPI 缩放/UI 改版multiscale=True,更新模板图
坐标点击偏移DPI 未校正dpi_aware=True
键盘输入无效目标窗口失焦先 activate_window 再输入
操作过快出错元素未加载用 wait_for_image 替代 sleep
Failsafe 误触发鼠标靠近角落调大角落容差或关闭(慎用)
OCR 识别差Tesseract 未装/语言包缺安装 Tesseract + 中文语言包
多显示器坐标乱副屏负坐标用图像定位避免坐标问题

性能优化

  1. 灰度匹配:grayscale=True 提速 3 倍,多数场景够用.
  2. 区域限定:find_image(region=(x,y,w,h)) 只搜指定区域,大幅加速.
  3. 缓存模板:重复使用的模板图预加载,避免每次读盘.
  4. 智能等待早返回:wait_for_image 找到立即返回,不硬等满 timeout.
  5. 批量操作:用工作流编排批量执行,减少单次调用开销.

依赖与配置

运行环境

  • Agent 平台:支持 SKILL.md 的任意 AI Agent
  • 操作系统:Windows / macOS / Linux(需图形界面)
  • Python:3.8+

第三方依赖

依赖项类型是否必需获取方式
PyAutoGUIPython 包必需pip install pyautogui
PillowPython 包必需pip install pillow
OpenCV (opencv-python)Python 包必需(图像识别)pip install opencv-python
PyGetWindowPython 包必需(窗口管理)pip install pygetwindow
pytesseractPython 包可选(OCR)pip install pytesseract
Tesseract OCR系统程序OCR 必需官方安装 + 中文语言包
NumPyPython 包推荐(多尺度匹配)pip install numpy
LLM APIAPI必需由 Agent 内置 LLM 提供

API Key 配置

  • 本技能为本地桌面操作,无需外部 API Key.
  • OCR 功能需本地安装 Tesseract,无需 Key.
  • 部分应用自动化可能需要管理员权限.

可用性分类

  • 分类:MD+EXEC(Markdown 指令 + Python 执行)
  • 说明:Agent 通过 Python API 驱动 GUI 自动化,本技能提供视觉定位、智能等待与工作流编排,实际操作通过 PyAutoGUI/OpenCV 执行.
  • 需要Claude、GPT-4等大语言模型提供推理和自然语言理解能力

功能速览

桌面自动驾驶为 AI Agen

桌面自动驾驶为 AI Agent 提供基于视觉的智能 GUI 自动化能力 处理: 解析桌面自动驾驶为 AI Agen的输入参数,完成核心逻辑,返回格式化结果. 输出: 返回桌面自动驾驶为 AI Agen的响应数据,附带状态标识与运行日志.

  • 使用input_params进行配置,支持创建/查询/导出操作

它不依赖固定坐标

它不依赖固定坐标,而是通过图像识别、OCR 文本定位、智能等待元素出现来操控界面,内置工作流编排、录制回放、DPI 自适应与多显示器支持,让自动化脚本像人一样"看着屏幕操作" 处理: 解析它不依赖固定坐标的输入参数,完成核心逻辑,返回格式化结果. 输出: 返回它不依赖固定坐标的响应数据,附带状态标识与运行日志.

  • 使用input_params进行配置,支持创建/查询/导出操作

核心能力(补充)

核心能力:视觉元素定位(图像匹配+OCR)、智能等待(等元素出现/消失)、工作流编排(步骤序列+条件分支)、录制回放、DPI 自适应坐标转换、多显示器管理、安全护栏(确认模式+操作日志+回滚快照) 处理: 解析核心能力的输入参数,完成核心逻辑,返回格式化结果. 输出: 返回核心能力的响应数据,附带状态标识与运行日志.

  • 使用input_params进行配置,支持创建/查询/导出操作

适用场景

适用场景:表单自动填写、数据录入、应用间数据搬运、UI 回归测试、重复性操作自动化、一人公司省人力 处理: 解析适用场景的输入参数,完成核心逻辑,返回格式化结果. 输出: 返回适用场景的响应数据,附带状态标识与运行日志.

  • 使用input_params进行配置,支持创建/查询/导出操作

定位为"自动驾驶层"

定位为"自动驾驶层",与系统控制器(系统层进程/文件)明确分工 处理: 解析定位为"自动驾驶层"的输入参数,完成核心逻辑,返回格式化结果. 输出: 返回定位为"自动驾驶层"的响应数据,附带状态标识与运行日志.

  • 使用input_params进行配置,支持创建/查询/导出操作 技术参数:使用input_params和output_format参数控制执行行为,支持json/text/csv输出格式. 能力覆盖范围:能力范围包括以下关键词:智能桌面、视觉识别定位、自适应不迷路、Use、when、模型调用、智能对话、LLM、应用时使用、不适用于需要、确定性的关键决策等。这些关键词对应description中声明的使用场景,均已在上述能力点中提供对应的操作支持.

适用场景(补充)

场景 A:表单自动填写(补充)

ap = Autopilot(dpi_aware=True)
ap.snapshot("before")
ap.png", timeout=10)
ap.type_text("张三")
ap.press('tab')
ap.type_text("13800138000")
ap.click_image("submit.png")
ap.show_snapshot("before")
```bash
# 在此执行相关操作
echo "操作完成"
```python
# 本技能的核心实现逻辑
# 请参考上方使用说明进行配置和调用
result = "implementation_ready"
```bash
# 在此执行相关操作
echo "操作完成"
```bash
pip install pyautogui pillow opencv-python pygetwindow pytesseract

能力边界

  • 视觉识别定位受屏幕分辨率和DPI缩放影响,多显示器不同DPI环境下可能定位偏差
  • GUI自动化依赖目标应用的窗口可访问性(Accessibility API),部分自绘UI控件无法识别
  • 智能等待机制基于元素出现检测,网络应用加载完成后异步渲染的内容可能被遗漏

性能数据

操作场景手动耗时自动化耗时效率提升
文件解析与提取5-10分钟/个<5秒/个60-120x
批量文件处理(100个)8-16小时<5分钟96-192x
API调用与响应解析2-3分钟/次<1秒/次120-180x
多接口数据聚合15-30分钟<10秒90-180x
命令执行与结果收集3-5分钟/次<2秒/次90-150x
重复任务批量执行因任务而异线性缩减5-50x
错误排查与修复10-30分钟<30秒20-60x

特色分析

对比维度桌面自动驾驶传统手动方式通用脚本工具
自动化程度全流程自动完全手动部分自动
错误处理内置错误恢复依赖人工经验基本try-catch
可复用性参数化配置一次性脚本模板化
安全合规内置安全检查无安全保障无安全保障
适用场景智能桌面 GUI 自动化,视觉识别定位、智能等待、工作流编排,DPI 自适应不迷通用场景通用场景

Q2: 需要配置API Key吗?

A2: 是的,部分功能需要配置对应平台的API Key。请在依赖说明章节查看具体要求,并通过环境变量安全配置。

Q3: 命令行执行失败怎么办?

A3: 检查命令参数是否正确,确认运行环境支持exec能力。如遇权限问题,请参照错误处理章节排查。

评论与讨论

0/2000

还没有评论,分享你的体验吧。