Android Compose版本的AI组件库来了。

把几份资料交给手机里的 AI,让它整理一份报告。它开始读文件、查资料,还把一部分工作交给另一个 AI 助手。可屏幕上只有"正在处理"和一个转圈的动画。

用户很难判断:它现在在做什么?哪些步骤已经完成?是需要补充信息,还是某一步卡住了?等它准备保存文件,又该怎样先查看内容、修改参数,再决定允许还是拒绝?

有些任务还需要用户选日期、填地址、确认偏好。如果 AI 只发来一串文字问题,用户就得在聊天里逐项回答;直接显示一张可填写的表单,操作会清楚得多。

当 AI 从回答问题走向使用工具、执行任务,应用界面也需要跟上:显示计划和进度,展开工具的输入与结果,在关键操作前等待确认,再把用户的选择交回 AI。聊天气泡之外,还有一整段需要接好的交互。

AI Elements for Kotlin 是面向 Android 的原生 AI 交互组件库。它把聊天、工具审批、任务过程、文件与媒体、生成式 UI 做成可以组合的组件,让这些能力接进已有应用。Compose 是 Android 的原生界面框架,组件的颜色、字体和样式也可以与应用保持一致。

Web 上有 AI Elements,Flutter 有 Flyer Chat,React Native 有 Gifted Chat 等界面方案。Kotlin / Compose 也已有聊天 UI SDK。这个项目补齐的是原生 Android 应用中的 Agent 交互组件:工具审批、子 Agent、任务过程和可操作的结果,可以配合现有的页面与 AI 服务使用,减少重复开发。

0.3.0 已发布到 Maven Central,使用 Apache 2.0 许可证。源码、双语文档和可安装的 Demo 已公开。下面从实际使用场景开始,介绍组件能力、协议支持、架构与接入方式。

哪些应用适合接入

如果你已经有 Kotlin / Compose 应用,想给它加入 AI 助理,这个库可以提供消息、内容和工具交互,保留自己的业务页面与后端。

研发或知识类助手可以组合代码、引用、PDF、文件、Terminal 和 diff;多步任务可以组合计划、子 Agent 与电脑面板,让执行过程有地方查看;需要用户选择和填写的任务,可以通过 A2UI 原生表单继续操作。

希望在设备上运行 Agent 的应用,还可以按需添加模型 API、文件、记忆、MCP、浏览器和调度能力。只需要某个组件时,不必同时采用完整的 Agent 运行时。

工具调用与审批

工具调用可能刚收到参数,也可能正在执行,或者已经失败。如果它还在等用户批准,就不能先显示成"完成"。这几种状态混在同一个聊天气泡里,用户很难判断下一步该不该操作。

库里的工具卡片会显示输入、运行状态、结果和来源。点开可以查看参数与返回值;来自 MCP 服务器的工具可以显示服务器名称。委派给子 Agent 的任务、加载技能和普通函数调用,也有各自的展示方式。

更重要的是,审批按钮需要真的连到执行流程。用户允许,工具才继续;用户拒绝,后端要收到这个决定。协议支持时,还可以附上拒绝理由、编辑参数后批准,或者在当前会话内记住允许选择。

Agent 也可能只是需要补充信息。这时可以显示表单,支持文字、数字、布尔、单选、多选和用户自己填写的答案。AskUser 对应 Pydantic AI Harness 的提问工具,设备端与服务端使用一致的定义和结果形式。

下面这段录屏展示了一个最小闭环:用户提出请求,界面出现计划和推理,工具停在待审批状态。允许后,剪贴板工具在 Android 设备上执行,然后继续输出回复。这里使用的是内置离线演示 Agent,录屏来自真实模拟器,工具确实在设备上运行。

应用可以复用这段交互,再按自己的产品要求决定审批策略。界面负责让用户参与,权限、可信服务器和工具执行规则仍要由应用与后端明确处理。

支持哪些 AI 协议

本库支持 AI SDK、AG-UI、MCP / MCP Apps、A2A、ACP 和 A2UI,可按现有后端和需要的能力选择接入。

你要连接什么 对应标准 主要用途
Agent 服务与用户界面 AI SDK UI Message Stream、AG-UI 流式文本、工具、状态、进度和用户交互
Agent 与外部工具服务器 MCP 获取工具、资源和 prompt
MCP 工具自带的交互视图与 App MCP Apps 给工具视图提供宿主、消息桥接和权限边界
一个 Agent 与另一个 Agent A2A 发现远程 Agent、执行任务、保留会话上下文、接收产物
App 与编码 Agent ACP Session、计划、文件操作、diff 和权限询问
Agent 返回的界面与用户 A2UI 传递声明式表单或卡片,再把用户操作返回 Agent

