JOTO
Contact us
← AI 智库
AI 硬件

端侧 AI Agent:Google 如何实现,我们如何落地

2026 年 10 月 1 日

本文解析 Google 端侧 AI Agent(如 Gemini 在 Galaxy S26 上调用三星相册)的技术实现路径,聚焦 AppFunctions 的能力声明、发现与调用机制;系统梳理四类核心工程问题:应用能力访问、权限落地、多指令编排、端云协同执行;指出 Google 模式存在生态激励不对等的现实瓶颈,并提出面向自定义 OS 的分阶段落地框架,强调 Framework 标准可借鉴,但入口与生态关系不可复制。

上一篇解决的是模型如何进入设备:量化压缩、算子适配和推理加速,让模型在内存、功耗与时延约束下稳定运行。但模型跑起来,只代表设备具备了理解能力;要让用户的一句话真正改变应用状态,还需要一套从意图到执行的 Agent 系统。

先看 Google 已公开的体验:在 Galaxy S26 上,用户让 Gemini“显示三星相册里我家猫的照片”,Gemini 选择三星相册开放的 AppFunction,在设备本地完成检索并返回结果。Google 还提到这些照片可用于后续会话,例如发送给朋友,但没有公开其中的跨应用编排实现。[2]

Gemini 调用三星相册查找照片
Gemini 调用三星相册查找照片

这个案例证明,应用能力可以被 Agent 发现并调用。但真实任务通常跨越多个应用,例如:

“把今天拍的白板照片发到项目群,再约一个明早十点的复盘会。”

一句话背后包含照片检索、内容授权、群聊匹配、图片发送、时间解析和日程创建。要完成它,需要回答四个问题:

  • 01 Agent 怎样发现并访问其他应用的能力?
  • 02 谁可以调用这些能力,权限和用户确认放在哪里?
  • 03 多个动作如何拆解、排序,并把上一步结果交给下一步?
  • 04 端侧模型能力有限时,怎样兼顾速度、成功率与隐私?

Google 模式还有一个现实问题:平台掌握 Gemini 入口和调用准入,应用承担改造、安全与维护成本,双方并不对等。收益不明确时,应用缺少接入意愿,AppFunctions 难以形成完整生态;受限的 UI Automation 也补不齐这一缺口。

因此,我们应借鉴它的 Framework 标准,而不是复制 Gemini 的产品入口和生态关系。下面先看 Google 如何实现,再回答四个工程问题,最后落到我们的实现。

Google 是如何实现的

从公开资料能够确认的链路是:Gemini 接收用户请求,选择三星相册提供的 AppFunction,函数在设备本地执行,再把结果返回 Gemini。Google 没有公开这一体验内部使用的模型位置和 Agent Runtime。

将 Google 已公开的相关能力放在一起,可以抽象出四个角色:模型层负责理解与生成,Agent Runtime 负责规划,AppFunctions 提供结构化应用能力;对部分精选应用,UI Automation 在特定设备和类别中提供受控兼容路径。这些角色并不要求固定串行经过四层。

角色 Google 公开的组件与定位
模型能力 Gemini Nano + AICore / ML Kit GenAI:开发者可用的端侧理解与生成能力
Agent Runtime Gemini 是产品侧 Agent;ADK for Android 是开发者构建 Agent 的可选框架
结构化能力 AppFunctions:让应用函数可发现、可传参、可返回结果
兼容路径 Gemini UI Automation 预览:在特定设备和类别中操作部分精选应用

这四个角色是工程归纳,不是 Google 发布的固定产品架构。公开案例只确认相册函数在设备本地执行,并未说明意图理解与规划是否由 Gemini Nano 完成,也未表明 Gemini 的内部 Runtime 使用 ADK。

AppFunctions 的能力发现与调用原理
AppFunctions 的能力发现与调用原理

AppFunctions 的机制可以概括为:应用向 Android 注册函数及元数据,Agent 查询能力说明、选择函数并发起结构化调用。它解决“有什么能力、参数是什么、怎样调用”;多步骤规划、业务授权、敏感操作确认和失败恢复仍由 Agent Runtime 与 Provider 负责。

