[自动化Adapt] 录制引擎 | iframe 穿透 | NTP | AIOSQLite | 数据分片

链接:https://github.com/OpenAdaptAI/OpenAdapt/wiki/OpenAdapt-Architecture-(draft)

在这里插入图片描述


docs:OpenAdapt

OpenAdapt 是一个开源项目,旨在 记录回放 用户在计算机上的交互行为

它如同智能助手般 观察 我们的操作(鼠标点击、键盘输入、屏幕变化),并将这些行为存储为结构化 *数据模型*

通过 任务自动化 技术,这些记录数据可以被重新执行,并利用 *AI* 驱动的策略来适应不同场景。

该项目特别注重 隐私保护,允许从记录中擦除敏感信息。

架构

在这里插入图片描述

章节

  1. 录制引擎
  2. 数据模型
  3. GUI 交互(窗口/元素)
  4. 配置管理
  5. 事件处理与合并
  6. 数据库管理
  7. 隐私擦除
  8. 回放策略
  9. AI 模型驱动

第一章:录制引擎

欢迎进入 OpenAdapt 的奇妙世界~

本章将解析 OpenAdapt 实现计算机任务自动化的核心组件——录制引擎

该组件如同系统的感官系统,实时捕捉用户在计算机上的所有交互行为。

录制引擎的核心价值

设想我们需要教机器人烘焙蛋糕,单纯的口头指导远不如亲自演示每个操作步骤。OpenAdapt 的录制引擎正是通过 全维度行为捕捉 来实现类似的教学过程:

  1. 行为复现基础
    记录鼠标轨迹、键盘输入、屏幕变化等原始数据,为自动化回放建立数据基石

  2. 环境上下文感知
    同步捕获窗口状态、浏览器元素等环境信息,确保操作场景的可还原性

  3. 多模态数据融合
    整合视觉(屏幕截图)、操作(键鼠事件)、语义(浏览器元素)等多维度信息

快速入门指南

通过终端命令启动录制流程:

python -m openadapt.record "打开浏览器并点击按钮"

操作演示完成后,使用 Ctrl+C(Windows/Linux)或 Cmd+C(macOS)终止录制。

系统将自动保存结构化录制数据至数据库。

多维感知子系统

视觉采集模块

# 摘自 openadapt/record.py
def read_screen_events(event_q, terminate_processing, recording, started_event):logger.info("启动屏幕事件读取器")while not terminate_processing.is_set():# 获取当前屏幕截图screenshot = utils.take_screenshot()  # 注入事件队列event_q.put(Event(utils.get_timestamp(), "screen", screenshot))

关键技术:

  • 跨平台屏幕捕获(Windows/macOS/Linux)
  • 可配置采样频率(默认 30fps)
  • 智能差分压缩(仅存储帧间差异)

输入监控模块

