XiaoAi Plug

自定义替换超级小爱模型,越权完成更多任务。

一个 LSPosed / Xposed 模块,Hook com.miui.voiceassist。它做两件事:

  1. 换模型 — 把超级小爱背后的大模型替换成你自己配置的(OpenAI 兼容 / Anthropic / xAI / 硅基流动,任意 API Key)。你问、你的模型答,答案原路送回小爱的语音和卡片里。
  2. 提权 — 原生小爱受限于系统权限,很多事只能「跳到设置页让你自己看」「回一句不支持」。模块把 root 和无障碍能力打包成工具交给模型,它能真正读设备、改设置、启动应用、代你发微信消息。

换模型解决「答得好不好」,提权解决「能不能真的做到」。两件事合起来,超级小爱从一个受限的语音壳子变成一个能落地执行的设备助手。


一、换模型

超级小爱的回答能力由小米的云端模型决定,不可选、不可调。模块把这条链路截断,改由你的模型作答。

接管是完整替换,不是叠加。 小爱的输出有四条互相独立的路:

  • TTS 语音播报
  • 对话结果卡片
  • SpeakContentManager 的权威文本(卡片上喇叭按钮重播读的是它,不是卡片文字)
  • App 内历史对话的 SQLite 落库

只改其中一条,就会出现「声音和字对不上」,或者回头翻历史记录还是小爱的原话。四条全部覆盖。

播报走小爱自己的 TTS。 复用 ToastStreamPlayer,音色、打断、音频焦点全是原生行为,听感和平时一致。不用小爱的主 TTS 入口是有原因的:模型答案有几秒延迟,那时会话往往已经拆了,主入口内部有引擎判空守卫,为 null 时静默丢弃、一声不吭;ToastStreamPlayer 设计上就是给「会话已结束、用户回头点重播」用的,正好合适。

服务商可扩展。 只有报文协议(OpenAI / Anthropic 两种)需要写代码,新增一家 OpenAI 兼容服务商只是在 AiProvider 里加一行默认地址和默认模型,界面和客户端都不用动。

接管时机可控。 不是所有话都拦。默认接管两类:小爱会跳设置页打发掉的查看类问题、小爱答不上来会跳全局搜索的兜底。放行词(如「打开」)可自定义,正常的「打开微信」「导航去公司」照旧交给小爱。也可以全开或全关。


二、提权

原生小爱能做的事被系统权限框死了。模块把设备能力封装成工具表交给模型,模型自己决定调哪个、怎么调。

能读

工具 作用
device_status 电量与充电状态、剩余存储、内存、运行时长、机型、系统版本
wifi_info 当前 WiFi 状态,含配置详情
network_info 网络连接情况
top_memory_apps 各进程内存占用排行
top_storage_apps 各应用存储占用排行
list_apps 已安装应用(包名 + 显示名)
recent_notifications 最近的通知
get_location 设备当前位置(经纬度 + 地名),走系统定位而非 IP
weather 天气实况与预报(wttr.in),默认查当前位置
get_setting 读系统设置项(System / Secure / Global)
read_file 读任意文本文件(root)
current_time 当前系统时间

能做

工具 作用
launch_app 启动应用
set_setting 修改系统设置项
media_control 控制正在播放的媒体
set_volume 设置 / 查询媒体音量
send_message 通过无障碍服务真的在微信里把消息发出去
run_shell 以 root 执行任意 shell 命令

每一项都能在设置页单独开关——想让它只读不写,把「能做」那一栏全关掉即可。

提权带来的实际差别

你说的话 原生小爱 换脑 + 提权后
「电池健康怎么样」 跳设置页,答案自己找 留在对话里,读出真实数值直接说
「WiFi 密码是多少」 做不到 一轮工具调用读出来
「哪个应用最占内存」 做不到 列出排行并给建议
「给老王发微信说我晚点到」 双开机型直接回「暂不支持」 无障碍代操作,消息真的发出去
小爱答不上来时 「只能帮你到这儿啦」+ 跳全局搜索 拦掉兜底,模型正常回答

写类工具有保护。 启动应用、改设置、调音量这类会改变设备状态的工具,只在本轮确实由模块接管时才允许执行。真机上出过事故:「打开微信帮我给 X 发信息」命中放行词、本该交给小爱,模块没接管但模型照样跑了一遍并真的打开了微信,同时小爱在报「不支持双开」,两边各干各的。读类工具跑了无所谓,动手类不行。


三、工程细节

工具循环为延迟设计。 语音场景下用户等不了,几处针对性优化:

  • 组合式工具优先于通用 shell。「WiFi 密码是多少」交给 run_shell 要跑四轮(列网卡 → 找配置 → 读文件 → 解析),每轮一次模型往返,实测 14 秒;wifi_info 一轮出结果。
  • 单个工具内部只起一次 shell,多条命令拼进同一次 su -c。真机上进程创建 80~150ms,起五次就是半秒白给。
  • 同一轮里的多个工具调用并行执行,总耗时取决于最慢的那个。

工具调用双通道。 首选原生 function calling;端点不支持(返回 400)时自动降级为文本约定 <tool_call>{...}</tool_call>,并把工具表写进 system prompt。文本方言兼容 JSON、<name>/<arguments><parameter name=...> 三种写法——模型换方言时不至于把整段标记原样念出来。

在 ASR 终态记录问话。 实测「跳设置」的 Agent Action 比 setQueryInfo 早 334ms 就发出去了,那时按问话判定必然失效。改在语音识别终态结果处记录,比 Agent Action 早 266ms,来得及拦。

