[自動化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
英文地址,請注明出處:http://en.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實戰:前端狀態管理的安全架構與性能優化深解》

當用戶在界面上進行表單提交、數據篩選等操作時,每一次交互的精準響應,都依賴于底層狀態架構對風險的預判與性能的調控。深入理解如何在功能實現之外,構筑一套兼顧狀態安全與運行高效的體系,是從基礎開發邁向工程化實踐的關鍵一躍。狀態管理機制的設計,需要穿透“數據更新…