Files
tps-dashboard/new_notemd/PRD_知识库笔记工坊_v1.md
T
simonkoson 8be51ebbde feat: 知识库笔记工坊立项 + contributor 功能 + Fable5 视角文档
- 知识库笔记工坊子项目立项:PRD v1.0 + 寄存条 + CLAUDE.md 登记
- 后端:知识库上传记录 contributor、新增 /contributors 接口
- 前端:知识库列表支持按贡献人筛选
- 新增 Fable5 视角模式库/案例集/建议文档

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-07-10 18:06:42 +08:00

247 lines
9.5 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.
# 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 规则,不另起炉灶。