LianYu-app

More: Author   ReportBugs   
Tags:
LianYu Logo

面向 Android 的 AI 虚拟陪伴应用开源框架

AI Companion · Modular Android · Jetpack Compose · Local Model Ready · Open API Framework

Android 8+ Kotlin Jetpack Compose Modular Open Source

快速开始 · 功能全景 · 系统架构 · API 配置 · 贡献者


目录


🌌 项目定位

LianYu(恋语) 是一款 Android AI 虚拟陪伴应用的开源框架。它不是一个简单的聊天 Demo,而是一个围绕“长期陪伴、角色人格、记忆沉淀、多模态扩展、本地模型接入、模块化工程治理”构建的完整应用骨架。

本项目适合:

  • 想学习 Kotlin + Jetpack Compose 大型 Android 工程架构 的开发者。
  • 想二次开发 AI 伴侣、AI 角色聊天、AI 社交陪伴类产品的团队。
  • 想接入 OpenAI-compatible API、本地模型、私有模型网关的个人或组织。
  • 想参考 Room / Flow / Compose / WorkManager / 多模块拆分实践的 Android 工程师。

它提供了一套完整但可替换的产品基座:

角色系统 + 聊天系统 + 记忆系统 + 群聊系统 + 设置系统 + 本地模型框架 + 通知框架 + 主题框架

你可以把它当作:

  • 一个 AI companion app starter kit。
  • 一个 Compose 多模块工程样板。
  • 一个可继续商业化或社区化的虚拟陪伴应用底座。
  • 一个可替换后端、替换模型、替换 UI 风格的产品壳。

🌱 开源版声明

为了适合公开发布,本仓库已经整理为 Public Edition

已移除

  • 私有 AI 中继服务配置。
  • 内置 Clove / cloveapi 相关服务器逻辑。
  • 个人服务器地址、内置 token、内置 secret、私有 API key。
  • 私有证书 pinning 和面向私有后端的请求签名。
  • Native 安全壳、VMP、反调试、OLLVM、shell payload、打包加固脚本。
  • 发布 APK、私有安全文档、历史临时推送目录。

已保留

  • App 主体功能和模块化架构。
  • AI Provider 配置框架。
  • Room 数据库和 Repository 层。
  • Compose UI 与主题系统。
  • 本地模型接入框架。
  • 通知、WorkManager、微信/QQ Bot 等功能模块骨架。
  • core:security 最小 no-op 兼容层,方便下游替换实现。

需要你自行配置

  • AI API Base URL。
  • API Key。
  • 模型名称。
  • 推送平台参数。
  • 签名证书。
  • 是否接入自己的安全/加密/风控方案。

Public Edition 默认不会连接任何私有服务器,也不提供可直接使用的内置模型服务。

UI 占位提示

Public Edition 中保留的部分「自定义中继 / Partner / 连接测试」相关 UI 仅作为二次开发占位,用于展示原有设置入口和配置流程。

这些 UI 不会连接任何内置服务器,也不会自动分发 API Key。如果你需要使用对应能力,请在自己的 fork 中接入自有后端,或直接使用「自定义 API / OpenAI-compatible」配置填写自己的 Base URL 与 API Key。


✨ 功能全景

1. AI 伴侣聊天

  • 单人伴侣聊天。
  • 多轮上下文对话。
  • 消息历史持久化。
  • AI 回复失败处理。
  • 消息输入队列和异步处理。
  • 用户消息与 AI 消息区分展示。
  • 适配 OpenAI-compatible Chat Completions 风格接口。

2. 角色与伴侣管理

  • 创建虚拟伴侣。
  • 编辑角色资料。
  • 角色头像、名称、设定、描述管理。
  • 默认伴侣 seed 框架。
  • 角色资料可扩展到人格、语气、背景故事、互动风格。

3. 群聊框架

  • 群组数据结构。
  • 群消息持久化。
  • 多角色互动基础。
  • 可扩展为多人 AI 剧场、虚拟社群、AI 角色扮演房间。

