气泡RH

作者
MonishGuy
阅读时长
7 分钟
字数
2162
阅读
—
分类
应用发布
更新于

气泡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
2
3
4
5
# 构建 Debug APK
./gradlew assembleDebug

# 运行单元测试
./gradlew test

构建产物位于 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 服务器。