大家好,我是 Aries AI 的开发者。
几个月前,我们发布了第一代端侧智能助手,凭借“AutoGLM 云端大脑 + 老手机本地运行”的演示,在开源社区很受欢迎。只需一句话:“帮我买张去北京的高铁票”,老旧的 Android 机就能像有了自主意识一样自动完成操作。
但是,随着我们对接的 AI 模型越来越强,传统的 Android 前端架构和自动化注入方式,已经探测到了天花板:
- 比如 DeepSeek 等大模型带有长达数千字的思考过程,如果前台 UI 频繁拼接刷新,极易引发重组风暴导致 UI 线程卡死。
- 以往依赖无障碍服务(AccessibilityService)的“明屏自动化”,只要 AI 一干活,手机屏幕就被各种模拟点击“霸占”,用户直接丧失控制权。
为了解决这两个端侧 AI Agent 的致命痛点,我们在 Aries AI v1.5.0 中进行了一场史无前例的底层重构。今天,我将结合真实的源码片段,毫无保留地公开我们的三大架构级设计!
前台重构一:拒绝正则!手搓字符级状态机
目前市面上大部分接入大模型流式接口的 App,处理思路都很粗暴:把网络流拼成一条长字符串,然后不停地用正则表达式去替换标签,最后全量扔给 UI。这就是导致手机发烫的最魁祸首。
在 Aries AI 中,我们彻底抛弃了正则方案,针对流处理链路自研了一个基于有限状态机(FSM)的解析器。
代码巧思解密:
我们设计了四级核心枚举来精确捕获网络增量(Delta):
// 核心状态
enum class ParseState {
IDLE, // 初始状态
IN_THINKING, // 思考中(如标签内部)
IN_THINKING_ANGLE, // 兼容异形标记
IN_ANSWER // 进入正式回答正文
}
当大模型的数据流到达 processContentDelta(delta) 时,解析器会按字符位扫描。一旦判断当前处于特定阶段,解析器就直接将这部分切片打包;一旦拦截到代表结束的标签,就丝滑切换到正文状态。
带来的体验飞跃: 由于状态在数据层就被严格剥离,当我们更新 UI 时,正文视图在思考期间绝对不会被迫刷新。这让画面上的“思考框”不仅伸展自如,还彻底告别了过早折叠乱码的解析 Bug。
前台重构二:极限压榨渲染生命线
解决了解析问题流,下一个拦路虎就是前端框架的性能诅咒。为了让聊天气泡和后台操作悬浮窗即使在古董机上也能跑满 60fps,我们成了死磕对象。
代码巧思解密:
为了防止“重组风暴”,我们自研了性能监控探针:
// 我们的性能抓手
@Composable
fun DebugRecomposeLogger(scope: String, logEvery: Int = 25) {
if (!BuildConfig.DEBUG) return
val counter = remember(scope) { RecomposeCounter() }
SideEffect {
// 利用 SideEffect 严格捕捉界面成功重组后的回调
counter.count += 1
if (counter.count == 1 || counter.count % logEvery == 0) {
Log.d("ComposePerf", "$scope recomposed ${counter.count} times")
}
}
}
有了这个探针进行排查,我们配合编译器指标进行了一次性能大扫除:我们将核心的数据体全部强制打上不可变标签,阻断了一切跨协程域的状态穿透。最终,AI 在高负荷推理对话时,长列表的单次视图刷新被死死地压制在 16ms 线以下!
绝对核心:提权打造后台“虚拟屏”无感自动化
(这是本版本最疯狂、最硬核的系统级 Hacks,也是真正迈向人机协同的一大步!)
只要你还在用传统的无障碍方案做外挂,手机干活时人就只能干看着。如果未来 AI Agent 是我们的助理,那必须是我聊我的微信,它在后台偷偷干它的活。
因此,我们在内部架构了虚拟显示调度中心。依托于跨进程提权技术,我们在 Java 层面强行反射了系统隐藏服务!
代码巧思解密:
下面这段代码是真正实现自动化降维打击的核心机密:
fun getDisplayManager(): Any {
val binder = getService("display")
// 利用提权代理,拿到隐藏的系统级显示接口
val stub = Class.forName("android.hardware.display.IDisplayManager\$Stub")
val asInterface = stub.getMethod("asInterface", IBinder::class.java)
return asInterface.invoke(null, binder)
}
// 同样的手法代理获取输入管理器(负责跨层注入事件)和任务管理器!
这意味着什么? 通过拿到这些超高权限的底层管理器,我们欺骗了手机系统,在后台虚空挂载了一块虚拟逻辑屏幕。接着,大模型的画面节点感知、坐标计算、以及注入点击和滑动事件——全部都在这块“虚拟屏幕”上自我派发执行。在你的物理主屏幕上,任何打扰都不会发生!它是真正意义上的双进程平行世界机制,完成了零焦点抢占的无感交互!
交互颠覆:全系机型“灵动岛”状态透出
如果是在后台运行,你怎么知道 AI 进行到哪一步了?传统的硕大悬浮球极其破坏原生界面的美学一致性。基于前后台任务的生命周期,我们定向攻克并适配了大量机型,独家引入了“灵动岛 / 胶囊”机制。
当接收指令开始“虚拟屏自动化”干活时:哪怕你切去了桌面,操作卡片也会犹如水滴一般,丝滑收缩进手机顶部的刘海/挖孔区域。它不会遮挡任何文字与操作视线,仅保留呼吸灯态。当你想确认进度时,轻轻点击一下顶部的岛,就会优雅展开实时的状态胶囊(如:“商品比价中...”或“检索时刻表完成”)。
结语:加入开源,进一步提升Aries AI的上限
为了更好地克服不同设备碎片化噩梦,我们在设置页里引进了用户体验改进计划,利用脱敏探针协助我们在云端收集框架崩溃点,持续捍卫代码稳定性。
从最开始验证端侧可行性的小工具,到现在拥有跨进程虚拟隔离栈 + 顶排微秒级前端优化 + 系统级胶囊反馈的现代化工程项目。让 AI 学会思考很容易,但在极度严苛的移动端操作系统环境内,让它兼顾速度、隐藏自己并具备原生般的美感,是一场工程魔法的结晶。
目前开源仓库代码正在全速迭代,如果你也对系统改造、前端极限优化或大模型落地有浓厚兴趣:
🚀 GitHub 开源地址: ZG0704666/Aries-AI: 安卓端强大的AI Agent,仅需简单配置API即可以体验AI自动化操控手机完成跨APP的复杂任务交互。实测部分场景速度较豆包手机提升35%以上https://github.com/ZG0704666/Aries-AI
非常期待各位极客开发者点击链接给我们点一个 Star ⭐️ 支持!有新的点子或遇到问题,我们在 Issue 和社区见!!