这也是库里要做协议适配的原因。网络上仍遵循这些标准;进入 App 后,再转换成一套消息、事件和交互状态,供 Compose 组件显示。这些 App 内部对象不会被当成一个新协议发到网络上。

UI 根据上游提供的类型、来源、类别和位置显示内容。它不需要猜工具名字,也不需要知道一条 SSE 事件应该怎么解析。

各协议支持的交互仍有区别。例如 AI SDK 的工具审批可以带理由,但不提供修改参数;ACP 主要返回 Agent 给出的权限选项;AG-UI 和设备端可以返回更丰富的审批答案。界面按后端实际支持的能力提供操作。

v0.3.0 的 AI SDK 发布验证范围是 v5/v6 UI Message Stream 和 v4 Data Stream 回退,不能据此宣称兼容最新全部版本。具体版本、回退和限制在协议文档里分别列出。

架构与自定义后端

开发者可能已经有自己的 Agent 服务,也可能用 Pydantic AI、LangGraph,或者想让任务在设备上运行。UI 不应该强迫应用重选一套后端。

本库分成几个层次:

层次 负责什么
ai-elements-chat 消息、事件、backend 契约、controller、审批与输入;无网络、无 Compose
ai-elements-core 协议客户端、模型 API、Agent 循环、MCP、Skills 和认证;无 Compose
ai-elements-ui Compose 组件与主题,只依赖 chat
可选模块 A2A、ACP、Koog、生成式 UI、MCP Apps 和端侧能力,按需添加

已有标准协议服务,就使用相应 backend;自己的协议可以实现 ChatBackend,把会话转换为事件流。认证、不同协议的能力差异和数据保存策略,仍在各自层次处理。

只需要界面组件,可以只引 UI 和 chat。想保留自己的页面布局,就分别使用 Conversation 和 PromptInput;想先跑起来,则可以使用完整的 Chat(controller)。

这意味着你可以保留现有原生 App、业务页面和服务端,逐步接入需要的交互。UI 不依赖协议和 Agent 运行时,接入时可以独立选择 backend、页面布局和 renderer。

任务计划、子 Agent 与执行过程

当一个 Agent 把工作委派出去,用户不应该只看到"任务中"。子 Agent 以嵌套运行显示在委派任务内,可以展开查看它的回复、工具和审批。

任务计划也有单独的组件。它可以显示当前步骤和完成状态,配合共享状态及活动信息,让用户知道一项长任务做到哪里。

浏览网页、执行命令、读取和编辑文件时,可以进一步打开 Agent 的电脑面板。这里按步骤展示截图、终端输出或 diff,下面有时间线和前后切换控件。它可以跟随最新步骤,也允许用户返回先前步骤查看。

Terminal 保留常见的颜色、进度重绘和链接,编辑内容可以显示 unified diff。长日志有显示范围和有限 scrollback,步骤与截图也按长运行的需求组织。

回看还有不同精度:保存消息后,可以查看其中已经记录的工具步骤;AG-UI 的事件日志可以按录制节奏重新构建文本增量和状态变化;支持 session/load 的 ACP Agent 可以提供自己的运行记录。

这不代表所有协议都有断点续传。当前断流后的 Retry 会重新请求一轮;事件回放和网络重连是两件事,存储与保留策略也由应用决定。

生成式 UI:让 AI 返回表单

如果助理让用户选择日期、填地址、勾选偏好,一张表单就比在聊天里来回核对字段更直接。

ai-elements-genui 把 A2UI v1.0 surface 渲染成 Compose 组件,内置 Basic Catalog,也可以扩展为自己的设计系统。用户填到一半时,更多内容继续流入或表单滚出屏幕,输入状态仍能保留。点下按钮后,操作通过相应协议返回 Agent,继续后续任务。

JsxPreview 也使用这套组件目录,支持常见控件、数据绑定和 action。它解析标签与数据,不执行模型生成的任意 JavaScript。消息里的 JSX/TSX 代码块可以显示实时预览,也可以切回源码。

如果 MCP 工具已经自带交互式 HTML 页面,可以引入 MCP Apps 宿主。它在沙箱 WebView 中运行,使用独立 origin、资源声明的 CSP 和标准桥接。视图可以调用允许给 app 的工具、发送消息、更新下一轮模型上下文、打开链接或请求全屏。

因此,本库中的"原生"也有明确范围:聊天与 A2UI/JSX 组件使用 Compose;默认 Mermaid 和 MCP Apps 使用 WebView。原生 Mermaid 是需要明确 opt-in 的实验性可选模块。

