2026-08-27 12:56:14 +08:00
|
|
|
|
# 素材库系统 (Material Library)
|
|
|
|
|
|
|
|
|
|
|
|
Flask + SQLite + FTS5 全文检索 + DeepSeek/豆包大模型分析 的素材管理平台。
|
|
|
|
|
|
|
|
|
|
|
|
## 功能
|
|
|
|
|
|
|
|
|
|
|
|
### 1. 项目与素材管理
|
|
|
|
|
|
- **新建项目**:名称、描述、类别、标签(逗号分隔)
|
|
|
|
|
|
- **修改项目**:改类别/标签/描述/名称,增删素材
|
|
|
|
|
|
- **素材导入**:
|
|
|
|
|
|
- 拖拽/点击批量上传文件:文本(txt/md/csv/json/xml/srt…) · 文档(pdf/docx/pptx) · 图片 · 视频 · 音频
|
|
|
|
|
|
- 直接粘贴文本素材
|
|
|
|
|
|
- **自动文本抽取**:txt/md/pdf/docx/pptx 上传即抽取正文,图片提取分辨率/格式元数据
|
|
|
|
|
|
|
|
|
|
|
|
### 2. 大模型分析(DeepSeek + 豆包视觉)
|
|
|
|
|
|
- **素材级分析**:一键分析单个或全部素材,提取
|
|
|
|
|
|
- 摘要 (summary) · 关键要点 (key_points) · 关键词 (keywords) · 推荐标签 (tags) · 建议归类 (category)
|
|
|
|
|
|
- 图片走豆包视觉模型生成"视觉描述",再让 DeepSeek 提炼关键信息
|
|
|
|
|
|
- **项目级摘要**:汇总项目全部素材,生成项目报告(摘要/关键发现/项目级关键词/标签/类别)
|
|
|
|
|
|
- 后台线程执行 + 前端轮询进度
|
|
|
|
|
|
|
|
|
|
|
|
### 3. 索引与查询
|
|
|
|
|
|
- **SQLite FTS5 全文索引**(jieba 分词):素材名 + 抽取文本 + AI摘要 + 关键词 全部入库
|
|
|
|
|
|
- 站内搜索:项目匹配 + 素材匹配(带 AI 摘要预览)
|
2026-08-27 15:59:12 +08:00
|
|
|
|
- 分类过滤 / **标签多选过滤**(同时勾选多个标签 = 同时满足)
|
|
|
|
|
|
|
|
|
|
|
|
### 4. 系统设置(⚙️ 右上角)
|
|
|
|
|
|
- **大模型配置**:分析大模型(OpenAI 兼容接口)+ 图片视觉模型,地址/Key/模型名 均可改,支持“测试连接”
|
|
|
|
|
|
- **自动备份(双触发)**:
|
|
|
|
|
|
- 时间间隔(小时,0=关闭)
|
|
|
|
|
|
- 变更量阈值(项目/素材改动次数,0=关闭)
|
|
|
|
|
|
- 后台调度器 30s 检查一次,命中任一条件自动打包备份
|
|
|
|
|
|
- 保留份数可调,自动清理旧备份
|
|
|
|
|
|
- **手动备份 / 导出 / 删除** 备份文件
|
|
|
|
|
|
- **导入恢复**:上传备份 zip 一键还原(覆盖当前数据,有确认)
|
|
|
|
|
|
|
|
|
|
|
|
### 5. 其他便捷功能
|
|
|
|
|
|
- **粘贴图片上传**:在项目页直接 Ctrl+V 粘贴剪贴板截图/图片
|
|
|
|
|
|
- **文本素材编辑**:新增的文本素材可再次编辑名称与内容(内容改动后需重新 AI 分析)
|
|
|
|
|
|
- **一键复制**:文本素材可一键复制全文(表格行 + 详情弹窗均有入口)
|
|
|
|
|
|
- **摘要历史**:每次生成的“项目 AI 摘要”全部保留,可展开查看历史版本
|
|
|
|
|
|
- **Logo 点击**:左上角 Logo 一键返回首页
|
2026-08-27 12:56:14 +08:00
|
|
|
|
|
|
|
|
|
|
## 技术栈
|
|
|
|
|
|
- 后端:Flask 3 (Python 3.12, openclaw conda 环境)
|
|
|
|
|
|
- 存储:SQLite (WAL) + 文件系统 (data/uploads/)
|
|
|
|
|
|
- 检索:SQLite FTS5 + jieba
|
|
|
|
|
|
- LLM:DeepSeek `deepseek-v4-flash`(结构化 JSON 分析)+ 豆包 `doubao-seed-evolving`(图片视觉描述)
|
|
|
|
|
|
|
|
|
|
|
|
## 快速开始
|
|
|
|
|
|
```bash
|
|
|
|
|
|
./start.sh # 启动 (默认 16091)
|
|
|
|
|
|
./start.sh stop # 停止
|
|
|
|
|
|
./start.sh restart # 重启
|
|
|
|
|
|
# 访问 http://<IP>:16091/
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
## 目录结构
|
|
|
|
|
|
```
|
|
|
|
|
|
material-library/
|
|
|
|
|
|
├── app.py # Flask 主程序(路由/抽取/LLM/FTS/后台任务)
|
|
|
|
|
|
├── start.sh # 启停脚本 (PID 管理)
|
|
|
|
|
|
├── static/index.html # 前端单页应用
|
|
|
|
|
|
└── data/
|
|
|
|
|
|
├── material.db # SQLite 数据库
|
|
|
|
|
|
├── uploads/ # 上传的素材文件
|
|
|
|
|
|
└── shots/ # 界面截图
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
## 数据库表
|
|
|
|
|
|
- `projects` — 项目(名称/描述/类别/标签)
|
|
|
|
|
|
- `materials` — 素材(类型/文件/抽取文本/状态)
|
2026-08-27 15:59:12 +08:00
|
|
|
|
- `analyses` — 分析结果(素材级 + 项目级,JSON 字段,项目摘要保留全部历史)
|
2026-08-27 12:56:14 +08:00
|
|
|
|
- `materials_fts` — FTS5 全文索引
|
2026-08-27 15:59:12 +08:00
|
|
|
|
- `settings` — 系统设置(大模型配置 / 备份参数,KV 存储)
|
|
|
|
|
|
|
|
|
|
|
|
## 备份说明
|
|
|
|
|
|
- 备份目录:`data/backups/backup_YYYYMMDD_HHMMSS[_manual].zip`(含完整数据库 + 上传目录)
|
|
|
|
|
|
- 自动备份由后台线程触发(时间间隔 / 变更量双条件)
|
|
|
|
|
|
- 恢复 = 上传 zip → 校验 → 覆盖数据库与上传目录 → 自动重建索引
|
2026-08-27 12:56:14 +08:00
|
|
|
|
|
|
|
|
|
|
## API 一览
|
|
|
|
|
|
| 方法 | 路径 | 说明 |
|
|
|
|
|
|
|------|------|------|
|
|
|
|
|
|
| GET | `/api/projects?q=&category=&tag=` | 项目列表 |
|
|
|
|
|
|
| POST/PUT/DELETE | `/api/projects[/<id>]` | 项目增改删 |
|
|
|
|
|
|
| GET | `/api/projects/<id>` | 项目详情(含素材+分析) |
|
|
|
|
|
|
| POST | `/api/projects/<id>/materials/upload` | 批量上传文件 |
|
|
|
|
|
|
| POST | `/api/projects/<id>/materials` | 新增文本素材 |
|
|
|
|
|
|
| GET/PUT/DELETE | `/api/materials/<id>` | 素材详情/改名/删除 |
|
|
|
|
|
|
| POST | `/api/materials/<id>/analyze` | 分析单个素材 |
|
|
|
|
|
|
| POST | `/api/projects/<id>/analyze` | 分析项目全部素材 |
|
|
|
|
|
|
| POST | `/api/projects/<id>/summary` | 生成项目摘要 |
|
|
|
|
|
|
| GET | `/api/search?q=` | 全文搜索 |
|
|
|
|
|
|
| GET | `/api/meta` | 统计/分类/标签 |
|
|
|
|
|
|
| GET | `/files/<id>` | 素材下载/预览 |
|