# 键盘事件监听实现
def read_keyboard_events(event_q, terminate_processing, recording, started_event):keyboard_listener = keyboard.Listener(on_press=partial(on_press, event_q),  # 按键按下事件on_release=partial(on_release, event_q)  # 按键释放事件)# 鼠标事件捕获逻辑
def read_mouse_events(event_q, terminate_processing, recording, started_event):mouse_listener = mouse.Listener(on_move=partial(on_move, event_q),  # 移动轨迹on_click=partial(on_click, event_q),  # 点击事件on_scroll=partial(on_scroll, event_q)  # 滚轮操作)

数据精度控制:

  • 鼠标坐标的屏幕坐标系映射
  • 事件时间戳的微秒级同步
  • 输入设备类型的自动识别

窗口状态追踪

# 窗口事件处理流程
def read_window_events(event_q, terminate_processing, recording, started_event):prev_window_data = {}while not terminate_processing.is_set():window_data = window.get_active_window_data()  # 获取窗口元数据if window_data != prev_window_data:event_q.put(Event(utils.get_timestamp(), "window", window_data))

核心元数据包含:

{"window_id": 0xCAFEBABE,"title": "Chrome浏览器 - 示例网站","geometry": [1280, 720, 1920, 1080],"process_id": 114514,"executable_path": "/Applications/Google Chrome.app"
}

浏览器深度监控

通过 Chrome 扩展实现网页元素级监控:

// chrome_extension/content.js
chrome.runtime.sendMessage(
{type: "element_click",data: {xpath: "//button[@id='submit']",innerText: "提交表单",boundingRect: { x: 320, y: 240, width: 80, height: 40 }}
});

扩展程序功能矩阵:

  • DOM 元素语义化解析
  • 动态内容变更监听
  • 跨域 iframe 穿透处理

跨域 iframe 穿透 :通过技术手段绕过浏览器同源策略,实现跨域 iframe 与父页面或子页面之间的数据交互或操作。

常见方法包括:

  • postMessage:通过 window.postMessage 实现安全跨域通信。
  • document.domain:主域相同时可设置相同 document.domain 实现共享。
  • 代理页面:借助同源中间页作为桥梁转发数据。
  • CORS 头部:服务端配置 Access-Control-Allow-Origin 允许特定域访问。

数据处理流水线

在这里插入图片描述

关键处理阶段:

  1. 时空对齐
    采用 NTP 时间同步协议,确保跨设备事件时序一致性

  2. 上下文关联
    建立操作事件与屏幕状态、窗口环境的映射关系

  3. 语义增强
    对浏览器元素添加 XPathCSS 选择器等可编程标识

NTP(网络时间协议): 一种让计算机时钟与标准时间源保持一致的协议,就像自动校准手表一样。

事件类型体系

事件类型数据结构示例应用场景
屏幕帧{timestamp: 162083.12, format: "PNG"}操作回放可视化
鼠标点击{x: 640, y: 360, button: "left"}点击位置分析
键盘输入{key: "Enter", modifiers: ["Shift"]}表单自动填写
窗口切换{title: "Untitled - Notepad"}多应用工作流录制
浏览器DOM事件{xpath: "//input[@name='email']"}网页元素精准定位

总结

通过本指南,我们深入理解了 OpenAdapt 录制引擎的多维度感知能力。该组件不仅实现了基础操作记录,更通过环境上下文捕获和语义增强,为智能自动化奠定了数据基础。

值得关注的技术演进方向:

  1. 基于 WebAssembly 的前端行为录制
  2. 图形界面元素的 AI 语义识别
  3. 分布式设备的协同录制

下一章:数据模型将解析如何将这些原始事件转化为可编程的自动化指令。


第二章:数据模型

在第一章:录制引擎中,我们了解到 OpenAdapt 通过"感官系统"持续捕捉计算机操作行为。本章将解析这些原始数据如何通过 数据模型 实现结构化组织

数据模型的核心作用

数据模型如同 结构化模板,为 OpenAdapt 采集的各类信息提供标准化存储格式。

这种设计可类比烹饪食谱的结构化记录:

* **菜品名称**:"巧克力曲奇"
* **原料配比**:- 面粉:2 杯- 砂糖:1 杯
* **制作步骤**:1. 混合黄油与砂糖2. 加入鸡蛋

数据模型为计算机操作记录赋予同等严谨的结构化特征,实现三大核心价值:

  1. 高效存储
    规范化数据结构便于数据库持久化

  2. 精准检索
    明确的字段定义确保操作回放时能快速定位关联信息

  3. 语义理解
    结构化存储为开发者提供清晰的语义解析基础

核心数据模型

1. 录制记录模型(Recording)

此模型记录自动化任务的元数据,相当于操作记录的"档案袋":

# 数据库模式定义(简化)
op.create_table("recording",sa.Column("id", sa.Integer(), primary_key=True),  # 唯一标识sa.Column("timestamp", sa.Integer()),  # 录制开始时间戳sa.Column("monitor_width", sa.Integer()),  # 屏幕分辨率宽度sa.Column("platform", sa.String()),  # 操作系统类型sa.Column("task_description", sa.Text())  # 任务描述文本
)

关键字段说明:

  • monitor_width/height:确保跨设备回放时的屏幕坐标映射
  • platform:记录操作系统差异(Windows/macOS/Linux)
  • 外键关联:通过 id 字段与下级模型建立层级关系

2. 操作事件模型(ActionEvent)

记录原子级用户交互行为,构成自动化回放的基础单元:

class ActionEvent(db.Base):__tablename__ = "action_event"id = sa.Column(sa.Integer, primary_key=True)name = sa.Column(sa.String(50))  # 事件类型(点击/按键等)mouse_x = sa.Column(sa.Float)    # 屏幕X坐标mouse_y = sa.Column(sa.Float)    # 屏幕Y坐标key_char = sa.Column(sa.String)  # 输入字符(区分大小写)recording_id = sa.Column(sa.ForeignKey("recording.id"))  # 外键关联

事件类型矩阵:

事件类型记录参数应用场景
鼠标点击(x,y)坐标,按键类型界面元素交互记录
键盘输入字符编码,功能键状态表单填写流程记录
滚轮操作滚动方向,滚动量页面导航行为记录

3. 屏幕快照模型(Screenshot)

存储视觉上下文信息,提供操作回放的画面基准

class Screenshot(db.Base):png_data = sa.Column(sa.LargeBinary)  # PNG格式二进制数据timestamp = sa.Column(sa.Float)       # 精确到毫秒的时间戳recording_id = sa.Column(sa.ForeignKey("recording.id"))

技术特性:

  • 采用无损压缩的 PNG 格式存储
  • 时间戳与操作事件精确对齐
  • 支持差分存储优化(仅记录帧间变化)

4. 窗口状态模型(WindowEvent)

记录图形界面环境上下文,确保跨应用操作的准确性:

{"window_id": 0x7FEEBEEF,"title": "Untitled - TextEdit","geometry": [0, 0, 1920, 1080],"process_path": "/Applications/TextEdit.app"
}

关联作用:

  • 通过 window_id 识别特定应用程序窗口
  • geometry 字段记录窗口位置尺寸
  • 与操作事件的时间戳联动,还原完整操作场景

5. 浏览器事件模型(BrowserEvent)

增强网页环境语义理解,存储 DOM 层级信息:

class BrowserEvent(db.Base):message = sa.Column(sa.JSON)  # 结构化网页数据# 示例数据
{"xpath": "//button[@id='submit']","innerHTML": "<span>提交</span>","css_selector": "#login-form > input.email"
}

数据价值:

  • 通过 XPath/CSS 选择器精准定位元素
  • 记录动态 DOM 变更实现智能等待
  • 支持 iframe 嵌套等复杂结构解析

数据关联架构

在这里插入图片描述

关联机制说明:

  1. 时间维度对齐
    采用高精度计时器(QueryPerformanceCounter)确保毫秒级同步

  2. 空间坐标映射
    基于屏幕DPI和分辨率自动换算坐标体系

  3. 上下文绑定
    通过外键关联实现操作事件与环境状态的动态绑定

数据处理

在这里插入图片描述

关键技术:

  • 零拷贝队列:采用 multiprocessing.Queue 实现进程间高效通信
  • 异步I/O:使用 aiosqlite 实现非阻塞数据库写入
  • 数据分片:将数据按类型拆分到不同存储节点,实现并行处理,提升效率。
AIOSQLite

一个 Python 库,基于 SQLite 数据库的异步(asyncio)封装。

它允许在异步程序(如 FastAPI、Tornado)中高效操作 SQLite 数据库,避免传统同步接口导致的阻塞问题。

核心特点 :

  • 异步支持:通过 asyncio 实现非阻塞的数据库操作,适合高并发场景。
  • 轻量易用:保留 SQLite 的简洁性,提供类似 aiohttp 的异步语法。
  • 兼容性:底层仍使用标准 SQLite,但通过线程池处理同步调用,确保异步协程不阻塞事件循环。

应用场景 :

适用于需要异步读写 SQLite 的 Web 后端、爬虫实时数据处理程序

总结

通过本章学习,我们深入理解了 OpenAdapt 如何通过结构化数据模型实现操作记录的精准还原。当前架构已支持:

  1. 多平台环境适配
  2. 毫秒级事件同步
  3. 跨应用场景记录

未来演进方向:

  1. 基于 WebAssembly 的模型优化
  2. 操作语义的向量化编码
  3. 分布式录制集群支持

下一章:GUI 交互(窗口/元素)将深入解析界面元素的智能识别技术。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/web/92180.shtml
繁体地址,请注明出处:http://hk.pswp.cn/web/92180.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ipv6学习

ipv6的历史背景和及展望ipv6普及不够&#xff0c;ipv4快要用完。ipv6技术部分ivp6包头结构ipv6不允许分片&#xff0c;减轻中间设备压力。IPv6 包头结构可按字段分层解析&#xff0c;核心特点是 固定头部长度&#xff08;40 字节&#xff09; &#xff0c;将可选功能移至扩展头…

软件定义汽车 --- 电子电气架构的驱动

我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 做到欲望极简,了解自己的真实欲望,不受外在潮流的影响,不盲从,不跟风。把自己的精力全部用在自己。一是去掉多余,凡事找规律,基础是诚信;二是…

HTML5 语义元素

HTML5 语义元素 引言 HTML5 作为现代网页开发的基础&#xff0c;引入了许多新的语义元素&#xff0c;这些元素使得网页内容更加结构化&#xff0c;便于搜索引擎更好地理解和索引页面内容。本文将详细介绍 HTML5 中的语义元素&#xff0c;并探讨其在网页设计中的应用。 HTML5…

vue3 el-select el-option 使用

在 Vue 3 中&#xff0c;el-select 是 Element Plus 组件库中的一个选择器组件&#xff0c;它允许用户从下拉菜单中选择一个或多个选项。如果你想在使用 Vue 3 和 Element Plus 时让 el-select 支持多种选择&#xff08;即多选&#xff09;&#xff0c;你可以通过设置 multiple…

windows搬运文件脚本

使用方法&#xff1a;copy_files_by_prefix.bat [目标目录] [结果目录] [文件名前缀] [可选参数&#xff1a;文件包含内容]echo off chcp 65001 >nul setlocal enabledelayedexpansion:: Check parameters if "%~3""" (echo Usage: %~nx0 [SourceDir] […

C++ 中 initializer_list 类型推导

在 C 中&#xff0c;initializer_list 是一种用于表示列表初始化的标准库模板类&#xff0c;提供了一种方便的方式来初始化容器或者进行函数调用时传递一组参数。initializer_list&& 类型推导涉及到右值引用和移动语义&#xff0c;这在现代 C 中变得越来越重要。initia…

自动驾驶中的传感器技术22——Camera(13)

1、可靠性验证的目标车载摄像头作为自动驾驶和高级驾驶辅助系统&#xff08;ADAS&#xff09;的核心传感器&#xff0c;其可靠性直接影响到行车安全。可靠性验证的目标如下&#xff1a;暴露产品缺陷&#xff1a;在研制阶段&#xff0c;通过测试发现并修正产品设计中的问题&…

一周学会Matplotlib3 Python 数据可视化-图形的组成部分

锋哥原创的Matplotlib3 Python数据可视化视频教程&#xff1a; 2026版 Matplotlib3 Python 数据可视化 视频教程(无废话版) 玩命更新中~_哔哩哔哩_bilibili 课程介绍 本课程讲解利用python进行数据可视化 科研绘图-Matplotlib&#xff0c;学习Matplotlib图形参数基本设置&…

三万字带你了解那些年面过的Java八股文

Java基础 1. String 和StringBuffer 和 StringBuilder的区别&#xff1f; String 字符串常量 StringBuffer 字符串变量&#xff08;线程安全&#xff09; StringBuilder 字符串变量&#xff08;非线程安全&#xff09; 2. sleep() 区间wait()区间有什么区别&#xff1f; sleep…

HTML 媒体元素概述

HTML 提供了多种元素用于嵌入和控制多媒体内容&#xff0c;包括音频、视频、图像、画布等。以下是常用的 HTML 媒体元素及其用法&#xff1a;音频 (<audio>)<audio> 元素用于嵌入音频内容&#xff0c;支持 MP3、WAV、OGG 等格式。 示例代码&#xff1a;<audio c…

http请求结构体解析

copy了一个接口的curl用来说明http请求的三个结构&#xff1a;请求行&#xff0c;请求头&#xff0c;请求体 文章目录一、请求的curl报文示例二、解析1. 请求行&#xff08;Request Line&#xff09;2. 请求头&#xff08;Request Headers&#xff09;3. 请求体&#xff08;Req…

无人机遥控器舵量技术解析

一、舵量的核心作用1. 精确控制的核心 舵量值&#xff08;通常以PWM微秒值表示&#xff09;量化了操作指令的强度&#xff1a; 小舵量&#xff08;1000μs&#xff09;&#xff1a;对应舵机最小角度或电机最低转速&#xff1b; 中点&#xff08;1500μs&#xff09;&#xf…

Git分支相关命令

在 Git 中&#xff0c;分支管理是非常重要的一部分。下面是一些常用的 Git 分支操作命令及其示例。 1. 查看所有分支 要查看项目中的所有分支&#xff08;包括本地和远程&#xff09;&#xff0c;可以使用&#xff1a; git branch -a仅查看本地分支&#xff1a;git branch2. 创…

Apache Flink 的详细介绍

Apache Flink 是一个开源的分布式流处理框架&#xff0c;专注于高吞吐、低延迟、 Exactly-Once 语义的实时数据处理&#xff0c;同时也支持批处理&#xff08;将批数据视为有限流&#xff09;。它广泛应用于实时数据分析、实时 ETL、监控告警、欺诈检测等场景&#xff0c;是当前…

Qt 常用控件 - 5

Qt 常用控件 - 4https://blog.csdn.net/Small_entreprene/article/details/149830464 前文补充 QRadioButton&#xff08;单选按钮&#xff09; QRadioButton 是单选按钮&#xff0c;允许在多个选项中选择一个。作为 QAbstractButton 和 QWidget 的子类&#xff0c;前面介绍…

vue的响应式原理

Vue.js 的响应式原理是其核心特性之一&#xff0c;使得数据变化能够自动更新到视图。Vue 的响应式系统主要依赖于 Object.defineProperty&#xff08;在 Vue 2.x 中&#xff09;和 Proxy&#xff08;在 Vue 3.x 中&#xff09;来实现数据的观察和更新。以下是对 Vue 响应式原理…

【AI论文】PixNerd:像素神经场扩散

摘要&#xff1a;扩散变换器目前所取得的成功在很大程度上依赖于预训练变分自编码器&#xff08;VAE&#xff09;所塑造的压缩潜在空间。然而&#xff0c;这种两阶段训练模式不可避免地会引入累积误差和解码伪影。为解决上述问题&#xff0c;研究人员选择回归像素空间&#xff…

Java中的LambdaMetafactory:动态生成Lambda的底层黑魔法

引言 在Java 8中&#xff0c;Lambda表达式作为最引人注目的新特性之一被引入。但你是否曾好奇过&#xff0c;这些简洁的Lambda表达式在底层是如何实现的&#xff1f;这就是LambdaMetafactory发挥作用的地方。作为Java语言中一个不太为人所知但极其重要的类&#xff0c;LambdaMe…

看不见的伪造痕迹:AI时代的鉴伪攻防战

在生成式人工智能飞速发展的今天&#xff0c;“眼见为实”这句话的有效性正面临前所未有的挑战。以往&#xff0c;图像篡改往往通过传统的图像处理工具&#xff08;如 Photoshop&#xff09;进行&#xff0c;需要较高的技术门槛和人工成本&#xff1b;而现在&#xff0c;仅需通…

《React+TypeScript实战:前端状态管理的安全架构与性能优化深解》

当用户在界面上进行表单提交、数据筛选等操作时,每一次交互的精准响应,都依赖于底层状态架构对风险的预判与性能的调控。深入理解如何在功能实现之外,构筑一套兼顾状态安全与运行高效的体系,是从基础开发迈向工程化实践的关键一跃。状态管理机制的设计,需要穿透“数据更新…