无障碍权限收窄到微信。 只声明 com.tencent.mm 一个包。无障碍服务能读到被授权应用的全部界面内容,范围能收窄就收窄。


配套 App

模块自带 HyperOS 风格界面(Compose + Miuix),三个标签页:

  • 首页 — 模块激活状态、配置完整度、快捷入口
  • 记录 — 每一次拦截、模型请求、工具调用的完整明细,滑动删除,滚动保留最近 500 条
  • 设置 — 服务商与密钥、system prompt、拦截开关与放行词、播报开关、逐项开关的工具授权

配置通过 ContentProvider 跨进程下发到小爱进程里的 Hook;运行记录反向经同一座桥回写进模块私有数据库。


环境要求

  • Android 13+
  • HyperOS,超级小爱 com.miui.voiceassist(7.513.23.0010)
  • LSPosed(Xposed API 93+)
  • Root

作用域勾选 com.miui.voiceassist

构建

./gradlew :app:assembleDebug

AGP 9.3 / Kotlin 2.4 / compileSdk 37。

说明

模块依赖大量小爱内部的混淆类名(la0.n1jb0.vdz10.a 等),这些名字随小爱版本变化。所有 Hook 点在 HookEntry.kt 里集中声明,并注明了用途与实测依据,升级失配时从那里对照修正。

面向个人设备的功能增强,不涉及绕过任何鉴权或计费机制。开放 root 工具给大模型有其风险,请按需裁剪工具授权。

任何因使用该模块导致超级小爱获取过高权限所造成的设备损坏作者概不负责。

开源协议

本项目采用 GNU General Public License v3.0

第三方依赖均为 Apache-2.0(Xposed API、Miuix、Jetpack Compose、kotlinx-coroutines),与本协议兼容。

Releases

1.0.4

Stable

7/25/2026, 9:48:34 AM

更新日志

###紧急修复卡片无恢复的bug(已撤回上版本[Releases])

🚀 优化与改进

  • 去除多余依赖,大幅减少 App 体积
  • 优化调用工具所需时间
  • 放开无障碍服务的适用范围

✨ 新功能

  • 新增流式输出
  • 新增 4 个系统控制工具:
    • 读取短信验证码
    • 读取当前前台应用屏幕文字
    • 抓取日志 cat
    • 对应用做强制停止、冻结、解冻、清缓存等操作

🐛 问题修复

  • 修复某些控制类指令无法被正常接管
  • 修复部分场景输出两次结果
  • 修复部分场景小爱原生回答未被完全替换

Assets

1

1.0.2

Stable

7/22/2026, 9:43:57 AM

更新日志 (Changelog)

✨ 新增功能

  • 无障碍自启:新增无障碍服务自动启动支持(需授予 ROOT 权限)。
  • 微信联系人模糊搜索:支持对微信联系人进行模糊搜索并发送消息。

⚡ 优化与改进

  • 系统提示词:更新默认系统提示词以提升输出准确性(注:更新后需手动恢复一次默认设置)。
  • 工具调用:优化并提升工具调用的准确性。
  • 工具逻辑:修改 send_setting 工具的逻辑。

🐛 Bug 修复

  • 跳转拦截:修复特定场景下跳转拦截失败的问题。
  • 文本同步:修复特定场景下 ASR 与 setQueryInfo 文本不一致的问题。
  • 安全与权限:修复 run_shell 可绕过 allowMutating 限制的问题。
  • 缓存清理:修复软失败会污染缓存和历史记录的问题。

Assets

1

1.0.0

Stable

7/21/2026, 10:13:47 AM

v1.0.0

换模型

把超级小爱背后的大模型替换成你自己的。支持 OpenAI 兼容 / Anthropic / xAI / 硅基流动,填个 API Key 就能用。

提权

19 个工具交给模型自行调用,覆盖设备状态查询、WiFi 密码读取、内存/存储排行、应用启动、系统设置读写、媒体控制、微信无障碍发消息、任意 shell 命令。

  • 组合式工具优先于通用 shell,单轮出结果
  • 多工具并行执行,总耗时取决于最慢的那个
  • 写类工具有保护:只在本轮确实由模块接管时才允许执行

拦截跳转系统设置、搜索

白名单自定义拦截简单问题或系统设置问题跳转系统设置或搜索

工程细节

  • 静音泵持续钳制小爱主音轨,我们的答案播在独立音轨上,互不干扰
  • 认领小爱自己的话术卡来显示答案,不自建卡片(自建卡在真机上渲染不出来)
  • 同一句问话在 15 秒窗口内归拢,防止小爱派两个 dialogId 导致「抢答」
  • 工具调用双通道:原生 function calling 优先,端点不支持时自动降级为文本约定
  • 对话上下文:最近一小时内的五轮问答自动带上,进程被杀即清
  • 记忆系统:模型可主动记录用户偏好,下次对话自动注入 system prompt

配套 App

HyperOS 风格界面(Compose + Miuix),三个标签页:首页(模块状态)、配置(服务商、密钥、提示词、拦截开关、工具逐项授权)、记录(拦截/请求/调用明细,最近 500 条)、设置。

系统设置内入口:设置 → 小米澎湃 AI → XiaoAi Plug。

环境

  • Android 13+ / 超级小爱 com.miui.voiceassist(7.513.23.001)
  • LSPosed(Xposed API 93+)/ Root
  • AGP 9.3 / Kotlin 2.4 / compileSdk 37
  • GPL v3.0

Assets

1