4. 记忆系统

  • 记忆条目管理。
  • MemoryEntry 数据模型。
  • 可扩展长期记忆、用户偏好、角色关系、重要事件。
  • 为后续向量检索、RAG、上下文召回预留工程空间。

5. API 配置中心

支持多种 Provider 类型和自定义接口:

  • OpenAI
  • Claude / Anthropic
  • Gemini
  • DeepSeek
  • DashScope / 通义千问
  • Kimi
  • OpenRouter
  • Groq
  • SiliconFlow
  • 讯飞星火
  • 自定义 OpenAI-compatible API
  • 自定义中继占位

开源版不内置任何密钥。所有 API 均需要用户自行填写。

6. 本地模型框架

  • LiteRT-LM 接入结构。
  • 本地模型管理器。
  • 模型下载、校验、激活状态框架。
  • LocalAiService 单例和引用计数设计。
  • 适合继续扩展端侧 Gemma / 小模型 / 分类器能力。

7. 主题与 UI 体系

  • Jetpack Compose UI。
  • Material 3。
  • 深色优先风格。
  • WeChat 风格交互。
  • 液态玻璃 / Frosted glass 视觉组件。
  • Skeleton / shimmer / spring animation 等现代动效基础。
  • 硬件性能分级控制动画强度。

8. 通知与后台任务

  • Foreground Service。
  • WorkManager 周期任务。
  • BootReceiver 开机恢复。
  • 通知渠道初始化。
  • 可扩展主动消息、陪伴提醒、定时互动。

9. 微信与 QQ Bot 功能骨架

  • 微信轮询服务框架。
  • 微信主动消息广播接收框架。
  • QQ Bot 前台服务和 WebSocket 基础能力。
  • 适合二次开发为跨平台陪伴助手。

10. 咖啡 / 工具类扩展模块

  • 作为独立 feature 模块存在。
  • 展示了业务功能如何以 feature 模块方式接入主应用。
  • 可作为后续插件化、工具型功能扩展示例。

🧭 产品体验

LianYu 的目标体验不是“问答工具”,而是“持续陪伴”。因此工程上围绕以下体验设计:

体验目标 工程支撑
角色有记忆 Room MemoryEntry + 可扩展检索层
聊天自然连续 多轮上下文 + 消息队列
视觉沉浸 Compose + 深色主题 + 动效组件
可长期运行 WorkManager + Foreground Service
可自由接模型 多 Provider + Custom API
可本地化 LiteRT-LM 框架
可二次开发 feature/core 模块化架构

🏗 系统架构

总体分层

┌─────────────────────────────────────────────┐
│                    :app                     │
│ Application / Activity / Navigation / DI    │
└──────────────────────┬──────────────────────┘
                       │
┌──────────────────────▼──────────────────────┐
│                 feature:*                   │
│ chat / companion / groupchat / memory       │
│ profile / settings / localmodel / wechat    │
│ notification / qqbot / backup / coffee      │
└──────────────────────┬──────────────────────┘
                       │
┌──────────────────────▼──────────────────────┐
│                   core:*                    │
│ common / database / domain / network        │
│ security(stub) / ui-common                  │
└─────────────────────────────────────────────┘

依赖方向

:app
  └─→ feature modules
        └─→ core modules

规则:

  • feature 模块之间不直接依赖。
  • core 模块不依赖 feature。
  • core:domain 定义跨模块接口。
  • ServiceRegistry 负责运行时绑定。
  • :app 保持轻量,只做入口、导航和服务注册。

数据流

UI Event
  ↓
ViewModel
  ↓
Repository / Service
  ↓
Room / Network / Local Model
  ↓
StateFlow / Flow
  ↓
Compose UI

📦 模块说明