版本边界:本文资料截至 2026 年 9 月 5 日。AppFunctions 支持 Android 16 及以上设备,但 Jetpack API 与 Gemini 端到端集成仍处于实验或受限预览阶段,代码版本应以 AndroidX 发布页为准。[3][8]

问题一:Agent 如何访问其他应用

传统 Android 跨应用协作主要依赖 Intent、Deep Link、ContentProvider、Binder/AIDL 和系统 API。它们解决了进程间调用,却通常缺少专门面向 Agent 的语义描述:模型不知道设备上有哪些能力,也不知道接口参数、约束和返回值。AppFunctions 在这几条路径上增加了“可发现的语义层”。

2.1 应用声明能力

应用首先要把普通业务函数描述成 Agent 可发现、可理解的能力。AppFunction 负责声明函数,结构化 Schema 描述输入输出,KDoc 则帮助 Agent 选择工具和填写参数。

以“创建日程”为例,Provider 只开放标题和开始时间,并返回明确的创建结果:

kotlin 代码示例
kotlin 代码示例

KSP 在编译阶段生成函数 Schema 和 Service。应用在 Manifest 中注册生成的服务,并以 BIND_APP_FUNCTION_SERVICE 限制绑定;数据库和文件操作则切换到后台 Dispatcher。

2.2 系统建立能力注册表

Android 安装应用时读取生成的 Schema,将函数名、包名、参数、返回值和描述写入系统索引。Agent 不需要扫描 APK 或猜测 Deep Link:元数据发现使用 searchAppFunctions(),运行状态使用 getAppFunctionStates()。两者分开查询,执行时仍要防御状态变化。

2.3 Agent 结构化调用

Agent 把自然语言转换为结构化调用。例如:选择 createEvent,定位目标包,填入标题和开始时间。执行前再按 Schema 校验类型、范围和必填字段。

结构化 Tool 不依赖按钮位置,结果也能继续参与规划。UI Automation 可兼容尚未接入的存量应用,但目前只在特定设备和精选类别中预览,并非普通开发者可直接集成的通用 SDK。[2]

对于自定义 Agent,还需用 Adapter 将 AppFunctions 元数据转换为统一 Tool Schema,并把模型参数编码为真实请求。第 7 节给出实现。

问题二:权限如何落到代码

“模型说可以”不构成授权。一次跨应用执行需要经过四道门。

第一道是调用者门禁。 Agent 在 Manifest 声明 EXECUTE_APP_FUNCTIONS,但跨包发现和执行还必须通过 Android 的运行时 allowlist 或调用者认证;普通应用只声明权限,并不能自动获得完整调用能力。

第二道是服务门禁。 Provider Service 由 signature 级的 BIND_APP_FUNCTION_SERVICE 保护,只允许系统绑定,应用不能再额外暴露一个无保护入口。

第三道是数据门禁。 函数一次只返回任务所需的最小字段与最小条数;URI 单独授予只读权限,并由所有者负责回收。

第四道是行为门禁。 发送、购买、删除、外部分享等副作用不能由模型自行批准,必须在代码层设置用户确认。

权限判断必须落在代码层,而不是模型输出中。发消息、共享照片、购买和删除等外部副作用都要经过明确确认;照片等敏感数据只返回最小结果和只读 URI,任务结束后主动回收授权。[9]

权限设计可以落成一张风险表:

风险与示例 默认策略
只读低风险:查询设备音量、列出公开日程标题 可直接执行,记录审计日志
只读敏感:读取照片、联系人、会议内容 依赖系统授权,只返回最小结果
可撤销写操作:调节音量、创建草稿、创建日程 执行后显示结果,提供撤销入口
外部副作用:发消息、共享文件、购买 执行前展示对象与内容,等待确认
高风险破坏:删除数据、关机、恢复出厂 强确认或禁止 Agent 调用

问题三:一句话里的多个指令怎样编排

AppFunctions 只提供工具,不负责把复杂目标拆成流程。多指令编排发生在 Agent Runtime。

以开头的指令为例,规划结果是一张有依赖关系的图:

一句话任务的多指令依赖图
一句话任务的多指令依赖图

