架构视角:多进程协同模型

通过进程快照(ps -A | grep obric),我们可以清晰地看到 Agent 并非单体应用,而是一套严密的分层架构。这不仅是一个 App,更是一套深度集成于 Android Framework 的系统级服务。

graph TD
    User[用户] -->|语音/触控| UI[交互层: assistantaiagent]
    UI -->|意图识别| Kernel[推理层: aikernel]
    Kernel -->|决策指令| Action[执行层: autoaction]
    
    subgraph System_Privilege [系统特权域 - Platform Signature]
        Action -->|INJECT_EVENTS| Input[输入子系统]
        Action -->|READ_FRAME_BUFFER| Surface[图形子系统]
    end
    
    style Action fill:#f9f,stroke:#333,stroke-width:2px
    style System_Privilege fill:#f0f0f0,stroke:#333,stroke-dasharray: 5 5

关键组件解析:

  • 交互层 com.obric.assistantaiagent:用户可见的 UI 界面,负责语音交互和结果反馈。
  • 推理层 com.obric.aikernel:推测为端侧小模型的运行环境,负责本地意图识别和隐私过滤。
  • 执行层 com.obric.autoaction:核心差异点。拥有系统级特权(Platform Signature)的无头服务进程,负责后台执行点击与截图。

感知层:它如何“看见”屏幕?

Agent 能够操作任意 App 的前提是能够“看见”并理解当前界面。

虚拟显示技术 (Virtual Display)

dumpsys display 日志中,Agent 利用 Android 的 VirtualDisplay 机制,在系统后台创建了一个“平行屏幕”。

graph TB
    App[目标 App - 如美团] -->|绘制| Surface[SurfaceFlinger]
    Surface -->|Layer Stack 0| Physical[物理屏幕 - Display 0]
    Surface -->|Layer Stack 1| Virtual[虚拟屏幕 - Display 99]
    
    Virtual -->|截屏流| VLM[Agent 视觉感知]
    Input[InputManager] -->|注入事件| Virtual
    Input -->|触摸事件| Physical
    
    style Virtual fill:#ddf4ff,stroke:#0969da,stroke-width:2px
    style Physical fill:#f6f8fa,stroke:#d0d7de

为何能实现“无感”:

  • 显示隔离:目标 App 被投射到虚拟屏上,用户在物理屏看不到任何干扰。
  • 输入隔离:Agent 通过 INJECT_EVENTS 将点击事件定向注入到虚拟屏的 InputChannel,不抢占物理屏焦点。

虚拟屏的尺寸和物理屏一样、虚拟屏幕owner为autoaction进程

视觉数据的获取与隐私

Agent 持有系统级特权权限 READ_FRAME_BUFFER,可直接访问 GPU 帧缓冲区,避免传统截图文件落地,直接读取原始位图(Raw Bitmap),效率极高。

隐私的“君子协定”:
Agent 申请了 CAPTURE_SECURE_VIDEO_OUTPUT 权限,理论上可绕过安全限制。但实际遵循 Android 的 FLAG_SECURE 协议,遇到支付或密码页面会进行黑屏处理,这是在绝对控制权与用户隐私合规之间的平衡。

决策层:端云协同的 VLM 协议

Agent 如何思考?通过网络抓包分析,还原其 “Stop-and-Think” 的思考模型。

离散轮询 vs 实时流

请求间隔约为 3 秒。Agent 采取“截图 -> 上传 -> 决策 -> 执行”的离散步进模式,而非上传实时视频流。

载荷分析 (Payload)

对比实际网络请求日志,证实了“本地压缩”的猜测:

  • 原始 Bitmap:1080P/2K 无压缩数据,约 ~8MB/帧,延时与流量不可接受。
  • 实际抓包:sent_body_bytes 显示约 ~240KB/帧,推测本地高压缩(JPEG/WebP)。

流量模型总结:这是典型的“宽上行、窄下行”。上行传输视觉信息(240KB),下行仅传输文本控制指令(1KB),网络延迟低。

原子指令集

云端 VLM 在“看图”后,返回结构化 JSON 指令:

1
2
3
4
5
6
7
8
9
10
{
"action": "click",
"target": {
"type": "coordinate",
"x": 540,
"y": 1920
},
"reason": "检测到'确认支付'按钮",
"confidence": 0.98
}

