Files
chatpapers/docs/newidea/DUAL_MODE_PRD.md
T
2026-08-29 22:13:55 +08:00

486 lines
23 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# ChatPapers 双模式集成需求规格说明书
| 字段 | 内容 |
|------|------|
| 文档名称 | 双模式集成 PRD(方案 A) |
| 插件名称 | ChatPapers for Zotero |
| 新增模式 | BanDu(伴读) |
| 文档版本 | v0.1 |
| 状态 | 草案 |
| 目标平台 | Zotero 9macOS / Windows |
| 关联文档 | [ChatPapers 需求](../requirements.md)、[BanDu 策划](./PLAN.md)、[BanDu PRD](./PRD.md)、[BanDu 架构](./ARCHITECTURE.md) |
> **本文档定位**:在**不拆分、不 fork** 的前提下,将 BanDu(伴读)作为 ChatPapers 插件的**第二种工作模式**纳入同一产品。
> 原有 ChatPapers 对话模式的需求以 [requirements.md](../requirements.md) 为准,本文仅描述**集成策略、共享边界、伴读模式增量需求**。
---
## 1. 产品概述
### 1.1 一句话定位
**ChatPapers** = Zotero 内的 AI 论文助手:**对话模式**用于即时问答与总结,**伴读模式**用于 AI 老师式音频授课与知识沉淀——同一插件、同一论文库、两种互补工作流。
### 1.2 双模式心智模型
```
┌─────────────────────────────────┐
│ ChatPapers for Zotero │
│ (一个插件 · 一套 Zotero 集成) │
└───────────────┬─────────────────┘
┌─────────────────────┴─────────────────────┐
│ │
▼ ▼
┌──────────────────────┐ ┌──────────────────────┐
│ 模式 A:对话 Chat │ │ 模式 B:伴读 BanDu │
│ 「我现在想问什么」 │ │ 「请老师先备课再讲」 │
├──────────────────────┤ ├──────────────────────┤
│ 即时问答 / 一键总结 │ │ 备课 → 听课 → 报告 │
│ 文字流式回复 │ │ 整体讲解 / 逐段精读 │
│ 选区提问 │ │ TTS 音频 + 播放器 │
│ 会话 JSON 持久化 │ │ Lecture SQLite 缓存 │
└──────────────────────┘ └──────────────────────┘
│ │
└─────────────────────┬─────────────────────┘
共享:PDF 附件 · LLM 配置 · 子笔记 · BibTeX
```
### 1.3 为什么采用双模式(方案 A)
| 考量 | 说明 |
|------|------|
| 用户价值互补 | Chat 适合「带着问题读」;伴读适合「先听一遍再精读」 |
| 工程复用 | LLM 客户端、PDF 附件解析、笔记回写、引用导出、设置页已在 Chat 模式实现 |
| 安装成本 | 用户只装一个插件,不重复配置 Provider / API Key |
| 数据闭环 | 伴读报告与 Chat 笔记均写入同一 Zotero Item,写作时可统一检索 |
| 品牌演进 | 短期保留 ChatPapers 主品牌;伴读作为子品牌「BanDu」在 UI 内露出 |
### 1.4 产品目标(伴读模式增量)
| 目标 | 说明 |
|------|------|
| G-B1 降低读论文门槛 | 10–20 分钟整体讲解把握论文核心 |
| G-B2 支持深度精读 | 逐段三层讲解 + 按需逐句解释 |
| G-B3 闭环沉淀知识 | 伴读报告、问答、重点标记写入 Zotero 子笔记 |
| G-B4 零迁移成本 | 论文库沿用 Zotero,PDF 不出本地 |
### 1.5 成功指标(伴读 MVP 验证期)
| 指标 | 目标 |
|------|------|
| 整体讲解完成率 | ≥ 60% 启动后听完 |
| 单篇备课可听时间 | 摘要 + beats 生成后 ≤ 2 min 可开听 |
| 问答首字延迟 | ≤ 3 s(文字) |
| 解析可用率 | 典型 8 页 NLP 论文 ≥ 90% 段落无需手动修正 |
| 模式切换无摩擦 | 同一 Item 可在 Chat / 伴读 pane 间切换,互不丢状态 |
---
## 2. 范围定义
### 2.1 一期包含(伴读模式 MVP)
- 在现有 ChatPapers 插件内新增 Item pane **「伴读」** 标签页(与现有 **「ChatPapers」** 标签页并存)
- 读取 Zotero PDF 附件 → 本地结构化解析 → 段落树
- 备课流水线:全文摘要 + 整体讲解 beats + 逐段三层讲解;增量备课
- TTS 合成 + 本地 mp3 缓存
- 播放器:整体讲解 / 逐段精读、跳播、语速、文字面板高亮、PDF 页跳转
- 文字提问(锚定 beat / 段落 / 句子 / 全局)→ 文字 + 语音回答
- 伴读报告 + 参考文献卡片 → Zotero 子笔记
- 伴读专属设置项(TTS、教师风格);LLM 设置与 Chat 模式**共享**
- 断点续播、本地 Lecture 缓存
### 2.2 一期明确不包含
| 功能 | 计划版本 | 备注 |
|------|----------|------|
| 语音输入(ASR)、barge-in | v1.1 | 两模式均不涉及 |
| 章节边界软提示、难点句清单 | v1.1 | 伴读专属 |
| PDF viewer 内段落级高亮 | v1.1 | 伴读专属 |
| 检验模式(老师考读者) | v2 | 伴读专属 |
| Chat 模式重构或合并 UI | — | Chat 保持独立 pane |
| 独立 BanDu 插件安装包 | — | 不 fork |
### 2.3 共享能力边界(不重复建设)
以下能力由 ChatPapers 基座提供,伴读模式**直接复用**,不在伴读 MVP 中重写:
| 共享模块 | 现有实现 | 伴读用法 |
|----------|----------|----------|
| Item pane 注册机制 | `readerPane.ts` | 注册第二个 section |
| PDF 附件定位 | `extractor.findPdfAttachment` | 获取路径;伴读另需 file hash |
| LLM 流式客户端 | `llm/client.ts` | 备课 + 问答 |
| Provider 预设 | `llm/providers.ts` | 共享同一套 LLM 配置 |
| 子笔记创建 | `zotero/notes.ts` | 伴读报告写入 |
| BibTeX / 引用导出 | `zotero/citeExport.ts` | 参考文献卡片 |
| PDF 选区读取 | `pdf/selection.ts` | 「解释这句」入口 |
| 偏好设置框架 | `ui/prefs.ts` | 扩展 TTS / 教师风格分组 |
| Markdown 渲染 | `utils/markdown.ts` | 报告预览(可选) |
### 2.4 模式专属能力(伴读新建)
| 模块 | 说明 | 代码归属(建议) |
|------|------|------------------|
| 结构化 PDF 解析 | MinerU → 段落树 | `src/modules/bandu/infrastructure/pdf/` |
| 备课流水线 | 摘要 / beats / 三层讲解 | `src/modules/bandu/application/` |
| TTS 客户端 | mp3 + timestamps | `src/modules/bandu/infrastructure/tts/` |
| SQLite 存储 | Lecture / 进度 / Q&A | `src/modules/bandu/infrastructure/storage/` |
| RAG 检索 | FTS5 段落检索 | `src/modules/bandu/infrastructure/rag/` |
| 播放器 UI | `<audio>` + 状态机 | `src/modules/bandu/ui/` |
| 伴读 pane | BanduPane | `src/modules/bandu/ui/banduPane.ts` |
---
## 3. 用户故事
### 3.1 跨模式用户故事
| ID | 作为… | 我想要… | 以便… | 优先级 |
|----|-------|---------|-------|--------|
| US-X01 | 研究者 | 在同一篇论文上切换「对话」与「伴读」 | 先听课再针对性 Chat,或 Chat 后再系统听课 | P1 |
| US-X02 | 研究者 | 只配置一次 LLM API Key | 两种模式共用,降低设置成本 | P0 |
| US-X03 | 研究者 | Chat 笔记与伴读报告都挂在同一 Item 下 | 写论文时在 Zotero 内统一搜索 | P0 |
### 3.2 伴读模式用户故事(P0)
| ID | 作为… | 我想要… | 以便… |
|----|-------|---------|-------|
| US-B01 | 研究者 | 选中论文后一键「开始备课」 | AI 先读完整篇再讲解 |
| US-B02 | 研究者 | 选择「整体讲解」收听 | 20 分钟内把握核心 |
| US-B03 | 研究者 | 选择「逐段精读」按章节听 | 深入理解方法与实验 |
| US-B04 | 研究者 | 播放中随时文字提问 | 不打断思路又能澄清疑问 |
| US-B05 | 研究者 | 选中难句点「解释这句」 | 快速理解长难句 |
| US-B06 | 研究者 | 听完后生成伴读报告到 Zotero | 写论文时搜索调出素材 |
| US-B07 | 研究者 | 二次打开同一篇秒进、离线重听 | 不重复花 API 费用 |
| US-B08 | 研究者 | 标记重点段落 | 报告汇总关心部分 |
| US-B09 | 研究者 | 配置 TTS API Key | 控制成本与音质 |
---
## 4. 界面与交互需求
### 4.1 Item Pane 双标签布局
```
Zotero Item Pane(同一 PDF 条目)
├── [ChatPapers] ← 现有:对话 / 总结 / 存笔记
└── [伴读 BanDu] ← 新增:备课 / 播放 / 报告
```
| ID | 需求 | 优先级 | 验收标准 |
|----|------|--------|----------|
| UI-001 | 两个 pane section 独立注册、独立生命周期 | P0 | 切换 tab 不互相 destroy 对方状态 |
| UI-002 | 伴读 pane 在无 PDF 时禁用并提示 | P0 | 与 Chat pane 行为一致 |
| UI-003 | 伴读 pane 头部展示论文标题 + 备课状态 | P0 | 见 §4.3 状态文案 |
| UI-004 | 设置页分「通用 LLM」「ChatPapers」「伴读」三个分组 | P0 | LLM 配置只填一次 |
| UI-005 | 伴读库窗口(全库状态列表) | P1 | MVP 可简版或后置 |
### 4.2 伴读页布局(BanDu Pane
布局沿用 [PLAN.md §3.6](./PLAN.md) wireframe,关键区域:
- 模式切换:整体讲解 | 逐段精读
- 播放控制:▶ ⏸ ⏮ ⏭ 1x / 1.5x / 2x
- 左侧:单位列表(beats 或段落),含已听 / 未听 / ★ 标记
- 右侧:当前讲解文本 + 原文对照 + 提问区
- 底部/侧栏:「生成报告」「看原文(跳 PDF 页)」
### 4.3 状态展示
| 状态 | 用户可见文案 |
|------|--------------|
| 未备课 | 「点击开始备课」 |
| 解析中 | 「正在读取论文… {percent}%」 |
| 备课中(可部分播放) | 「整体讲解已就绪,逐段讲解生成中 {n}/{total}」 |
| 已备课 | 「老师已备课 ✓」 |
| 播放中 | 当前单位高亮 + 进度条 |
| 离线可听 | 「已缓存,离线可播放」 |
### 4.4 模式间交互原则
- **不强制串联**:用户可只用 Chat、只用伴读,或组合使用
- **不自动同步上下文**:Chat 会话历史不自动注入伴读问答(v1.1 可评估「从 Chat 导入问题」)
- **笔记类型区分**:Chat 存笔记标题前缀 `ChatPapers:`;伴读报告 `BanDu 伴读报告:`,避免覆盖
- **读者发起,系统不打扰**:伴读播完不弹「有疑问吗」(与 BanDu 策划一致)
---
## 5. 功能需求
### 5.1 插件集成(双模式)
| ID | 需求描述 | 优先级 | 验收标准 |
|----|----------|--------|----------|
| DM-001 | 伴读作为 ChatPapers 插件内独立模块加载,不新增 addon ID | P0 | 单一 `.xpi`manifest 不变 |
| DM-002 | `hooks.ts` 启动时同时注册 Chat pane 与 Bandu pane | P0 | 两 pane 均可用 |
| DM-003 | 模块代码物理隔离:`src/modules/bandu/``src/modules/ui/chatView.ts` 分离 | P0 | 无循环依赖 |
| DM-004 | 伴读不得修改 Chat 模式现有行为与 API | P0 | Chat 回归测试通过 |
### 5.2 PDF 解析与段落树(伴读专属)
| ID | 需求描述 | 优先级 | 验收标准 |
|----|----------|--------|----------|
| FR-B010 | 本地解析 PDF,输出章节 / 段落 / 要点三层结构 | P0 | 段落含唯一 ID、原文、页码、章节路径 |
| FR-B011 | 支持双栏、公式、表格的常见学术论文版式 | P0 | Dogfooding 3 类典型论文可用 |
| FR-B012 | 解析结果持久化至 SQLitekey = attachment ID + 文件哈希 | P0 | PDF 未变时跳过重复解析 |
| FR-B013 | 解析进度与错误对用户可见 | P0 | 扫描版等给出可行动提示 |
| FR-B014 | 文字面板展示解析原文供核对 | P1 | 用户可发现 bad case |
> **与 Chat 模式关系**Chat 继续使用 `PDFWorker` 纯文本提取;伴读使用 MinerU 结构化解析。两路径并存,互不替换。
### 5.3 备课(Lecture 生成)
| ID | 需求描述 | 优先级 | 验收标准 |
|----|----------|--------|----------|
| FR-B020 | 生成全文摘要:问题 / 方法 / 结果 / 局限 | P0 | 四字段非空、中文 |
| FR-B021 | 生成 815 个整体讲解 beat,按教学逻辑排序 | P0 | 每 beat 含讲解文本、类型、refs[] |
| FR-B022 | beat 的 refs[] 生成后校验,非法引用剔除 | P0 | 无效 refs 的 beat 降级 |
| FR-B023 | 每个 beat 含三要素:为什么重要 / 例子或数字 / 易混淆点 | P0 | Prompt 约束 |
| FR-B024 | 每个段落生成三层讲解 | P0 | 讲了什么 / 怎么理解 / 全文定位 |
| FR-B025 | 增量备课:摘要 + beats 完成后即可播放整体讲解 | P0 | 无需等逐段全部完成 |
| FR-B026 | 逐段讲解后台继续生成,UI 显示进度 | P0 | 新段落就绪后可播放 |
| FR-B027 | Lecture 本地缓存,二次打开不重复生成 | P0 | 除非哈希变化或强制重备 |
### 5.4 TTS 与音频
| ID | 需求描述 | 优先级 | 验收标准 |
|----|----------|--------|----------|
| FR-B030 | 讲解文本按 beat / 段落分片合成 mp3 并本地缓存 | P0 | 路径与 Lecture 单元绑定 |
| FR-B031 | 英文论文音频为中文讲解 | P0 | 自动检测论文语言 |
| FR-B032 | 保存 word timestamps(若 TTS 提供) | P0 | 用于文字高亮 |
| FR-B033 | 无 timestamps 时降级句子级 / 段落级高亮 | P0 | UI 不崩溃 |
| FR-B034 | 问答回答支持 TTS 播放 | P0 | 每轮 Q&A 可重播 |
| FR-B035 | TTS 配置在设置页「伴读」分组,与 LLM 配置分离 | P0 | Chat 模式不依赖 TTS |
### 5.5 播放器
| ID | 需求描述 | 优先级 | 验收标准 |
|----|----------|--------|----------|
| FR-B040 | 模式切换:整体讲解 / 逐段精读 | P0 | 列表与播放单位正确 |
| FR-B041 | 播放 / 暂停 / 上一单位 / 下一单位 / 1x·1.5x·2x | P0 | 与 `<audio>` 同步 |
| FR-B042 | 单位列表展示已听 / 未听;断点续播 | P0 | 恢复正确单位 |
| FR-B043 | 整体模式:beat 文本 + refs 来源段落高亮 | P0 | — |
| FR-B044 | 逐段模式:原文 + 三层讲解,高亮跟随音频 | P0 | 至少句子级 |
| FR-B045 | 「看原文」跳转 PDF 对应页 | P0 | 页码与段落 page 一致 |
| FR-B046 | 点击列表任意行跳播 | P0 | Seek 到该单位起始 |
| FR-B047 | 段落「重点标记」★ | P0 | 写入进度并进入报告 |
### 5.6 问答(伴读上下文)
| ID | 需求描述 | 优先级 | 验收标准 |
|----|----------|--------|----------|
| FR-B050 | 文字提问,锚定 beat / 段落 / 句子 / 全局 | P0 | 上下文含锚点原文与讲解 |
| FR-B051 | 选中句子触发「解释这句」 | P0 | 翻译 + 句法 + 上下文作用 |
| FR-B052 | 回答基于 RAG:当前单位 + 摘要 + 检索相关段 | P0 | 长论文不整篇塞入 Prompt |
| FR-B053 | 回答文字流式显示,随后 TTS | P0 | 首 token ≤ 3 s |
| FR-B054 | Q&A 写入本地记录并纳入伴读报告 | P0 | 可按段落分组 |
> **与 Chat 模式关系**:伴读问答使用独立 `qa_record` 表与锚点模型;不复用 Chat 的 `sessions/*.json`,避免数据结构冲突。
### 5.7 伴读报告与参考文献
| ID | 需求描述 | 优先级 | 验收标准 |
|----|----------|--------|----------|
| FR-B060 | 手动或条件触发「生成报告」 | P0 | 更新策略:同名 Note 覆盖 |
| FR-B061 | 报告结构:速览 / 收听 / 问答 / 重点 / 参考文献卡片 | P0 | Markdown 结构固定 |
| FR-B062 | 参考文献卡片含 BibTeX | P0 | 复用 `citeExport` |
| FR-B063 | Note 标题格式 `BanDu 伴读报告: {title}` | P0 | 与 Chat 笔记可区分 |
### 5.8 设置(共享 + 专属)
| ID | 需求描述 | 优先级 | 验收标准 |
|----|----------|--------|----------|
| FR-S010 | LLM Provider / Base URL / API Key / Model | P0 | **共享**,两模式只读同一 prefs |
| FR-S011 | Chat 专属:system prompt、summary prompt、answer language | P0 | 已有,不变 |
| FR-S012 | 伴读专属:TTS Provider / API Key / 音色 | P0 | 新增 prefs 前缀或分组 |
| FR-S013 | 伴读专属:教师风格预设(简洁 / 详细) | P1 | 仅影响新生成内容 |
| FR-S014 | 数据流向说明(哪些文本发往外网) | P0 | 设置页固定文案 |
---
## 6. 非功能需求
| ID | 类别 | 需求描述 | 指标 |
|----|------|----------|------|
| NFR-D001 | 隔离性 | 伴读模块崩溃不影响 Chat pane 可用 | 异常捕获 + 独立 try/catch 边界 |
| NFR-D002 | 性能 | 8 页论文本地解析 | ≤ 3 min |
| NFR-D003 | 性能 | 缓存命中后打开伴读页 | ≤ 2 s 可播放 |
| NFR-D004 | 成本 | 单篇 8 页首次备课总 API 成本 | ≤ ¥10 |
| NFR-D005 | 隐私 | PDF 不上传;段落文本按请求发送 | Local-first |
| NFR-D006 | 离线 | 已缓存 Lecture + mp3 可离线播放 | 除问答外不依赖网络 |
| NFR-D007 | 可维护性 | UI / 领域 / Zotero 适配三层分离 | 见 ARCHITECTURE.md |
| NFR-D008 | 存储 | 伴读数据目录 `{Profile}/chatpapers/bandu/` | 与 `sessions/` 并列,不混用 |
| NFR-D009 | 兼容性 | Zotero 9.x | 与现有 manifest 一致 |
---
## 7. 数据与存储策略
### 7.1 目录布局
```
{ZoteroProfile}/chatpapers/
├── sessions/ # Chat 模式(已有):*.json
└── bandu/ # 伴读模式(新增)
├── bandu.db # SQLite
└── audio/
└── {cacheKey}/
└── {unitId}.mp3
```
### 7.2 缓存键
```
cacheKey = SHA256(attachmentId + "|" + fileHash)
```
Chat 模式继续使用 `itemKey + attachmentKey` 会话文件;伴读使用 `cacheKey`**互不干扰**。
### 7.3 笔记命名约定
| 来源 | Note 标题前缀 | 覆盖策略 |
|------|---------------|----------|
| ChatPapers | `ChatPapers:` 或用户自定义 | 每次新建或用户选择 |
| BanDu | `BanDu 伴读报告:` | 同名更新,避免笔记爆炸 |
---
## 8. 技术集成约束
### 8.1 建议目录结构
```
src/
├── hooks.ts # 注册双 pane
├── modules/
│ ├── ui/
│ │ ├── readerPane.ts # 注册 Chat + Bandu section
│ │ ├── chatView.ts # Chat 模式(不动)
│ │ └── prefs.ts # 扩展伴读设置分组
│ ├── llm/ # 共享
│ ├── pdf/
│ │ ├── extractor.ts # 共享:附件定位
│ │ └── selection.ts # 共享:选区
│ ├── zotero/ # 共享:notes, citeExport
│ ├── storage/
│ │ └── sessions.ts # Chat 专属(不动)
│ └── bandu/ # 伴读专属(新建)
│ ├── ui/
│ │ ├── banduPane.ts
│ │ └── player/
│ ├── application/
│ ├── domain/
│ └── infrastructure/
│ ├── pdf/ # MinerU 封装
│ ├── tts/
│ ├── storage/ # SQLite
│ └── rag/
```
### 8.2 依赖规则
```
bandu/* ──可引用──► llm/, pdf/extractor, pdf/selection, zotero/, utils/
chatView ──不可引用──► bandu/* (Chat 保持独立,避免耦合)
bandu/* ──不可引用──► chatView, storage/sessions
```
### 8.3 Phase 0 验证项(开工前 Go / No-Go
| # | 验证项 | 通过标准 | 阻塞 MVP |
|---|--------|----------|----------|
| P0-1 | 第二 Item pane section 注册 | 与 Chat pane 并存无冲突 | 是 |
| P0-2 | MinerU 解析 3 篇论文 | 段落可用率 ≥ 80% | 是 |
| P0-3 | Zotero 9 插件内 SQLite 读写 | CRUD 正常 | 是 |
| P0-4 | `<audio>` 长音频播放 | 10 min+ 无泄漏 | 是 |
| P0-5 | TTS 中文样本 + timestamps | 自然度可接受;无则确认降级 | 否 |
---
## 9. 版本与路线图
### 9.1 与现有 ChatPapers 版本关系
| 插件版本 | Chat 模式 | 伴读模式 |
|----------|-----------|----------|
| v0.2.x(当前) | 对话 / 总结 / 多 PDF | — |
| v0.3.0 | 维护 | Phase 0 POC |
| v0.4.0 v0.5.0 | 维护 | M1M2:解析 + 备课 + TTS + 播放器 |
| v0.6.0 | 维护 | M3M4:问答 RAG + 报告 + dogfooding |
| v1.0.0 | 稳定 | 伴读 MVP 功能完整 |
### 9.2 伴读模式开发里程碑
| 阶段 | 时间 | 交付 |
|------|------|------|
| Phase 0 | 第 0 周 | 三项 POC + 双 pane 骨架占位 |
| M1 | 第 12 周 | MinerU 解析 + 段落树 + 备课流水线(纯文本) |
| M2 | 第 34 周 | TTS + 播放器双模式 + 高亮 |
| M3 | 第 56 周 | 锚定问答 RAG + 伴读报告回写 |
| M4 | 第 7–8 周 | 增量缓存 / 断点续播 / 设置 / dogfooding 10 篇 |
---
## 10. MVP 验收清单(伴读模式)
- [ ] 安装单一 ChatPapers `.xpi`Item pane 同时出现 ChatPapers 与伴读两个标签
- [ ] LLM 配置一次,两模式均可调用
- [ ] 对 1 篇 8 页英文 PDF 完成:解析 → 备课 → 整体讲解播放
- [ ] 切换到逐段精读并完成至少 1 个章节播放
- [ ] 提问 3 次(含 1 次全局 + 1 次逐句),文字与语音均有
- [ ] 标记 2 个重点段落
- [ ] 生成伴读报告至 Zotero 子笔记,含 BibTeX;与 Chat 笔记共存不覆盖
- [ ] 关闭 Zotero 再打开,缓存命中、断点续播
- [ ] 断网重听已缓存内容
- [ ] Chat 模式原有功能回归通过(对话 / 总结 / 存笔记)
---
## 11. 术语表
| 术语 | 定义 |
|------|------|
| Chat 模式 | ChatPapers 现有对话 / 总结工作流 |
| 伴读模式 / BanDu | 本插件内第二种工作流:备课 → 听课 → 报告 |
| 双模式 | 同一插件、两个 Item pane、共享 LLM 与 Zotero 集成 |
| Lecture | 一次备课产物:摘要 + beats + 逐段讲解 |
| Beat | 整体讲解播放单位,含 refs[] |
| 共享层 | llm / zotero / pdf 附件 / utils,两模式复用 |
---
## 12. 文档关系
```
docs/requirements.md ChatPapers 对话模式需求(不变)
docs/newidea/
├── PLAN.md BanDu 产品策划(参考)
├── PRD.md BanDu 独立 PRD(参考)
├── ARCHITECTURE.md BanDu 技术架构(参考)
└── DUAL_MODE_PRD.md ★ 本文:双模式集成需求(实施依据)
```
**实施优先级**:开发伴读功能时,以**本文**为集成需求主文档;细节 Prompt、数据表、状态机见 ARCHITECTURE.md;产品动机与竞品见 PLAN.md。
---
## 13. 待决事项
| 事项 | 负责人 | 备注 |
|------|--------|------|
| TTS 提供商选型 | 技术 | Phase 0 |
| SQLite 实现方案(better-sqlite3 vs sql.js | 技术 | Phase 0 |
| 伴读 pane 图标与 l10n 命名(BanDu / 伴读) | 产品 | M1 前 |
| Chat → 伴读上下文导入是否做 v1.1 | 产品 | MVP 不做 |
| 插件对外宣传:单品牌 vs 双品牌露出 | 产品 | MVP 后 |
---
## 14. 文档修订记录
| 版本 | 日期 | 说明 |
|------|------|------|
| v0.1 | 2026-08-29 | 初稿:方案 A 双模式集成需求 |