模块 责任
:app 应用入口、主 Activity、导航图、ServiceRegistry 绑定
core:common 通用工具、日志、设置、内容安全基础组件
core:database Room 数据库、Entity、DAO、Repository
core:domain 跨模块接口和领域数据类
core:network AI 服务网关、Provider 适配、TTS/STT 网络能力
core:security 开源版 no-op 兼容 stub,可由下游替换
core:ui-common 通用 Compose 组件、主题、动效、视觉组件
feature:chat 聊天界面、聊天 ViewModel、语音通话等
feature:companion 伴侣创建、编辑、资料维护
feature:groupchat 群聊和群组管理
feature:memory 记忆管理和记忆展示
feature:profile 主页、用户资料、统计、入口卡片
feature:settings 设置页、API 配置、主题和模型配置入口
feature:localmodel 本地模型管理和推理服务框架
feature:notification 通知、保活、WorkManager 后台任务
feature:wechat 微信相关服务框架
feature:qqbot QQ Bot 服务框架
feature:backup 数据备份相关能力
feature:coffee 业务扩展示例模块

🛠 技术栈

分类 技术
Language Kotlin 2.2.10
UI Jetpack Compose, Material 3
Architecture Feature-based modular architecture
Reactive Kotlin Coroutines, Flow, StateFlow
Database Room
Network Retrofit, OkHttp
Serialization kotlinx.serialization
Image Coil
Background WorkManager, Foreground Service
Local AI LiteRT-LM integration framework
Min SDK 26
Target SDK 35
Compile SDK 35
JDK 17
Build Gradle 9.4.1, AGP 9.2.1

⚡ 快速开始

1. 克隆

git clone https://github.com/Sylvara-Lin/LianYu-app.git
cd LianYu-app

2. 打开项目

使用 Android Studio 打开根目录。

建议环境:

  • Android Studio 新版本。
  • JDK 17。
  • Android SDK 35。
  • Gradle 使用仓库自带 wrapper。

3. 构建 Debug

./gradlew :app:assembleDebug

如果你修改了 core 模块或 Gradle 依赖:

./gradlew clean :app:assembleDebug

4. 安装运行

生成 APK 后可在:

app/build/outputs/apk/debug/

找到 debug 包。


🔑 API 配置

开源版默认没有任何可用 API。

注意:开源版中部分中继相关 UI 只是占位展示,不包含内置连接、内置账号、内置 key 分发或作者服务器。实际可用服务需要你自行配置。

你需要在 App 设置页中配置:

字段 说明
Provider 选择 OpenAI / DeepSeek / Gemini / Custom 等
Base URL API 服务地址
API Key 你自己的服务密钥
Model 模型名称
Format Hint 自定义接口格式提示
Temperature 回复随机性
Max Tokens 最大输出 token

OpenAI-compatible 示例

Base URL: https://api.openai.com/v1/
Model: gpt-4o-mini
API Key: sk-********************************

自定义模型网关

如果你的后端兼容 Chat Completions,可以使用:

Provider: Custom
Base URL: https://your-domain.example/v1/
Model: your-model-name

请不要把真实 API Key 写入源码、README、Issue 或 PR。


🤖 本地模型

项目保留本地模型框架,适合继续扩展端侧推理:

  • 模型管理器。
  • 下载状态。
  • SHA-256 校验。
  • 激活状态持久化。
  • LocalAiService 单例。
  • Native Engine 生命周期管理。

本地模型适合:

  • 离线回复。
  • 安全分类。
  • 小模型角色扮演。
  • 边缘设备推理实验。

注意:大模型文件体积较大,建议使用 Git LFS、Release Assets 或应用内下载,不建议直接长期放在 Git 普通对象中。


🔐 数据与隐私

Public Edition 的原则:

  • 不内置个人服务器。
  • 不内置 API key。
  • 不上传用户聊天内容到项目作者服务器。
  • 不包含私有请求签名方 案。
  • 不包含私有加密壳和反调试实现。

你的分支可以自行接入:

  • 本地数据库加密。
  • 自有后端网关。
  • 企业密钥管理。
  • 证书 pinning。
  • 风控和审计。

