7.1 KiB
7.1 KiB
直播回放文字稿故事提取工具 — 方案设计文档
一、项目概述
1.1 背景
手头有大量直播回放导出的文字稿(DOCX 格式),其中散落着一些个人生活故事(家长里短类),需要用 AI 自动提取整理,并与讲述者个人信息匹配,最终输出为独立的 DOCX 文档。
1.2 目标
构建一个 Web 端可复用工具,支持:
- 批量上传和管理文字稿文件
- AI 自动提取故事(过滤讲课/知识点内容)
- 人工确认故事与讲述者的匹配关系
- 为每个讲述者生成独立 DOCX(个人信息 + 照片 + 故事正文)
1.3 使用场景
- 部署环境: 局域网
- 用户规模: 多人使用
- 数据规模: 20+ 份文字稿,每份上万行
二、需求分析
2.1 输入
| 输入类型 | 格式 | 说明 |
|---|---|---|
| 直播回放文字稿 | DOCX | 每份上万行,口语化,混合讲课/知识点内容,无明确说话人标记 |
| 讲述者个人信息 | DOCX(一人一个) | 包含姓名、照片等个人信息 |
2.2 处理要求
- 故事提取: 从文字稿中识别并提取个人生活故事(如家庭、情感、生活等),过滤掉纯讲课/知识点内容
- 长文本切分: 上万行文字稿需智能切分,确保不截断完整故事(每个故事可能跨半小时到一小时,稀疏分布)
- 匹配确认: AI 提取故事后,由人工在界面上确认每个故事对应的讲述者
- 文档生成: 按简洁模板生成最终 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 的具体字段结构(需看样例)
- 文字稿样例(需看实际内容以优化切分和提取策略)