气泡RH(Bubble RH)
注意!本客户端并非RikkaHub团队其中任何一员开发!如有侵权,请联系删除仓库!
气泡RH 是面向 RikkaHub 内置 Web 服务器的 Android 客户端。它通过 RikkaHub 的 Web API 获取会话与消息,并以微信 / Telegram 风格的气泡界面呈现,同时提供了原版应用所不具备的定制能力:气泡拆分、自定义头像与昵称、离线缓存、未读通知等。
重要:本应用必须搭配 RikkaHub 使用,本身不包含 AI 服务、会话存储或任何后端功能。它只是一个 RikkaHub Web 服务器的客户端,没有 RikkaHub 就无法运行。请确保设备上已安装并配置好 RikkaHub,且其 Web 服务器已启用。
本应用是一个纯粹的客户端,不包含 Web 视图,所有界面均为原生 Jetpack Compose 实现,遵循 Material 3(Material You)设计规范,支持系统主题取色与深色模式。最低支持 Android 12(API 31+)。
使用方法
前置条件:设备上必须已安装 RikkaHub,并完成模型与助手的配置。气泡RH 仅负责连接与展示,不提供任何独立功能。
第一步:在 RikkaHub 中设置回复格式
在 RikkaHub 的系统提示词(System Prompt)中,要求 AI 以特定分隔符包裹每条回复内容,例如:
1 | 请以如下格式回复每条消息:#内容*,每个 # ... * 作为一条独立消息。 |
您也可以设置类似格式但效果相同的提示词。
默认分隔符为起始符 # 与结束符 *。你也可以在气泡RH 的「设置 → 消息拆分」中修改这两个分隔符,需与 RikkaHub 中的提示词保持一致。
第二步:启用 RikkaHub 的 Web 服务器
打开 RikkaHub 应用:设置 → Web 服务器 → 启用。服务器默认监听 8080 端口。若本机访问,地址为 http://localhost:8080;若需从局域网内其他设备访问,请关闭「仅本机访问」并允许局域网连接。
第三步:打开气泡RH
安装并打开本应用,在「设置 → 服务器连接」中填写 RikkaHub 的 Web 服务器地址(默认 http://localhost:8080),点击「保存并连接」。
连接成功后即可在主页看到会话列表,点击任一会话进入聊天界面。AI 的回复会按设定的分隔符拆分为多个气泡,并按随机延迟逐个弹出。
发送消息的两种方式
气泡RH 支持两种发送模式(在「设置 → 发送模式」中切换):
- 定时发送:输入一段文字后点击发送,文字会进入待发队列;若在倒计时结束前没有继续输入,队列会在倒计时结束后自动提交。
- 手动发送:输入一段文字后点击发送加入待发队列;全部输入完成后,清空输入框再点击一次发送,即可将全部气泡打包提交。
多条气泡会被打包为形如 #内容1*#内容2*#内容3* 的单条消息发送给 RikkaHub,AI 可据此识别为多条消息。
功能特性
会话与消息
- 会话列表:显示会话名称、自定义头像以及最后一条气泡消息的预览,支持置顶、删除与下拉刷新。
- 聊天界面:微信 / Telegram 风格气泡,用户在右侧、AI 在左侧;支持 Markdown 渲染。
- 气泡拆分:AI 与用户消息均按设定分隔符拆分为多个气泡;不含分隔符的消息按单气泡显示。
- 消息时间:间隔较长的消息之间显示时间;非当天消息显示日期,非当年消息附带年份。
- 长按复制:长按任意气泡弹出菜单,可复制消息内容。
个性化定制
- 会话信息:聊天页右上角菜单进入全屏会话信息界面,可查看并编辑会话的昵称、Emoji 与头像图片。
- 我的资料:在设置页可设置自己的昵称、Emoji 与头像,显示在右侧气泡旁。
- 头像显示模式:每条显示 / 仅首条显示 / 仅末条显示。
- 气泡动画:可自定义气泡弹出的起始缩放、动画时长、回弹效果与回弹强度。
- 气泡弹出延迟:可设置多气泡逐个弹出的随机延迟范围。
- 列表样式:平铺列表 / 圆角卡片。
助手切换
气泡RH 暂不支持支持切换 RikkaHub 中的助手。请在 RikkaHub 内切换后回到本应用自行刷新。
离线与可靠性
- 本地缓存:每个打开过的会话会在本地缓存消息,重新进入时秒开且直接定位到最新消息,仅增量更新新消息。
- 离线提示:服务器离线时主界面顶部显示红色提示条,仍可查看已缓存的聊天记录。
- 发送队列:网络异常或服务器繁忙时,未能发送的消息会进入本地队列,网络恢复后自动补发。
- 自动刷新:应用在前台或后台运行时,按设定的刷新间隔自动检测新消息与新会话。
- 保活服务:内置前台服务以静音通知保持进程常驻,确保后台仍能检测消息并推送通知(详见「已知限制」)。
通知与未读
- 未读计数:会话有未读消息时,列表项右侧显示未读数;未读按新消息拆分出的气泡数统计。
- 已读持久化:打开过的会话会记录已读时间,刷新后不会重复计为未读。
- 消息通知:收到未读消息时发送系统通知,通知使用你在本应用中设置的自定义昵称与头像。
- 常驻保活通知:后台同步服务会显示一条静音常驻通知,请勿划掉,否则后台检测将停止。
其他
- 配置导入导出:设置页可将全部配置(服务器地址、分隔符、发送与头像模式、气泡延迟、动画参数、我的资料等)导出为 JSON 文件,或从文件导入。
- 深色模式与动态取色:跟随系统,支持 Material You 主题色。
设置项说明
| 设置项 | 说明 |
|---|---|
| 服务器连接 | RikkaHub Web 服务器地址,默认 http://localhost:8080 |
| 消息拆分 | 气泡起始与结束分隔符,默认 # 与 * |
| 发送模式 | 定时发送或手动发送 |
| 自动发送倒计时 | 定时模式下无操作后自动提交的秒数 |
| 头像显示 | 每条 / 仅首条 / 仅末条显示头像 |
| 对话列表样式 | 平铺列表或圆角卡片 |
| 气泡弹出延迟 | 多气泡逐个弹出的随机延迟范围(毫秒) |
| 气泡动画 | 起始缩放、动画时长、回弹效果与强度 |
| 自动刷新间隔 | 后台检测新消息的频率(秒) |
| 我的资料 | 自己的昵称、Emoji 与头像 |
| 配置管理 | 导出或导入全部配置(JSON) |
构建
1 | # 构建 Debug APK |
构建产物位于 app/build/outputs/apk/debug/app-debug.apk。开发环境要求 JDK 17、Android SDK 35+。
技术栈
| 层 | 技术 |
|---|---|
| 语言 | Kotlin 2.2 |
| 界面 | Jetpack Compose + Material 3 |
| 网络 | Ktor Client(CIO 引擎),REST + SSE |
| 本地存储 | Room(会话缓存、发送队列、自定义资料)、DataStore(配置) |
| 图片加载 | Coil |
| 目标平台 | Android 12+(API 31+) |
数据来源为 RikkaHub Web 服务器暴露的 API:会话列表与详情、消息收发(HTTP)、会话与设置事件流(SSE)、助手列表与切换。
已知限制
- 助手头像:RikkaHub 返回的助手头像为
file://沙盒路径,本应用无法直接访问,因此助手头像显示为名称首字符兜底,可通过自定义头像代替。 - 后台检测:RikkaHub 为本地服务器,没有推送通道,因此后台消息检测依赖前台服务轮询(默认 15 秒一次),会带来一定的电量消耗。可通过增大刷新间隔降低耗电。
- 保活通知:为保持后台检测,应用会常驻一条静音通知,属于 Android 前台服务机制的强制要求。
- 进程强杀:若用户手动强制结束应用进程,后台检测将停止,直至下次打开应用。
许可与声明
本项目为独立开发的开源客户端,与 RikkaHub 官方无隶属关系。数据与功能依赖 RikkaHub 的 Web 服务器接口,使用前请确保已按上文启用 Web 服务器。