规划器要处理五类关系:

  • 01 数据依赖:sendImages 需要 searchPhotos 返回的 URI。
  • 02 身份消歧:存在多个“项目群”时,必须让用户选择,不能由模型猜一个。
  • 03 顺序约束:联系人或群聊 ID 要先查询,再执行发送。
  • 04 副作用确认:检索可以直接做,发送要停在确认门前。
  • 05 失败策略:消息发送成功、日程创建失败时,保留已完成结果;只有目标 Tool 具备幂等保证,或能确认尚未产生副作用时,才单独重试失败步骤。

前置函数、参数约束和可恢复错误写入 Tool 描述,提高规划命中率;最终顺序仍由代码校验。

生产系统不宜让模型每次都自由生成任意计划。更稳妥的做法是让模型输出受约束的 Plan,再经过确定性验证器:

kotlin 代码示例
kotlin 代码示例

PolicyRegistry 根据 Tool、参数、数据类型和目标对象重新计算风险,不采信模型自报的等级。模型负责提出计划,确定性验证器负责拒绝越界计划。

问题四:端侧模型能力有限,任务在哪里执行

端侧 Agent 不等于所有推理都必须留在端上。真正需要端侧化的是敏感上下文、低时延决策和设备能力执行;复杂开放域规划是否上云,应由任务风险、模型能力和网络状态共同决定。

固定设备指令,例如“音量调到 30%”,直接走规则 FastPath;步骤固定、只需抽取参数的任务,交给端侧模型;长上下文和开放域规划可以进入云端根 Agent,但照片、联系人等敏感数据仍由本地子任务处理。三条路径最终使用同一份 Tool Schema、权限策略和审计记录。[4][5]

规则可确定: FastPath 直接进入 Tool。

本地可处理: 端侧模型生成受约束 Plan,再进入 Tool。

任务复杂: 云端根 Agent 负责开放域规划,本地子任务保留敏感数据并执行 Tool。

这种分级先判断数据能否离端,再判断端侧模型是否具备足够的规划能力,“能否联网”只是其中一个条件。所有路径共用同一套确定性权限门禁。

Google 模式的问题:不对等的生态为何难以复制

Google 模式用结构化函数替代页面操作,技术路径清晰,但生态机制并不完整。

激励不对等。 Google / OEM 掌握 Gemini 入口、调用准入和用户触点;应用承担改造、安全、兼容和维护成本。如果流量归因、用户关系和商业回报不清晰,接入动力就会不足。

生态有冷启动。 接入应用少,Agent 能完成的任务就少;用户价值不足,又进一步削弱应用意愿。UI Automation 依赖界面结构,只能临时补位,不能替代稳定接口。

底座能力不完整。 AppFunctions 面向新版 Android,Session、Memory、策略、恢复、评测和跨设备协作仍需自建;存量设备和其他系统环境也需要新的适配器。

阶段结论: Google 的思路更适合作为 AIOS Framework 的建设标准:用 AppFunctions 定义应用能力契约,由系统 Runtime 统一发现、权限和调用。但在生态协作上,Gemini 掌握入口与准入,应用承担接入成本,双方明显不对等。

因此,自定义 OS 可以分阶段建设:第一阶段借鉴这套标准,完成端内能力框架;第二阶段通过 A2A 连接不同终端、应用 Agent 与外部算力,完成跨端、跨应用协作。

Gemini 是 Google 的,我们的 Agent 如何实现

面向自定义 OS,我们的范围比 Android 手机助手更广:需要建设一套覆盖多种设备形态和系统环境的通用 OS Agent。目标能力包括模型替换、用户授权范围内的持续环境感知,以及行业 Tool 和 Memory 的热插拔。这里描述的是目标态,不代表所有模块已经完成。

目标架构可以归纳为四组能力:

  • 感知与推理: Context & Session 对授权数据做最小化采集,Model Router 在规则、端侧模型、企业算力和云端模型之间路由。
  • 规划与控制: Planner 生成受约束 Plan,Capability Registry 提供自定义 OS 内部统一 ToolSpec,Policy Gate 做确定性裁决。
  • 执行与恢复: Executor 调用 Adapter,State Store 负责 Checkpoint、幂等、重试、补偿和审计。
  • 记忆与协作: Memory Service 管理行业知识、用户记忆和生命周期;A2A Gateway 负责独立 Agent 的发现、任务委派与结果交换。
我们的 OS Agent 实现架构
我们的 OS Agent 实现架构