消息内容与会话操作

完整的 AI 界面还要处理代码、引用、文件和会话操作。库里提供流式 Markdown、代码高亮、数学公式、Mermaid、来源引用、上下文用量和模型选择器;图片能查看与缩放,视频和音频有对应播放器,PDF 可以在应用中预览和阅读,其他办公文档通过系统应用打开。

会话层包含发送、停止、重试、重新生成的分支、checkpoint,以及运行期间的消息队列。消息可以用于应用自己的持久化存储,但历史如何保存、保留多久、进程重建以后如何恢复,仍由应用决定。ViewModel 能应对配置变化,不能单独解决进程死亡。

语音使用设备上的 SpeechRecognizer 和 TextToSpeech,可以听写、朗读回复、选择引擎与音色,也可以通过同一个 controller 开启免手持 VoiceMode。遇到审批或用户提问时,语音模式会暂停并引导回到聊天。应用需要处理相应权限与设备能力。

代码类场景还可以选用 Artifact、WebPreview、Terminal、StackTrace、TestResults、FileTree、Commit、SchemaDisplay、PackageInfo、EnvironmentVariables、Sandbox 和 Snippet。工作流画布 WorkflowCanvas 则提供自定义节点、工具栏和面板位置。

这些组件负责呈现后端已经提供的内容,不会凭空生成执行结果或业务流程。图册目前有 65 个展示场景,每个给出图片、用途、imports、经过编译的示例和 API 链接,方便先看清效果,再选择需要的部分。

在应用内运行 Agent

服务端模式继续连接自己的 AI SDK、AG-UI、A2A 或 ACP Agent。参考服务用 Pydantic AI、Pydantic AI Harness 和官方 SDK,提供无需模型密钥的 scripted model,用来验证协议与界面。

设备端模式可以通过 OpenAI Chat Completions / Responses、Anthropic Messages、Gemini、Ollama 等 API 运行 Agent。AgentHarness 将模型与能力组合成 ChatBackend;Koog 也是可选的运行时集成。

这里的能力按模块拆开:

需要什么 可以添加的能力
处理资料与文件 工作区读写、编辑、查找,以及用户通过 SAF 分享的文件夹
保留计划与记忆 任务计划、跨会话记忆,以及按配置注入 MEMORY.md
执行命令 可插拔 Shell 运行时和可选 Alpine / PRoot 沙箱
浏览页面 离屏 WebView 的导航、快照、点击、输入与截图,模型可接收页面图片
接外部工具 MCP 服务器的工具、资源和 prompt,以及受保护服务器的 OAuth 接入
加载技能与委派 按需加载 SKILL.md,使用本地或远程子 Agent
使用手机能力 按需接设备信息、剪贴板、日历、联系人、定位、通知和平台 TTS
定时任务 WorkManager 调度,应用提供后台构建 Agent 的入口

它们不用和 UI 一起全部引入。端侧工具的名称与行为对应 Pydantic AI Harness 的公开约定,便于两端使用一致的交互语义。

Provider 配置可接模型列表和选择器,内置 store 使用 Android Keystore 加密保存凭据。MCP 接入可以处理 OAuth metadata、PKCE、工具缓存与服务器状态;某个服务器失败时,可以报告状态并在本轮跳过,而不必让整轮对话一起失败。

可信服务器、凭据来源、Android 权限、审批策略和资源生命周期,都仍需要应用明确配置。组件不会替应用自动获得权限。

手机、平板与折叠屏适配

组件使用 Material 3 Expressive,可以调整颜色、字体和 shape,也可以替换单个工具、数据 part 或代码块的 renderer。附件加载可以接自己的缓存、HTTP 栈和认证,不需要 fork 整个 Conversation。

手机上空间有限,电脑面板使用 bottom sheet;较宽的聊天容器可以显示侧栏,并接入 Material 3 list--detail 的 extra pane,适配平板和折叠屏。

平板或展开的折叠屏上,历史列表与当前会话可以并排,Agent 的电脑面板也可以放在额外一栏。它按聊天容器自身的空间适配,不是把手机界面简单拉宽。

可选通知模块通过 AgentProgress 展示运行状态。Android 16 支持 Live Update,较旧系统使用普通进度通知;等待审批时引导用户回到应用查看内容,完成后可以提示回复就绪。前台服务、后台运行时长和通知权限,由应用决定。

字符串提供英语、简体中文、繁体中文和日语,也包含 content description、触摸目标与 TalkBack 语义。这些是把 Agent 交互放进原生应用时需要一起考虑的部分。

怎么接入 Compose

连接 AI SDK / AG-UI 服务时,先用 BOM 对齐版本,再添加 UI 和 core:

