Files
tps-dashboard/new_notemd/PRD_知识库笔记工坊_v1.md
T

247 lines
9.5 KiB
Markdown
Raw Normal View History

# PRD:知识库笔记工坊(new_notemdv1.0
> 制片人刘通 × Claude Opus 顾问 2026-07-09 立项
---
## §1 背景与目标
### 现状
知识库已有 189 条(doco 22 篇 + Obsidian 164 篇 + 零散上传),但存在三个问题:
1. **只能看标题列表,不能点开看内容**——编导无法阅读和修改已入库的笔记
2. **入库门槛高**——需要手写 yaml frontmatter + md 格式,只有制片人跑脚本才能批量导入
3. **只有制片人能操作**——6 名编导各有专长领域的素材,无法自助贡献
### 目标
把知识库从"制片人单人维护的静态仓库"升级为"全组 8 人共建的活知识库":
- 编导能**浏览、编辑**已有笔记
- 编导能**自助提交**新素材(多种输入格式),AI 加工成规范笔记
- 制片人/责编**审核把关**,防止质量污染
- 知识库持续生长,为 Phase 4a 对话式选题策划提供更丰富的检索底座
---
## §2 用户角色与权限
| 操作 | 制片人 (zhipianren) | 责编 (zebian) | 编导 (biandao) |
|------|:---:|:---:|:---:|
| 浏览笔记(点标题看全文) | ✅ | ✅ | ✅ |
| 编辑已有笔记 | ✅ | ✅ | ✅(仅自己提交的,或制片人授权的) |
| 新建笔记(AI 加工流程) | ✅ | ✅ | ✅ |
| 审核(通过/驳回) | ✅ | ✅ | ❌ |
| 删除 | ✅ | ❌ | ❌ |
---
## §3 功能模块
### 3.1 笔记查看与编辑(在现有知识库列表页增强)
**交互方式**:点击标题 → 打开右侧抽屉(Drawer)
抽屉内容:
- **上半部分**:渲染后的 md 预览(react-markdown,与诊断报告详情页复用渲染器)
- **下半部分**:元信息卡片(作者、来源、类型、入库时间、审核状态)
- **操作按钮**:「编辑」→ 切换为编辑模式(左编辑右预览双栏);「保存」→ 写回数据库 + 自动重算 embedding 向量
编辑模式:
- 左栏:md 文本编辑区(textarea,等宽字体)
- 右栏:实时预览
- 元信息字段用表单编辑(标题、作者、来源等)
- 保存时后端自动调 MiniMax embo-01 重算向量
### 3.2 新建笔记(AI 加工流程)——核心新功能
**入口**:知识库页面新增「新建笔记」按钮(与「上传 md 文件入库」并列)
#### 步骤一:选择输入方式 + 提交素材
支持五种输入类型:
| 输入类型 | 操作方式 | 后端处理 |
|---------|---------|---------|
| 粘贴文本 | 文本框粘贴文章内容 | 直接传给 LLM |
| PDF 上传 | 上传 .pdf 文件 | OCR 提取文字(PyMuPDF/pdfplumber |
| Word 上传 | 上传 .docx 文件 | python-docx 提取正文 |
| 网页链接 | 输入 URL | 后端抓取正文(requests + BeautifulSoup |
| md 文件 | 上传 .md 文件 | 直接读取(现有功能增强) |
编导还需填写:
- **素材类型**(下拉选择:杂志文章 / 军报文章 / 装备资料 / 技术文献 / 节目文稿 / 动态消息 / 其他)
- **来源说明**(如"航空知识 2026 年第 3 期")——选填,有则 AI 会参考
#### 步骤二:AI 加工
后端调用 LLMMiMo,复用现有 MST_knowledge_base 规则),自动:
- 生成规范的 yaml frontmattertitle / author / date / source_type / source_detail / tags / related_entities
- 整理正文格式(分段、去噪、提取关键信息)
- 生成内容摘要
加工过程显示 loading 状态("AI 正在整理笔记..."),预计 10-30 秒。
#### 步骤三:编导预览 & 修改
AI 加工完成后展示结果:
- 上方:表单形式展示 frontmatter 字段(可改)
- 下方:左编辑右预览双栏(可改正文)
- 底部:「提交审核」按钮
编导可以:
- 修改 AI 生成的标题、标签、摘要
- 修改正文内容
- 觉得 AI 加工不好可以点「重新加工」
#### 步骤四:提交审核
编导点「提交审核」→ 笔记以 `pending` 状态入库(算向量,但不参与正式搜索)
#### 步骤五:审核(制片人/责编)
审核入口:知识库页面新增「待审核」标签页(或筛选项),显示待审核笔记列表
审核操作:
- **通过**:状态改为 `approved`,进入正式搜索池
- **驳回 + 理由**:状态改为 `rejected`,退回编导修改(编导在"我的笔记"里能看到驳回理由)
- **通过并编辑**:审核人可以直接改完再通过
---
## §4 数据模型变更
### knowledge_items 表新增字段(006 迁移)
```sql
ALTER TABLE knowledge_items
ADD COLUMN status VARCHAR(20) DEFAULT 'approved' NOT NULL,
ADD COLUMN submitted_by INTEGER REFERENCES users(id),
ADD COLUMN reviewed_by INTEGER REFERENCES users(id),
ADD COLUMN reviewed_at TIMESTAMP,
ADD COLUMN review_note TEXT;
-- 存量数据全部标记为 approved(制片人历史导入,已审核)
UPDATE knowledge_items SET status = 'approved' WHERE status = 'approved';
-- status 枚举:draft / pending / approved / rejected
-- draft: 编导编辑中未提交
-- pending: 已提交待审核
-- approved: 审核通过,参与搜索
-- rejected: 驳回,需修改
```
### 搜索过滤
现有 `search_similar()` 和列表查询增加 `WHERE status = 'approved'` 过滤(编导查看自己的笔记不受此限制)。
---
## §5 新增 API
| 方法 | 路径 | 说明 | 权限 |
|------|------|------|------|
| GET | `/api/knowledge/{id}` | 获取笔记详情(含 content_md | 全角色 |
| PATCH | `/api/knowledge/{id}` | 编辑笔记(保存后重算向量) | 见 §2 权限表 |
| POST | `/api/knowledge/extract-text` | 上传文件/链接 → 提取纯文本 | 全角色 |
| POST | `/api/knowledge/ai-process` | 纯文本 → AI 加工成规范笔记 | 全角色 |
| POST | `/api/knowledge/submit-review` | 提交审核(status → pending | 全角色 |
| PATCH | `/api/knowledge/{id}/review` | 审核操作(通过/驳回) | zhipianren + zebian |
| GET | `/api/knowledge/pending` | 获取待审核列表 | zhipianren + zebian |
| GET | `/api/knowledge/my-notes` | 获取"我的笔记"列表 | 全角色 |
---
## §6 前端页面结构
### 知识库页面改动(KnowledgePage.jsx
```
知识库
├── 搜索栏(不变)
├── 操作栏
│ ├── [上传 md 文件入库](现有)
│ ├── [新建笔记](新增,打开新建流程)
│ └── [待审核 (N)](新增,仅制片人/责编可见,显示待审数量角标)
├── 左侧树形视图(不变)
├── 右侧列表
│ ├── 标题可点击 → 打开查看抽屉
│ ├── 状态列(新增:已审核/待审核/已驳回)
│ └── 操作列:查看 | 编辑 | 删除(按权限显示)
└── 查看/编辑抽屉(新增)
├── 查看模式:md 渲染 + 元信息
└── 编辑模式:左编辑右预览 + 元信息表单
```
### 新建笔记流程页(NoteWorkshop.jsx 或 Modal
```
新建笔记
├── Step 1:输入方式选择 + 素材提交
│ ├── Tab 切换:粘贴文本 | PDF | Word | 网页链接 | md 文件
│ ├── 素材类型下拉
│ └── [开始加工] 按钮
├── Step 2AI 加工中(loading
├── Step 3:预览 & 修改
│ ├── frontmatter 表单(标题/作者/来源/标签等)
│ ├── 正文编辑(左编辑右预览)
│ └── [提交审核] / [重新加工] 按钮
└── 完成提示:"已提交审核,等待制片人/责编审批"
```
---
## §7 验收标准
1. **能看**:点击任意笔记标题,抽屉打开显示完整 md 渲染内容和元信息
2. **能改**:编辑模式下修改内容并保存,搜索结果反映修改后的内容(向量已更新)
3. **能建**:通过粘贴文本创建笔记,AI 加工后 frontmatter 字段完整、正文格式规范
4. **能传**PDF / Word / 网页链接均能成功提取文字并进入 AI 加工流程
5. **能审**:编导提交后制片人能看到待审核列表,通过后笔记出现在搜索结果中,驳回后编导能看到理由
6. **不污染**:未审核的笔记不出现在语义搜索结果中
7. **权限正确**:编导不能审核、不能删除、不能编辑他人笔记(除非被授权)
---
## §8 分刀实施计划
### 第一刀:查看 + 编辑(纯前端 + 1 个 PATCH 接口)
- 列表标题可点击 → 打开查看抽屉(GET `/api/knowledge/{id}`
- 抽屉内 md 渲染 + 编辑模式切换
- PATCH 接口保存 + 重算向量
- 不涉及 schema 变更
### 第二刀:新建笔记 AI 加工流程
- 006 迁移(加 status / submitted_by / reviewed_by 等字段,先 pg_dump
- 文本提取接口(PDF / Word / 链接)
- AI 加工接口(调 LLM
- 前端新建笔记流程页
### 第三刀:审核流程 + 权限
- 提交审核 / 审核操作接口
- 前端待审核列表 + 审核操作
- 搜索过滤 `status = 'approved'`
- 权限校验(编导不能审核/删除)
### 第四刀:打磨 + 边界
- "我的笔记"视图
- 驳回理由展示 + 退回修改流程
- 网页链接抓取的健壮性(超时/编码/反爬)
- 编辑权限细化(编导仅编辑自己的笔记)
每刀独立验收,制片人真实点页面逐条验。
---
## §9 制片人拍板记录
1. [2026-07-09] **不做独立软件**:笔记生成功能做在网页端,编导打开浏览器就能用,不增加安装成本。
2. [2026-07-09] **五种输入类型**:粘贴文本 / PDF / Word / 网页链接 / md 文件。
3. [2026-07-09] **审核制**:编导提交 → 制片人/责编审核 → 通过才进搜索池。AI 设计哲学红线的延伸。
4. [2026-07-09] **AI 加工复用 MST 规则**:沿用现有 MiMo + MST_knowledge_base prompt 规则,不另起炉灶。