📖

Narrator

CarrotS Narrator · Android 原生客户端

CarrotS 生态下的剧本演绎引擎——以剧本(Script)为核心承载大纲、角色、章节与 AI 推演, 通过 OpenAI 兼容 API 实现导演决策、角色依次发言、旁白收尾的三阶段演绎流程。

项目负责人: ✨ 星菱 👥 成员列表

📋 项目简介

Narrator 是 CarrotS 旗下的 Android 原生应用,定位为「剧本驱动的 AI 演绎客户端」。 应用以 Script(剧本)为顶层实体,向下串联大纲(Outline)、角色(Character)、章节(Chapter)、 推演(Deduction),并提供 AI 服务商配置、运行时主题切换、对话聚合与回收站等支撑能力。

应用采用 单 Activity + NavHostFragment 架构,底部 5 Tab 导航 + 侧边抽屉 + 子页面返回栈; 数据层使用 Room 数据库(scripts / ai_providers / dialogues 三表)与 文件系统(outline/{scriptId}/ 下分卷 / 章节 JSON)双轨持久化。 AI 调用封装为 AiService,支持 OpenAI 兼容 /chat/completions 的流式(SSE)与非流式两种模式。

Android Java 17 Jetpack Navigation Room OkHttp OpenAI 兼容 运行时主题 CarrotS

✨ 核心特性

🎬

剧本推演引擎

导演决策→角色依次发言→旁白收尾的三阶段演绎循环,支持发言顺序链与人类/AI 角色混合。

🧩

数据模型

Script / Outline / Character / Dialogue / AIProvider 五大实体,Room 持久化 + 文件分卷存储。

🤖

多服务商 AI

OpenAI 兼容 chat/completions,流式 SSE(含 reasoning_content 推理增量)与非流式双模式。

🎨

运行时主题

8 个内置主题 + 自定义主题,16 色 ThemeColors 数据模型,SharedPreferences 持久化激活主题。

📚

大纲分卷体系

剧本下挂多分卷、每卷多章节,章节级推演记录持久化到 outline/{scriptId}/{volumeId}/{chapterId}.json。

♻️

回收站与对话

删除剧本进入回收站可恢复;跨剧本对话历史聚合展示,独立抽屉入口。

🛠️ 技术栈

应用基于如下 AndroidX / 主流库构建(见 app/build.gradle.kts):

compileSdk 34 / minSdk 26 AppCompat 1.6.1 Material 1.11.0 ConstraintLayout 2.1.4 Navigation 2.7.6 DrawerLayout 1.2.0 Room 2.6.1 OkHttp 4.12.0 Gson 2.10.1 Lifecycle 2.7.0 versionName 0.9.0

📖 开发资源

🏠 应用壳结构

MainActivity 作为应用容器壳,由三部分组成:

┌──────────────────────────────────┐
│  ←  │  ≡  页面标题    标题栏        │  顶层页 ≡,子页 ← 返回
├──────────────────────────────────┤
│                                  │
│          Fragment 内容区域        │  ← NavHostFragment
│                                  │
├──────────────────────────────────┤
│  剧本 │ 角色 │ AI │ UI │ 设置     │  ← BottomNavigationView
└──────────────────────────────────┘
  ← 左滑(或点 ≡) →  右侧抽屉
  ┌──────────────────────┐
  │  CarrotS Narrator     │
  │  💬 对话              │
  │  📖 手册              │
  │  🗑️ 回收站            │
  └──────────────────────┘
💡 入口变更: v4 起移除 HomeFragment,startDestination 改为 scriptFragment(剧本列表), 抽屉移除「主页」项。