kotlin 复制代码
dependencies {
    implementation(platform("io.github.junelegency:ai-elements-bom:0.3.0"))
    implementation("io.github.junelegency:ai-elements-ui")
    implementation("io.github.junelegency:ai-elements-core")
}

以 AG-UI 为例,在 Compose activity 的 setContent 中使用:

kotlin 复制代码
import dev.ai.elements.core.protocol.agui.AgUiBackend
import dev.ai.elements.ui.chat.Chat
import dev.ai.elements.ui.chat.rememberChat
import dev.ai.elements.ui.theme.AiElementsTheme

AiElementsTheme {
    Chat(rememberChat { approver ->
        AgUiBackend(
            "https://agents.example.com/api/agui",
            approver = approver,
        )
    })
}

把地址换成自己的服务即可继续接入。网络权限、debug HTTP 配置、ViewModel 管理 controller 和自定义布局的完整示例在快速开始文档里。只需要界面时可以只引 UI 与 chat,自己的协议实现 ChatBackend,再映射到消息与事件。

采用前要核对几项现实条件:本库目前只支持 Android;UI/core 的 minSdk 为 24,部分可选模块为 26。测试基线是 JDK 21、Gradle 9.8.0、AGP 9.4.1(内置 Kotlin 2.4.20)、compileSdk 37.2 和 Java 17 字节码。

Compose 1.13.0-alpha03 与 Material 3 1.5.0-alpha29 是预发布依赖。BOM 对齐的是本库,不会替应用统一所有 AndroidX;A2A 有 desugaring 要求,PRoot 有打包与许可证要求。安装页分别说明,接进正式工程前需要确认。

运行稳定性与使用限制

评估 SDK 时,可以先用 Demo 和 65 个图册场景,查看浅深色、内容类型、审批和长任务是否符合自己的产品交互,再把需要的部分接到真实后端。图册提供实际 Android 截图、imports、可编译示例和 API 链接,方便对照接入。

流式消息支持用户主动停止、重试和运行中的消息队列;用户向上滚动查看旧内容时,不会强行把页面拉回最新回答。长工具输出有显示边界,终端保留有限 scrollback,步骤和截图采用适合长运行的列表组织。

应用仍要处理自己的生命周期。Controller 放在 ViewModel 中可以保留配置变化时的会话;进程回收后的历史恢复需要应用持久化消息。断流后的 Retry 会重新发起请求,不代表所有协议都有自动续传。长任务在后台继续运行时,前台服务和通知策略也由应用决定。

生成式 UI 与外部视图有各自边界:JSX 不执行任意 JavaScript,MCP Apps 使用沙箱与 CSP,Android 权限和可信工具策略由应用明确配置。这些机制帮助接入方管理交互,不是对任何服务器或模型输出的绝对安全保证。

本库目前的适用范围、minSdk、alpha 依赖和额外配置在安装页列出。把它们与自己工程的工具链、设备范围和真实后端一起确认,再决定引入哪些模块。

如果你也在做原生 Android 的 AI 功能,希望少重复写一套工具审批、运行过程和表单界面,可以先装 Demo,挑需要的组件试着接入。

如果你觉得这块 Kotlin 原生 AI 交互生态值得继续完善,欢迎给项目一个 star,并通过 issue 反馈接入时缺少的能力,以及难以实现的交互。

项目与源码:github.com/JuneLeGency...

中文文档:junelegency.github.io/ai-elements...

英文文档:junelegency.github.io/ai-elements...

Demo 与 Release:github.com/JuneLeGency...

Maven Central:central.sonatype.com/artifact/io...

参考:

相关推荐
知昂七昂1 小时前
00-02:AOSP 源码阅读环境与检索方法论源码剖析(Android 16 / aosp-main)
android
知昂七昂1 小时前
00-01:AOSP 源码仓库结构与 repo 工作流源码剖析(Android 16 / aosp-main)
android·google
跨境数据猎手1 小时前
Android Native 层黑盒调用实战:unidbg 模拟执行 so 的原理
android
镜象科技3 小时前
中小学AI心理健康解决方案服务商怎么选?2026年选型参考
android·java·人工智能
脚踏实地,坚持不懈!3 小时前
从 AOSP 源码角度分析 Android 定位性能问题
android
悟道子HD3 小时前
网络安全基本功——MySQL基础
android·mysql·web安全
纪念 2293 小时前
C++ string(三)
android·c++
纪念 2293 小时前
c++ string(最终篇)
android·c++
aqi0013 小时前
鸿蒙版本的电子书阅读APP开放源码啦
android·华为·ai编程·harmonyos·鸿蒙