仓库里的 core:security 是兼容 stub,不代表生产安全方案。


🧪 开发与质量

常用命令:

# Debug 构建
./gradlew :app:assembleDebug

# 清理后构建
./gradlew clean :app:assembleDebug

# 查看 app 依赖
./gradlew app:dependencies --configuration implementation

# 运行可用测试
./gradlew test

建议 PR 提交前至少运行:

./gradlew :app:assembleDebug

🧑‍💻 开发规范

模块边界

  • 新功能优先放入 feature:*
  • 通用 UI 放入 core:ui-common
  • 通用工具放入 core:common
  • 跨模块接口放入 core:domain
  • 不要让 feature 直接依赖另一个 feature。

状态管理

推荐:

StateFlow -> Compose collectAsState()
SharedFlow -> 一次性事件
ViewModel -> 用户行为入口
Repository -> 数据读写

API Key

禁止提交:

  • local.properties
  • .env
  • keystore
  • jks
  • 真实 API key
  • 真实 token
  • 私有服务器密钥

📱 截图

当前仓库没有附带完整截图集。你可以在自己的分支中添加:

docs/screenshots/home.png
docs/screenshots/chat.png
docs/screenshots/settings.png
docs/screenshots/profile.png

推荐 README 展示:

Home Chat Settings Profile
screenshot screenshot screenshot screenshot

🗺 路线图

Short Term

  • 补充正式 LICENSE。
  • 增加截图和演示视频。
  • 提供 API 配置示例文档。
  • 增加贡献指南。
  • 整理 Issue 模板和 PR 模板。

Mid Term

  • 抽象 Provider 插件化接口。
  • 增强本地模型下载和管理体验。
  • 增加角色卡导入导出。
  • 增加记忆检索和向量召回。
  • 增加多语言文档。

Long Term

  • 构建插件生态。
  • 支持更多端侧模型。
  • 支持桌面端或跨端共享数据。
  • 建立社区角色市场。
  • 完善自动化测试和 CI。

❓ FAQ

这个仓库能直接聊天吗?

可以运行 App,但需要你自己配置可用的 AI API。

是否包含作者的服务器?

不包含。Public Edition 已移除私有服务器和内置中继配置。

是否包含加固壳?

不包含。安全壳、VMP、反调试、私有 Native 实现已移除。

为什么还有 core:security

为了保持工程结构和兼容调用点,开源版保留 no-op stub。你可以替换为自己的安全实现。

GitHub 提示大文件怎么办?

部分模型和 AAR 体积较大。后续可以迁移到 Git LFS 或 Release Assets。


🤝 贡献方式

欢迎任何形式的贡献:

  • Bug report
  • Feature request
  • UI 优化
  • 文档补充
  • Provider 适配
  • 本地模型实验
  • 架构重构建议

推荐流程:

  1. Fork 仓库。
  2. 创建分支。
  3. 保持改动聚焦。
  4. 本地运行构建。
  5. 提交 PR 并说明测试结果。

💖 贡献者


Clove.
2164312714-svg

17rrr
17rrr

着魔
3092054815-byte

doromy118
doromy118

HI-IR
HI-IR

jianghep
jianghep

玖熙
jiuicy

liuwanwan
liuwanwan1

GGY
summerpalace2

祈愿小苏
Vespera-Su

whitequeen306
whitequeen306

Sylvara-Lin
Sylvara-Lin

更多信息见 CONTRIBUTORS.md

GitHub 右侧自动 Contributors 列表由真实提交作者生成。README 中的贡献者区用于稳定展示社区成员。


📄 License

本项目采用 Apache License 2.0 开源协议。

Apache-2.0 是较严谨且适合工程化项目的宽松协议,允许使用、修改、分发和商业使用,同时包含明确的版权保留、专利授权、免责声明和责任限制条款。

请阅读:


LianYu / 恋语
Made with 💗 for AI companion app builders.

Apps
About Me
GitHub: Trinea
Facebook: Dev Tools
AI Daily Digest