Adapter 将 AppFunctions、MCP、CLI 和 Device API 统一为 ToolSpec,Planner 不直接依赖原始协议。CLI 只允许固定命令和参数 Schema,Device API 负责鉴权与版本适配。

MCP 连接 Agent 与工具服务;A2A 连接独立 Agent,负责能力发现、任务委派和结果交换。身份认证、超时、取消、幂等和远端确认统一由 Runtime 管理。

7.1 AppFunctions Adapter 怎样落到代码

以 Android 为例,Adapter 先把 AppFunctions 元数据转换为 ToolSpec;执行时再把参数编码为 AppFunctionData,构造真实请求:

kotlin 代码示例
kotlin 代码示例

AppFunctionCatalog、SchemaMapper 和 ArgumentsEncoder 是自定义封装;Tool ID 使用“包名/函数标识”,避免同名冲突。

一次任务的实际路径是:Context 形成任务输入,Model Router 选择模型,Planner 结合 Registry 与 Memory 生成 Plan,Policy Gate 完成裁决,Executor 调用对应 Adapter,最后由 State Store 保存结果。

自定义 Agent:一句话如何驱动三个应用

下面通过一个 Android 单机 Demo,验证自定义 Agent 的最小执行闭环:发现三个应用开放的 AppFunctions,将一句话拆解为有依赖关系的步骤,并完成跨应用的数据传递与顺序执行。

找到今天拍摄的白板照片,发送到“端侧 AI 项目群”,并创建明天上午 10 点的复盘日程。

为了展示跨应用协作,Demo 包含一个自定义 Runtime 和三个 Provider:

GalleryProvider:searchPhotos 查找白板照片,releasePhotoAccess 回收原始 URI 授权。

ChatProvider:searchConversations 找到目标群,sendImages 执行图片发送。

CalendarProvider:createEvent 创建复盘日程。

自定义 Agent Runtime: 负责规划、确认和执行,通过自研 Tool Adapter 接入 AppFunctions,并获得平台调用准入。

8.1 Provider 定义

GalleryProvider 使用预置标签的测试数据,CalendarProvider 写入测试仓库。接入系统媒体或日历时,Provider 仍要申请对应的数据权限;AppFunctions 的跨包调用权限不会代替业务授权。示例基于 appfunctions:1.0.0-alpha11,复制代码前应核对最新版本。[8][9]

相册侧函数保持只读,并限制最大返回数量:

kotlin 代码示例
kotlin 代码示例

GalleryProvider 同时提供 releasePhotoAccess。grantId 必须随机、短期、一次性,只能回收本次登记的 URI。

关键边界是:相册授予 Agent 的读取权不会自动传给 ChatProvider。Agent 需要复制到自己的临时缓存,再显式授予 ChatProvider 只读权限;完成后立即撤销并清理。

kotlin 代码示例
kotlin 代码示例

stageWithCleanup 负责异常时清理部分缓存。发送前,ChatProvider 根据真实接收方和图片摘要签发一次性确认 Token;Token 与会话、内容摘要和有效期绑定,不能由模型生成。Tool 描述还要声明“先搜索群 ID、歧义时由用户选择”,但 Provider 仍需再次校验。

8.2 从 Plan 到执行

Provider 能被调用之后,还需要一个确定性执行循环,把模型给出的 Plan 变成按依赖执行的 Tool Call:

kotlin 代码示例
kotlin 代码示例

8.3 观察执行轨迹

Demo 把每一步打印成 Trace:

text 代码示例
text 代码示例

Trace 记录工具选择、参数来源、确认节点和执行结果,是定位失败与恢复任务的主要证据。

8.4 验证方式

Provider 安装后,先验证系统注册表,再绕过自然语言直接验证单个函数的 Schema 和业务实现:

bash 代码示例
bash 代码示例

单函数通过后,再用 Google Testing Agent 验证发现与调用,并单独测试我们的 Adapter、规划器和权限策略。[10] Testing Agent 可能使用云端模型,不能据此证明 Gemini Nano 完成了端侧规划。当前 Demo 验证的是 Provider、单函数与编排链路,不代表普通三方应用已获得生产级跨应用调用资格。

从 Demo 到产品:建立四项工程门禁

AppFunctions 定义能力如何被发现和调用,生产可靠性仍由 Agent Runtime 负责。Demo 进入产品前,至少需要建立四项工程门禁:

执行预算: 为步骤数、总时长、重规划次数和副作用调用设置上限;锁定 Tool Schema 与策略版本,版本变化时终止当前计划并重新规划。

状态恢复: 为每次 Tool Call 记录任务 ID、步骤 ID、输入摘要、执行状态、结果和错误码;通过 Checkpoint 从安全位置继续,只重试无副作用或具备幂等保证的步骤。

幂等补偿: 写操作携带 idempotencyKey;可撤销动作提供补偿 Tool,不可撤销动作提升确认等级并禁止自动重试。

评测观测: 建立固定回归任务集,持续统计 Tool 选择准确率、参数有效率、任务完成率、越权拦截率、重复副作用、端到端耗时和恢复成功率。

端侧 Agent 建设的落点

Google 的价值在于给出 AIOS Framework 的建设标准:应用能力如何声明,系统如何发现、授权和调用;它的局限则是不对等的生态协作模式。

因此自定义 OS 的路线可以分为两阶段。先完成模型路由、Session、能力目录、Tool Adapter、权限门禁、执行状态与 Memory,建立端内 Framework;再通过 A2A 连接不同终端和应用 Agent,实现跨端、跨应用的任务协作。我们借鉴的是 Framework 标准,而不是依赖 Gemini 的产品入口。

参考资料

  • 01 Android AppFunctions 概览
  • 02 Android:The Intelligent OS
  • 03 在应用中接入 AppFunctions
  • 04 ADK for Android
  • 05 Gemini Nano 与 AICore
  • 06 AppFunction KDoc 优化指南
  • 07 Google AppFunctions Jetpacker 示例
  • 08 AndroidX AppFunctions 版本说明
  • 09 AppFunctionUriGrant API
  • 10 Google AppFunctions Testing Agent

JOTO 企业落地观察

  • 端侧 Agent 的落地成败高度依赖应用能力的标准化暴露。AppFunctions 提供了一种契约式能力声明机制,对企业部署而言,这意味着必须推动业务系统提供符合 Schema 的函数接口,而非仅支持 UI 自动化或私有 API。缺乏统一契约将导致 Agent Runtime 难以规模化接入异构系统,增加定制化 Adapter 开发成本。
  • 多指令编排中的‘身份消歧’和‘顺序约束’要求 Agent Runtime 具备确定性校验能力,而非完全依赖模型生成。这对企业智能体工程意味着:生产环境必须引入 Plan 验证器与 Policy Registry,将权限、数据流向和副作用确认等逻辑固化为可审计的代码门禁,避免将安全与一致性责任交由不可控的模型输出。
  • 端云协同执行策略揭示了一个关键取舍:敏感数据必须本地处理,但开放域规划可上云。这对 RAG 知识工程提出新要求——企业需构建双模态知识管道:端侧缓存脱敏后的结构化实体(如联系人摘要、日程片段),云端处理需上下文关联的复杂推理,二者通过统一 Tool Schema 与审计日志对齐,确保数据主权不因计算迁移而旁落。
  • Google 模式暴露的生态激励失衡,对企业 AI 安全治理具有警示意义:当平台方掌控调用准入与用户触点,而应用方承担全部安全与维护成本时,合规性将难以横向拉通。企业需在自建 Agent 框架中,将权限策略、审计溯源与失败恢复机制作为基础设施强制嵌入,而非依赖下游应用自主实现。

立即咨询 JOTO

JOTO 提供覆盖企业智能体规划与搭建、AI 平台私有化部署、RAG 知识工程、AI 安全治理、FDE 驻场共创及持续运营优化的全周期 AI 落地服务,帮助企业把验证中的 AI 能力转化为安全、可控、可持续迭代的生产力。 联系 JOTO 获取 AI 落地咨询

想把这些做法用到你的业务里?

留下你的场景和痛点,我们帮你判断从哪一步开始。

联系我们
Contact Us

Start your enterprise AI rollout

Tell us your industry, team, and current pain points. We'll get back to you within one business day to help you decide what to tackle first, what data to prepare, and which platform fits.

WeChat
Scan to add us for a 1:1 chat
JOTO WeChat consultation QR code

Tell us what you need

Once we receive your details, we'll be in touch within one business day.