ZorvAI:安卓端本地优先 AI Agent 的架构解析与实践指南
一、核心概念澄清:什么是"本地"?
在展开讲它能做什么之前,必须先厘清一个最容易被误读的词——“本地”。ZorvAI 在多处强调自己是"安卓端本地优先的 AI Agent",但这个"本地"指的不是在手机上跑一个 7B、14B 参数大模型做端侧推理,而是指三件事:
- Agent 的控制逻辑在本地
- 工具的调度和执行在本地
- 数据流转在本地闭环
至于大模型本身在哪里推理,取决于你接入的是云端 API 还是本地模型服务——这两者是正交的,互不绑定。
1.1 "本地 Agent"的三种含义对比
| 维度 | 传统云端 Agent(GPTs / Dify / Coze 等) | ZorvAI 的"本地"含义 |
|---|---|---|
| 模型推理在哪 | 云端服务器 | 可以是云端 API,也可以是本地模型,架构上不限制 |
| 工具调用方式 | 通过公网 HTTP 请求调用远程 API | 通过 Android Binder IPC 调用同设备 App |
| 控制逻辑在哪 | 云端 Agent 服务 | 运行在手机本地的 ZorvAI 应用进程内 |
| 数据是否出设备 | 用户输入和工具响应都经过公网 | 模型若用云端 API 则提示词会上行;工具执行结果和 App 间调用完全在设备内 |
| 能否操作本机 App | 不能,除非 App 主动暴露公网接口 | 能,通过 ACI 框架调用任意实现了该协议的本机 App |
所以正确的理解是:ZorvAI 是一个住在你手机里的 Agent 控制端——它借用大模型的"脑子",但"手脚和眼睛"全在你这台设备上。模型本身是不是端侧跑的,不影响这套架构的定位。
- 接云端 API:提示词会上公网,但工具执行仍在本地
- 接本地模型:跑在 Termux 里的本地模型,实现完全离线的 Agent
ACI 开发者手册里把这件事定义得非常明确:“让手机上的任意 App 能力成为 AI Agent 可编排的工具,无需公网、无需云端中转”。这里的"无需公网"修饰的是工具调用这一段,不是模型推理这一段。
二、项目概览
- 项目地址:github.com/Quor-a/ZorvAI
- 技术栈:Kotlin + Jetpack Compose
- 开源协议:Apache-2.0
- 核心创新:ACI(Agent Capability Interface)框架——让手机上任意 App 的能力,都能被 AI 智能体发现、理解并编排调用
三、用户侧功能全景
ZorvAI 在用户侧提供的是一套现代 AI Agent 应具备的完整基础能力:
3.1 核心功能模块
-
多模型对话
- 可接入多种 LLM,灵活切换模型提供商
- 模型接入口是开放的,不绑死某一家服务商
-
人格系统
- 支持人格卡和角色设定
- 可设定特定的说话风格、知识倾向和行为边界
-
记忆能力
- 具备记忆能力,让 Agent 能沉淀历史、形成长期上下文
-
语音全双工 TTS/STT
- 支持语音合成与识别
- 本地集成 sherpa-onnx-whisper-tiny 模型(约 85MB onnx 文件),离线也能做语音识别
- TTS 由单例 QuroTtsHolder 管理,支持多服务商接入
-
定时任务
- 支持调度周期性或定点触发的任务
-
多渠道接入
- 支持飞书、QQ、微信等平台接入
- Agent 的核心能力可以通过这些渠道对外提供服务
-
可扩展工具链
- 通过 ACI 框架,理论上可以把手机上任意 App 的能力变成 AI 可编排的工具
四、技术架构:四层分层设计
ZorvAI 的整体架构分为四层,从底向上依次是:
+-------------------------------------------+
| 用户层:多模型对话 / 人格 / 记忆 / 语音 |
+-------------------------------------------+
| 能力层:ACI 框架(Agent <-> App 编排) |
+-------------------------------------------+
| 运行时层:CMS v2 模块(QuroCmsRepository)|
+-------------------------------------------+
| 引擎层:NODE / PYTHON / SSH / |
| JAVA / RUST / GO 环境供给 |
+-------------------------------------------+
4.1 各层详解
引擎层:底层"运行时骨架"
- 负责把 NODE / PYTHON / SSH / JAVA / RUST / GO 这些环境供给到设备上
- 这是能力运行的基础设施——没有这一层,Agent 只能跑 Kotlin/Java 代码,扩展能力严重受限
- 有了它,开发者可以用熟悉的语言写脚本模块,Agent 能直接调用
CMS v2 模块层(Capability Module System)
- 用户自建的、可复用的上层能力单元,运行在引擎提供的运行时之上
- 每个模块通过
serializeModule/parseModule进行导入导出,相当于插件包 - 示例:写一个"监控某个 API 并返回结果"的 Python 脚本,打包成 CMS 模块,Agent 就能在任务中调用
能力层:ACI 框架
- 负责把大模型的自然语言意图翻译成对具体 App 能力的调用指令
- 这是整个项目最核心的创新点
用户层:统一入口
- 包含对话界面、人格管理、记忆存储、语音交互等前端功能
- Web 渲染方面,内置了 GeckoView 浏览器引擎(MPL-2.0)作为系统 WebView 的替代,用于渲染网页与 HTML 预览
五、ACI 框架:整个项目的灵魂
ACI(Agent Capability Interface,智能体能力接口)是一套同设备、无 Root、基于 AIDL Binder 的本地跨应用调用框架。任何 Android App 只要引入 aci-core 库,就能把自己暴露成"可被 AI 调用的能力",由 ZorvAI 的 LLM 自动编排调用顺序和参数。
5.1 两端角色与关键类
| 角色 | 职责 | 关键类 |
|---|---|---|
| 控制端(ZorvAI) | 扫描、绑定、取能力清单、发起调用、把结果喂给 LLM | QuroAciManager + aci-core 的 IACIService 桩 |
| 受控端(你的 App) | 继承 BaseACIService,声明能力,实现处理逻辑 | BaseACIService / Capability / ACIRequest / ACIResponse |
Binder 契约定义跨进程方法:
5.2 一次完整调用的时序
说明:
- 针对 ColorOS / Android 11+ 的 stopped-state,控制端会先发
ACTION_WAKE广播唤醒受控端进程再绑定 - LLM 拿到能力清单后,由模型自主决策"调哪个能力、传什么参数",从而实现多 App 协同的自动化任务编排
5.3 五层鉴权模型
AI 能调用 App 这件事本身存在安全风险,ACI 在五个层面上做了纵深防御:
- Android Manifest 权限
- Binder UID 校验
onCheckPermission()业务级白名单- 网页链接 中配置的策略规则
- 能力级别的细粒度权限声明
任何一层拒绝都会中断调用,避免"AI 乱调、越权调"的风险。
5.4 BaseACIService 的方法契约
受控端继承 BaseACIService 后,有以下方法可重写:
| 方法 | 是否必重写 | 说明 |
|---|---|---|
onCreateCapabilities(): List<Capability> | 必须 | 注册你的能力清单 |
onCall(request: ACIRequest): ACIResponse | 必须 | 同步处理单次调用 |
onCallAsync(request, callback) | 可选 | 异步处理;默认实现会切线程后调 onCall |
onCheckPermission(request, callerPkg): Boolean | 可选 | 自定义调用方校验,默认返回 true |
onBeforeCall / onAfterCall | 可选 | 钩子,默认仅打日志 |
重要提醒:
Capability.create(String id, String description)的第二个参数是给 LLM 的自然语言描述,不是版本号- 方法内部固定
version = "1.0" - 如果误把
"1.0"当description传入,LLM 就看不到能力的实际说明,会导致 Agent 无法正确理解该能力
六、工具链实战:以 ZorvAI 浏览器为例
ZorvAI 浏览器是官方的 ACI 受控端参考实现,也是目前能力最完整的示例。它基于 GeckoView 内核,不只是个网页容器,更是 Agent 的一个"眼睛和手"。
6.1 能力概览
浏览器受控端向控制端暴露了 30 项能力,覆盖基础操作、Agentic 行为、资源共享、完整方案执行、虚拟鼠标等类别。2026-08-01 的全量测试报告显示 28/30 通过。
6.2 核心能力详解
| 能力 ID | 说明 | 关键入参 |
|---|---|---|
browser_open | 打开网址 | url(必填) |
browser_read | 读取页面 HTML | clean 模式返回精简 DOM(v1.0.8 修复 Binder 1MB 传输限制导致的崩溃) |
browser_crawl | 抓取结构化正文 + 链接 | 返回正文 + 出站链接 |
browser_search | 调用搜索引擎 | query(必填)/ engine(可选:bing/google/baidu/ddg,默认 bing) |
browser_script | 注入 JavaScript | code(必填) |
http_request | 发送原生 HTTP 请求(v1.0.14 新增) | url / method / headers / body |
6.3 http_request 能力详解
http_request 能力特别值得说一下:它让 AI 可以经 ACI 让受控浏览器代为发起任意 HTTP 请求,重点是"本地组网(相同网络下)"——可以直接访问同网段设备的明文 HTTP 服务,无需因公网明文限制而却步。
这意味着 Agent 可以调用:
- Web API / 私有接口
- 抓取网页
- 对接第三方服务
- 直接访问路由器后台、NAS、智能家居(HomeAssistant 等)、IoT 设备、树莓派等局域网 HTTP 服务(
http://192.168.x.x、http://10.x、*.localmDNS)
支持 GET/POST/PUT/DELETE/PATCH/HEAD 及任意自定义方法,支持自定义请求头与请求体。
6.4 典型使用场景
场景:“使用 ACI 浏览器获取一个小说然后使用多音色路由和情绪标签读出来”
Agent 执行流程:
- 调用
browser_search找到小说 - 用
browser_open打开链接 - 调用
browser_crawl抓取正文内容 - 将正文文本交给 TTS 引擎,结合多音色路由进行沉浸式朗读
多音色路由:
- 通过 Markdown 表格定义角色映射
- 正文中用
(角色, 情绪)标注 - TTS 引擎会根据这些标记自动切换对应的音色和语调
七、开发者接入:5 步让你的 App 被 AI 调度
aci-core 是纯本地库,仅依赖 androidx.annotation:annotation:1.7.1,以 AAR 形式分发。
7.1 获取 aci-core
方式 A:从 ZorvAI Releases 的 v1.0.6+ 直接下载 aci-core-release.aar,放入你模块的 libs/ 目录
方式 B:开源独立分支 aci-core,git checkout aci-core 即可拿到一个可独立 ./gradlew assembleRelease 的 Android 库工程,可自行构建或改源码
7.2 受控端 5 步接入
详见 docs/ACI_DEVELOPER_GUIDE.md:
- 引入 aci-core:把 AAR 放进
libs/并在 网页链接 声明依赖 - 声明权限:在 网页链接 中定义能力的 5 层鉴权模型
- 继承 BaseACIService:实现
onCreateCapabilities()声明能力清单 - 处理调用:在
onCall()中实现具体业务逻辑,返回ACIResponse;在onCheckPermission()中做权限校验 - 注册与暴露:在 Manifest 中注册 Service,等待控制端
discover()发现并绑定
7.3 最小化接入代码示例
class MyAciService : BaseACIService() {
override fun onCreateCapabilities(): List<Capability> {
return listOf(
Capability.create("browser_open", "打开浏览器到指定网址")
)
}
override fun onCall(request: ACIRequest): ACIResponse {
return when (request.capability) {
"browser_open" -> handleOpen(request)
else -> ACIResponse.error(
ACIError.CAPABILITY_NOT_FOUND,
"unknown capability"
)
}
}
override fun onCheckPermission(
request: ACIRequest,
callerPkg: String
): Boolean {
return callerPkg == "com.ai.assistance.quro" ||
callerPkg == packageName
}
}
八、项目现状与边界
8.1 基本信息
- 项目地址:https://github.com/Quor-a/ZorvAI(双平台托管:GitHub + Gitee)
- 开源协议:Apache-2.0
- 技术栈:Kotlin + Jetpack Compose
- 当前状态:活跃迭代中,很多能力还在持续扩展
8.2 核心价值
这个项目真正有价值的地方不在于它今天已经能做多少炫酷的演示,而在于它提出了一套清晰的协议:App 开发者只需要花几十分钟改造,就能让自己的应用变成一个可以被 AI 理解和调用的工具。
ACI 的设计思路——让每个能力自描述、让控制端动态发现并编排——在任何 Agent 系统中都有参考价值。
8.3 需要认清的边界
边界一:“本地"不等于"端侧模型”
- 如果你的场景要求完全离线(包括模型推理),你需要自己接入一个端侧模型服务
- ZorvAI 的架构支持这一点,但这不是它默认提供的
边界二:它是安卓端 Agent,不是服务端 Agent
- ZorvAI 解决的是"手机端 Agent 如何操作本机 App"的问题
- 如果你要做的是服务端 Agent 调度远程 API,这套架构不能直接套用——但它的设计范式值得借鉴
九、展望
如果未来有足够多的 App 遵循这套 ACI 标准,安卓手机的使用方式会从"人手动操作每个 App"逐步过渡到"人下达意图,Agent 协调多个 App 完成"。这或许是 ZorvAI 这类项目最大的长远意义。
更多推荐



所有评论(0)