指令集包括:

  • open_app:打开应用,按包名或应用名唤起。
  • click:坐标点击、双击、长按等。
  • swipe:滑动。
  • type:文本输入。
  • device_action:系统实体键(BACK、HOME、POWER)。
  • wait:显式等待页面加载或动画结束。
  • get_memory:记忆读取。
  • take_notes:信息提取到系统笔记。
  • call_user:人工介入。
  • stop:任务终止。

执行层:基于坐标的底层注入

这是 AI Agent 与无障碍服务最大的分水岭。

为什么必须用底层注入?

  • 传统无障碍(Accessibility)
    机制:前台独占运行。
    体验:必须看着手机,用户操作会打断流程。
    风控:易被检测,开启状态可被判定为“外挂”。

  • 豆包 Agent(Virtual Display)
    机制:后台虚拟屏并发。
    体验:真正“无感”,主屏与平行屏互不干扰。
    风控:隐形注入,通过 INJECT_EVENTS 直达输入子系统,绕过应用层检测。

隐形的手:输入注入机制

Agent 申请高权限 INJECT_EVENTS,拿到通往系统底层的“万能钥匙”。事件链路如下:

graph LR
    Finger[真实手指] -->|物理触摸| Driver[触摸屏驱动]
    Driver --> Input[系统输入中心 InputManager]
    
    Agent[Agent 进程] -->|INJECT_EVENTS 指令| Input
    
    Input -->|统一分发| App[目标 App]
    
    style Agent fill:#ffefef,stroke:#d03030,stroke-width:2px
    style Input fill:#ddf4ff,stroke:#0969da,stroke-width:2px

原理总结:Agent 绕过物理屏幕,直接在系统的输入中心插队。对于目标 App 来说,从 InputManager 收到的点击信号无论来源,数据格式一致,因此可绕过多数应用层风控。

案例还原:美团自动记账

结合日志与 Mermaid 时序图,复盘一次“美团自动记账”的端云协同过程。

sequenceDiagram
    autonumber
    participant User as 用户
    participant Agent as Agent - 本地
    participant Cloud as VLM - 云端
    participant App as 目标App

    User->>Agent: 语音指令: "去美团统计消费"
    
    loop 自动化循环 (Until Stop)
        Agent->>App: 1. 捕获画面 & 压缩
        Agent->>Cloud: 2. 上传截图 (240KB)
        
        Note right of Cloud: VLM 分析画面内容...
        
        alt 场景1: 还在桌面
            Cloud-->>Agent: 指令: open_app("美团")
            Agent->>App: 启动应用
        else 场景2: 看到首页
            Cloud-->>Agent: 指令: click("我的订单")
            Agent->>App: 注入点击
        else 场景3: 看到订单页
            Cloud-->>Agent: 指令: swipe(下滑)
            Agent->>App: 注入滑动
        else 场景4: 提取消费金额
            Cloud-->>Agent: 指令: take_notes("消费800元")
            Agent->>Agent: 写入系统笔记
        end
        
        Agent->>App: 3. 等待渲染 (Wait)
    end
    
    Cloud-->>Agent: 指令: {"type": "stop"}
    Agent->>User: 语音反馈: "本月消费 800 元"

技术演进与未来展望

虽然 Agent 实现了跨应用操作,但目前方案仍处于“初级阶段”,正面临与 App 风控体系的激烈对抗。

拦截背后的逻辑:这不仅是安全风控,更是生态博弈。Agent 的高效操作将 App 降维成“后台数据库”,用户不再需要浏览开屏广告与推荐流,直接触动互联网经济的核心——用户注意力,因此面临应用层强力围剿。

手机厂商破局

手机厂商拥有平台签名优势。只有系统级签名,才能合法获取 INJECT_EVENTSREAD_FRAME_BUFFER 等红线权限,这是第三方应用无法逾越的技术壁垒。

大势不可阻挡:AI Native OS 必然是下一代手机形态。操作系统正在从“管理 App”进化为“替用户操作 App”,交互范式将根本性变革。

未来方向

  • 实时性突破:当前“截图轮询”模式(3-5 秒延迟)导致响应迟钝。需依赖端侧大模型的算力突破,将视觉识别本地化,实现人眼级实时响应。
  • 标准化接口:与其用图像识别去破解界面,不如让 App 主动开放接口。App 将从“卖应用”转向“卖服务”,通过标准接口(如 Android Slices)向 OS 提供服务,实现更稳定、低耗的互联。

参考来源