跳转到主要内容

RPA 工作流

Zeus Desktop 支持将录制并参数化的浏览器操作工作流 发布为标准的 MCP(JSON-RPC 2.0)工具,让 AI Agent 能够像调用普通函数一样驱动浏览器执行业务操作。

概述

整体架构

设计原则

原则说明
终端不开放端口所有通信通过终端主动建立的 WebSocket 连接完成
标准协议严格遵循 JSON-RPC 2.0 / MCP 协议规范
动态注册工作流发布后自动注册为可调用工具,无需重启
静默执行浏览器可在后台静默运行,不干扰用户
严格流程工作流按步骤顺序执行,不允许探索性操作

发布工作流为工具

发布流程

  1. 完成录制:录制浏览器操作并保存为工作流
  2. 参数化:将需要动态传入的值标记为变量(参见 流程录制 - 参数化
  3. 发布工具:在工作流编辑器中点击 发布 Tool 按钮
  4. 配置元信息
    • 工具名称toolName):Agent 调用时使用的标识,如 query_power_data
    • 工具描述toolDescription):告诉 Agent 这个工具的用途
  5. 确认发布:保存后工具立即可用

发布对话框

发布对话框会自动提取工作流中所有参数化操作,生成工具参数列表:
字段来源说明
参数名variableName变量名作为工具入参名
描述paramDescription参数用途说明
默认值defaultValue可选的默认值
是否必填无默认值 → 必填无默认值的参数为必填

生成的工具定义

发布后,系统自动生成符合 MCP 规范的工具定义:
{
  "name": "workflow_query_power_data",
  "description": "登录电力系统并查询指定区域的用电数据",
  "inputSchema": {
    "type": "object",
    "properties": {
      "username": {
        "type": "string",
        "description": "登录用户名"
      },
      "password": {
        "type": "string",
        "description": "登录密码"
      },
      "region": {
        "type": "string",
        "description": "查询区域编码",
        "default": "110000"
      },
      "profileId": {
        "type": "string",
        "description": "Browser profile ID (optional override)"
      }
    },
    "required": ["username", "password"]
  }
}

Agent 调用流程

工具发现

Agent 通过 MCP 的 tools/list 方法获取终端上可用的所有工具:
// Agent → Desktop (JSON-RPC Request)
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/list"
}

// Desktop → Agent (JSON-RPC Response)
{
  "jsonrpc": "2.0",
  "id": 1,
  "result": {
    "tools": [
      {
        "name": "desktop_exec",
        "description": "Execute shell commands on desktop"
      },
      {
        "name": "browser_read",
        "description": "Extract data from browser pages"
      },
      {
        "name": "hitl_prompt",
        "description": "Request user input during automation"
      },
      {
        "name": "workflow_query_power_data",
        "description": "登录电力系统并查询指定区域的用电数据",
        "inputSchema": { "..." }
      }
    ]
  }
}

工具调用

Agent 决定调用某个工作流工具时,发送标准的 tools/call 请求:
// Agent → Desktop
{
  "jsonrpc": "2.0",
  "id": 2,
  "method": "tools/call",
  "params": {
    "name": "workflow_query_power_data",
    "arguments": {
      "username": "operator_001",
      "password": "secure_pass",
      "region": "330100"
    }
  }
}

执行结果

// Desktop → Agent
{
  "jsonrpc": "2.0",
  "id": 2,
  "result": {
    "content": [
      {
        "type": "text",
        "text": "{\"success\": true, \"totalActions\": 8, \"completedActions\": 8, \"failedActions\": 0}"
      }
    ]
  }
}

内置工具

除了动态注册的工作流工具,Desktop 还提供以下内置 MCP 工具:

desktop_exec

在终端执行 Shell 命令。
{
  "name": "desktop_exec",
  "arguments": {
    "command": "ls -la /tmp/reports/"
  }
}

browser_read

从浏览器页面提取数据,支持多种提取方式:
Action说明返回值
text提取页面或元素的文本内容纯文本字符串
table解析 HTML 表格为结构化数据二维数组(表头 + 行数据)
form提取表单字段当前值字段名-值映射
html获取元素或页面的 HTMLHTML 字符串
url获取当前页面 URLURL 字符串
screenshot截取页面截图Base64 PNG 图片
调用示例:
{
  "name": "browser_read",
  "arguments": {
    "action": "table",
    "selector": "#data-table",
    "profileId": "profile-001"
  }
}
典型场景: Agent 先执行 workflow_query_power_data 进入数据页面,再用 browser_read 提取页面上的表格数据进行分析。

