This commit is contained in:
2026-04-24 16:02:16 +08:00
commit 1d6f0cc370
66 changed files with 9990 additions and 0 deletions

View File

@@ -0,0 +1,167 @@
# 直播回放文字稿故事提取工具 — 方案设计文档
## 一、项目概述
### 1.1 背景
手头有大量直播回放导出的文字稿DOCX 格式),其中散落着一些个人生活故事(家长里短类),需要用 AI 自动提取整理,并与讲述者个人信息匹配,最终输出为独立的 DOCX 文档。
### 1.2 目标
构建一个 **Web 端可复用工具**,支持:
- 批量上传和管理文字稿文件
- AI 自动提取故事(过滤讲课/知识点内容)
- 人工确认故事与讲述者的匹配关系
- 为每个讲述者生成独立 DOCX个人信息 + 照片 + 故事正文)
### 1.3 使用场景
- **部署环境:** 局域网
- **用户规模:** 多人使用
- **数据规模:** 20+ 份文字稿,每份上万行
---
## 二、需求分析
### 2.1 输入
| 输入类型 | 格式 | 说明 |
|----------|------|------|
| 直播回放文字稿 | DOCX | 每份上万行,口语化,混合讲课/知识点内容,无明确说话人标记 |
| 讲述者个人信息 | DOCX一人一个 | 包含姓名、照片等个人信息 |
### 2.2 处理要求
1. **故事提取:** 从文字稿中识别并提取个人生活故事(如家庭、情感、生活等),过滤掉纯讲课/知识点内容
2. **长文本切分:** 上万行文字稿需智能切分,确保不截断完整故事(每个故事可能跨半小时到一小时,稀疏分布)
3. **匹配确认:** AI 提取故事后,由人工在界面上确认每个故事对应的讲述者
4. **文档生成:** 按简洁模板生成最终 DOCX
### 2.3 输出
每个讲述者一份 DOCX 文档,结构为:
```
┌─────────────────────────┐
│ 个人信息(含照片) │
├─────────────────────────┤
│ │
│ 故事正文 │
│ │
└─────────────────────────┘
```
### 2.4 扩展性要求
- LLM 可替换(支持升级/切换不同模型)
- 后续可扩展文章搜索引擎等功能
---
## 三、系统架构
```
┌─────────────────────────────────────────────────┐
│ 浏览器前端 │
│ ┌──────────┐ ┌──────────┐ ┌──────────────────┐ │
│ │ 文件管理 │ │ 故事提取 │ │ 匹配确认 & 导出 │ │
│ └──────────┘ └──────────┘ └──────────────────┘ │
└────────────────────┬────────────────────────────┘
│ HTTP API
┌────────────────────┴────────────────────────────┐
│ Python 后端 (FastAPI) │
│ ┌──────────┐ ┌──────────┐ ┌──────────────────┐ │
│ │ 文件处理 │ │ LLM 服务 │ │ DOCX 生成 │ │
│ └──────────┘ └──────────┘ └──────────────────┘ │
│ ┌──────────┐ ┌──────────┐ │
│ │ 任务队列 │ │ 数据存储 │ │
│ └──────────┘ └──────────┘ │
└─────────────────────────────────────────────────┘
```
---
## 四、用户交互流程
### Step 1上传文件
- 上传文字稿 DOCX支持批量显示上传列表
- 上传讲述者信息 DOCX支持批量显示上传列表 + 预览)
### Step 2提取故事
- 选择要处理的文字稿(可多选)
- 点击"开始提取",显示进度
- LLM 实时返回提取结果
- 展示故事列表(摘要 + 原文定位)
### Step 3匹配讲述者
- 左侧:故事列表
- 右侧:讲述者列表
- 拖拽/下拉匹配(或 AI 推荐候选)
- 确认匹配关系
### Step 4预览 & 导出
- 预览最终 DOCX 效果
- 单个导出 / 批量导出
- 下载 ZIP 包
---
## 五、技术栈
| 层级 | 技术 | 理由 |
|------|------|------|
| **前端** | Vue 3 + Element Plus | 组件丰富、中文生态好、拖拽匹配等交互容易实现 |
| **后端** | FastAPI | 异步支持好、自带 API 文档、适合 AI 任务 |
| **LLM** | 抽象接口层,先支持 OpenAI 兼容 API | 后续可无缝切换国产模型/本地模型 |
| **DOCX 处理** | python-docx | 读写 DOCX 的标准库 |
| **任务队列** | Celery + Redis或内置 asyncio | 20+ 文件处理需要异步,避免前端卡死 |
| **数据存储** | SQLite | 轻量、无需额外安装、局域网够用 |
| **部署** | Docker Compose | 一键启动,局域网分发方便 |
---
## 六、核心技术难点与解决方案
| 难点 | 解决方案 |
|------|----------|
| **长文本切分不截断故事** | 两阶段策略:先用 LLM 做"话题分段"(识别话题边界),再对每个话题段判断是否包含故事 |
| **故事 vs 知识点区分** | Prompt 工程 + Few-shot 示例,明确"个人生活故事"的定义和排除规则 |
| **无说话人标记** | 提取故事后展示摘要,由人工在 GUI 上匹配讲述者;后续可加入 AI 推荐候选 |
| **上万行文本的 LLM 上下文** | 话题分段后,每个段落在上下文窗口内处理;超长段落再按语义子段切分 |
---
## 七、项目结构
```
story-extractor/
├── frontend/ # Vue 3 前端
│ ├── src/
│ │ ├── views/ # 页面:文件管理、故事提取、匹配确认、导出
│ │ ├── components/ # 通用组件
│ │ └── api/ # 后端 API 调用
│ └── ...
├── backend/ # FastAPI 后端
│ ├── app/
│ │ ├── api/ # API 路由
│ │ ├── services/ # 业务逻辑
│ │ │ ├── extractor.py # 故事提取核心
│ │ │ ├── llm.py # LLM 抽象层
│ │ │ ├── docx_parser.py # DOCX 解析
│ │ │ └── docx_generator.py # DOCX 生成
│ │ ├── models/ # 数据模型
│ │ └── main.py
│ └── ...
├── docker-compose.yml
└── README.md
```
---
## 八、待确认事项
- [ ] LLM API 选型OpenAI / 国产模型 / 本地模型)
- [ ] 技术栈最终确认
- [ ] 开发节奏(先跑通核心流程 vs 逐步完善)
- [ ] 讲述者信息 DOCX 的具体字段结构(需看样例)
- [ ] 文字稿样例(需看实际内容以优化切分和提取策略)