hitl_prompt

在自动化流程中请求用户手动输入,适用于验证码、短信码等无法自动获取的场景。
{
  "name": "hitl_prompt",
  "arguments": {
    "title": "短信验证码",
    "message": "请输入您手机收到的 6 位验证码",
    "inputType": "text",
    "timeout": 120
  }
}
执行流程:
  1. 系统弹出通知提醒用户
  2. 在 Desktop 界面弹出输入对话框
  3. 用户输入后,值返回给 Agent
  4. 超时未输入则返回超时状态
交互方式优先级:
优先级方式说明
1Renderer 弹窗Desktop 主窗口可见时,在渲染进程中展示对话框
2原生对话框主窗口不可见时,使用 Electron 原生对话框
3超时超过设定时间无响应,返回超时状态

静默浏览器模式

当 Agent 远程调用工作流工具时,浏览器会以 静默模式 启动,不会在用户屏幕上显示浏览器窗口:

静默模式特性

特性说明
窗口不可见浏览器窗口定位在屏幕外(-2400, -2400)
固定视口窗口大小固定为 1280×720
最小资源禁用 GPU、扩展、弹窗和通知
独立配置使用指定的浏览器 Profile,隔离 Cookie 和状态

静默模式启动参数

--window-position=-2400,-2400
--window-size=1280,720
--disable-gpu
--disable-extensions
--disable-popup-blocking
--disable-notifications

动态工具注册

注册时机

Desktop 在以下时机将工具信息同步到后端:
  1. WebSocket 连接建立时:发送注册消息,包含所有可用工具列表
  2. 工作流发布/取消发布时:通知后端更新工具列表

注册消息

{
  "type": "register",
  "deviceId": "device-abc123",
  "capabilities": ["desktop_exec", "browser_control", "workflow_execution"],
  "available_tools": [
    "desktop_exec",
    "browser_read",
    "hitl_prompt",
    "workflow_query_power_data",
    "workflow_generate_report"
  ]
}

后端工具创建

AI Backend(Python)收到工具列表后,为每个工作流工具动态创建 LangChain StructuredTool
# 动态创建 Pydantic schema
DynamicModel = create_model(
    "QueryPowerDataInput",
    username=(str, Field(description="登录用户名")),
    password=(str, Field(description="登录密码")),
    region=(str, Field(default="110000", description="查询区域编码")),
)

# 创建 LangChain Tool
tool = StructuredTool.from_function(
    name="workflow_query_power_data",
    description="登录电力系统并查询指定区域的用电数据",
    args_schema=DynamicModel,
    func=lambda **kwargs: call_desktop_tool("workflow_query_power_data", kwargs),
)

典型业务场景

场景一:电力数据采集

场景二:需要验证码的操作

场景三:批量数据处理

Agent 可以循环调用工作流工具,处理批量任务:
  1. 调用 workflow_login 登录系统
  2. 循环调用 workflow_query_data(传入不同参数)提取多页数据
  3. 调用 browser_read 获取页面数据
  4. 汇总分析,调用 workflow_generate_report 生成报告

错误处理

错误码

错误码说明
-32001工具执行错误
-32002工作流执行错误
-32003工作流未找到
-32004浏览器未运行

回放引擎容错

机制参数说明
元素等待最长 10s等待目标元素出现在 DOM 中
操作重试3 次,间隔 1s操作失败自动重试
超时保护30s/操作单个操作超时后继续下一步

执行结果

工作流执行完成后返回结构化结果:
interface WorkflowExecutionResult {
  success: boolean
  totalActions: number
  completedActions: number
  failedActions: number
  results: ActionResult[]
}

兼容性

Windows 7 支持

由于部分终端运行 Windows 7 系统,需注意:
  • Electron 22.x 是最后支持 Win7 的版本
  • 需要使用对应版本的 Chromium 内核
  • 部分现代 Web API 可能不可用

信创系统支持

信创终端(UOS / 麒麟)兼容方案:
平台架构分发格式
UOSx64 / arm64.deb
麒麟x64 / arm64.rpm / .deb
通用 Linuxx64.zip (便携版)

相关文档