feat(aia): Complete AIA V2.0 with universal streaming capabilities

Major Changes:
- Add StreamingService with OpenAI Compatible format
- Upgrade Chat component V2 with Ant Design X integration
- Implement AIA module with 12 intelligent agents
- Update API routes to unified /api/v1 prefix
- Update system documentation

Backend (~1300 lines):
- common/streaming: OpenAI Compatible adapter
- modules/aia: 12 agents, conversation service, streaming integration
- Update route versions (RVW, PKB to v1)

Frontend (~3500 lines):
- modules/aia: AgentHub + ChatWorkspace (100% prototype restoration)
- shared/Chat: AIStreamChat, ThinkingBlock, useAIStream Hook
- Update API endpoints to v1

Documentation:
- AIA module status guide
- Universal capabilities catalog
- System overview updates
- All module documentation sync

Tested: Stream response verified, authentication working
Status: AIA V2.0 core completed (85%)
This commit is contained in:
2026-01-14 19:15:01 +08:00
parent 3d35e9c58b
commit 1b53ab9d52
386 changed files with 52096 additions and 65238 deletions

View File

@@ -1,23 +1,18 @@
# PKB个人知识库模块 - 当前状态与开发指南
> **文档版本:** v2.0
> **创建日期:** 2026-01-07
> **维护者:** PKB模块开发团队
# PKB<EFBFBD>汉鐭ヨ瘑搴撴ā鍧?- 褰撳墠鐘舵€佷笌寮€鍙戞寚鍗?
> **鏂囨。鐗堟湰锛?* v2.0
> **鍒涘缓鏃ユ湡锛?* 2026-01-07
> **缁存姢鑰咃細** PKB妯″潡寮€鍙戝洟闃?
> **鏈€鍚庢洿鏂帮細** 2026-01-07
> **重大进展:** 🎉 **PKB模块核心功能全部实现具备生产可用性**
> **文档目的:** 反映模块真实状态,记录开发历程
> **閲嶅ぇ杩涘睍锛?* 馃帀 **PKB妯″潡鏍稿績鍔熻兘鍏ㄩ儴瀹炵幇锛屽叿澶囩敓浜у彲鐢ㄦ€э紒**
> **鏂囨。鐩<EFBFBD>殑锛?* 鍙嶆槧妯″潡鐪熷疄鐘舵€侊紝璁板綍寮€鍙戝巻绋?
---
## 馃搵 鏂囨。璇存槑
本文档是PKB个人知识库模块的**真实状态快照**,如实记录当前开发状态、技术架构和已知问题。
**与其他文档的关系**
- **本文档00-模块当前状态)**What is真实状态包括问题
- **需求分析文档**What to do产品需求
- **开发记录文档**What done开发历程
- **技术设计文档**How to do设计方案
<EFBFBD>枃妗槸PKB涓<EFBFBD>汉鐭ヨ瘑搴撴ā鍧楃殑**鐪熷疄鐘舵€佸揩鐓?*锛屽<E9949B>瀹炶<E780B9>褰曞綋鍓嶅紑鍙戠姸鎬併€佹妧鏈<E5A6A7>灦鏋勫拰宸茬煡闂<E785A1><E99782>銆?
**涓庡叾浠栨枃妗g殑鍏崇郴**锛?- **鏈<>枃妗紙00-妯″潡褰撳墠鐘舵€侊級**锛歐hat is锛堢湡瀹炵姸鎬侊紝鍖呮嫭闂<E5ABAD><E99782>锛?- **闇€姹傚垎鏋愭枃妗?*锛歐hat to do锛堜骇鍝侀渶姹傦級
- **寮€鍙戣<E98D99>褰曟枃妗?*锛歐hat done锛堝紑鍙戝巻绋嬶級
- **鎶€鏈<EFBFBD><EFBFBD>璁℃枃妗?*锛欻ow to do锛堣<E9949B>璁℃柟妗堬級
---
@@ -25,37 +20,31 @@
### 鏍稿績鍔熻兘
PKBPersonal Knowledge Base)个人知识库模块提供:
- 🗂️ **知识库管理**:创建、编辑、删除个人知识库
- 📄 **文档管理**上传、处理、组织文档PDF/Word/TXT/MD
- 🤖 **AI问答**:基于知识库内容的智能问答
- 📊 **批处理**:批量提取文档信息,生成结构化数据
### 当前状态
| 组件 | 状态 | 完成度 | 说明 |
PKB锛圥ersonal Knowledge Base锛変釜浜虹煡璇嗗簱妯″潡鎻愪緵锛?- 馃梻锔?**鐭ヨ瘑搴撶<E690B4>鐞?*锛氬垱寤恒€佺紪杈戙€佸垹闄や釜浜虹煡璇嗗簱
- 馃搫 **鏂囨。绠$悊**锛氫笂浼犮€佸<E282AC>鐞嗐€佺粍缁囨枃妗紙PDF/Word/TXT/MD锛?- 馃<> **AI闂<49>瓟**锛氬熀浜庣煡璇嗗簱鍐呭<E98D90>鐨勬櫤鑳介棶绛?- 馃搳 **鎵瑰<E98EB5>鐞?*锛氭壒閲忔彁鍙栨枃妗俊鎭<E4BF8A>紝鐢熸垚缁撴瀯鍖栨暟鎹?
### 褰撳墠鐘舵€?
| 缁勪欢 | 鐘舵€?| 瀹屾垚搴?| 璇存槑 |
|------|------|--------|------|
| **后端API** | ✅ 已完成 | 100% | v1 + v2双路由运行 |
| **前端Dashboard** | ✅ 已完成 | 95% | 基于V5原型实现 |
| **前端Workspace** | ✅ 已完成 | 95% | 基于V3原型实现 |
| **全文阅读模式** | ✅ 已完成 | 95% | Chat组件集成完成 |
| **逐篇精读模式** | ✅ 已完成 | 95% | 文档选择+对话 |
| **批处理模式** | ✅ 已完成 | 95% | 完整流程+结果导出 |
| **文档上传** | ✅ 已完成 | 100% | 拖拽+进度显示 |
| **RAG检索模式** | ⏸️ 暂缓 | 0% | 优先级调整 |
| **鍚庣<EFBFBD>API** | 鉁?宸插畬鎴?| 100% | v1 + v2鍙岃矾鐢辫繍琛?|
| **鍓嶇<EFBFBD>Dashboard** | 鉁?宸插畬鎴?| 95% | 鍩轰簬V5鍘熷瀷瀹炵幇 |
| **鍓嶇<EFBFBD>Workspace** | 鉁?宸插畬鎴?| 95% | 鍩轰簬V3鍘熷瀷瀹炵幇 |
| **鍏ㄦ枃闃呰<EFBFBD>妯″紡** | 鉁?宸插畬鎴?| 95% | Chat缁勪欢闆嗘垚瀹屾垚 |
| **閫愮瘒绮捐<EFBFBD>妯″紡** | 鉁?宸插畬鎴?| 95% | 鏂囨。閫夋嫨+瀵硅瘽 |
| **鎵瑰<EFBFBD>鐞嗘ā寮?* | 鉁?宸插畬鎴?| 95% | 瀹屾暣娴佺▼+缁撴灉瀵煎嚭 |
| **鏂囨。涓婁紶** | 鉁?宸插畬鎴?| 100% | 鎷栨嫿+杩涘害鏄剧ず |
| **RAG妫€绱㈡ā寮?* | 鈴革笍 鏆傜紦 | 0% | 浼樺厛绾ц皟鏁?|
**整体完成度约90%** 🎉
**鏁翠綋瀹屾垚搴︼細绾?0%** 馃帀
---
## 🏗️ 技术架构
## 馃彈锔?鎶€鏈<E282AC>灦鏋?
### 鍓嶇<E98D93>鎶€鏈<E282AC>
```
妗嗘灦: React 19 + TypeScript 5
<EFBFBD>敱: React Router DOM v7
状态管理: Zustand
鐘舵€佺<EFBFBD>鐞? Zustand
UI缁勪欢: Ant Design v6 + Ant Design X
鏍峰紡: TailwindCSS v3
鏋勫缓宸ュ叿: Vite 7
@@ -65,27 +54,22 @@ UI组件: Ant Design v6 + Ant Design X
```
妗嗘灦: Fastify v4 (Node.js 22)
数据库: PostgreSQL 15 + Prisma 6
鏁版嵁搴? PostgreSQL 15 + Prisma 6
Schema: pkb_schema (鐙<>珛闅旂<E99785>)
LLM: DeepSeek-V3, Qwen-Max (閫氳繃LLMFactory)
RAG: Dify知识库集成
存储: OSS对象存储
RAG: Dify鐭ヨ瘑搴撻泦鎴?瀛樺偍: OSS瀵硅薄瀛樺偍
```
### API璺<49>
```
# 新架构 (v2)
/api/v2/pkb/knowledge # 知识库CRUD
/api/v2/pkb/knowledge/:id # 知识库详情
/api/v2/pkb/documents # 文档管理
# 鏂版灦鏋?(v2)
/api/v1/pkb/knowledge # 鐭ヨ瘑搴揅RUD
/api/v1/pkb/knowledge/:id # 鐭ヨ瘑搴撹<EFBFBD>鎯?/api/v1/pkb/documents # 鏂囨。绠$悊
# 旧架构 (v1保持兼容)
/api/v1/knowledge # 知识库管理
/api/v1/documents # 文档管理
/api/v1/batch-tasks # 批处理任务
/api/v1/chat/stream # AI对话流
```
# 鏃ф灦鏋?(v1锛屼繚鎸佸吋瀹?
/api/v1/knowledge # 鐭ヨ瘑搴撶<EFBFBD>鐞?/api/v1/documents # 鏂囨。绠$悊
/api/v1/batch-tasks # 鎵瑰<E98EB5>鐞嗕换鍔?/api/v1/chat/stream # AI瀵硅瘽娴?```
---
@@ -96,47 +80,42 @@ RAG: Dify知识库集成
```
backend/src/modules/pkb/
鈹溾攢鈹€ controllers/
│ ├── knowledgeBaseController.ts # 知识库控制器
│ ├── documentController.ts # 文档控制器
│ └── batchController.ts # 批处理控制器
鈹? 鈹溾攢鈹€ knowledgeBaseController.ts # 鐭ヨ瘑搴撴帶鍒跺櫒
鈹? 鈹溾攢鈹€ documentController.ts # 鏂囨。鎺у埗鍣?鈹? 鈹斺攢鈹€ batchController.ts # 鎵瑰<E98EB5>鐞嗘帶鍒跺櫒
鈹溾攢鈹€ services/
│ ├── knowledgeBaseService.ts # 知识库服务 (~350行)
│ ├── documentService.ts # 文档服务 (~400行)
│ └── batchService.ts # 批处理服务 (~300行)
鈹? 鈹溾攢鈹€ knowledgeBaseService.ts # 鐭ヨ瘑搴撴湇鍔?(~350琛?
鈹? 鈹溾攢鈹€ documentService.ts # 鏂囨。鏈嶅姟 (~400琛?
鈹? 鈹斺攢鈹€ batchService.ts # 鎵瑰<EFBFBD>鐞嗘湇鍔?(~300琛?
鈹溾攢鈹€ routes/
│ └── index.ts # 路由配置
鈹? 鈹斺攢鈹€ index.ts # <EFBFBD>敱閰嶇疆
鈹斺攢鈹€ index.ts # 妯″潡鍏ュ彛
总计: ~1500行后端代码
```
鎬昏<EFBFBD>: ~1500琛屽悗绔<EFBFBD>唬鐮?```
### 鍓嶇<E98D93>爜缁撴瀯
```
frontend-v2/src/modules/pkb/
鈹溾攢鈹€ api/
│ └── knowledgeBaseApi.ts # API客户端 (~200行)
鈹? 鈹斺攢鈹€ knowledgeBaseApi.ts # API瀹㈡埛绔?(~200琛?
鈹溾攢鈹€ stores/
│ └── useKnowledgeBaseStore.ts # Zustand状态 (~150行)
鈹? 鈹斺攢鈹€ useKnowledgeBaseStore.ts # Zustand鐘舵€?(~150琛?
鈹溾攢鈹€ pages/
│ ├── DashboardPage.tsx # 仪表盘 (~450行)
│ └── WorkspacePage.tsx # 工作台 (~513行)
鈹? 鈹溾攢鈹€ DashboardPage.tsx # <EFBFBD>〃鐩?(~450琛?
鈹? 鈹斺攢鈹€ WorkspacePage.tsx # 宸ヤ綔鍙?(~513琛?
鈹溾攢鈹€ components/
│ └── Workspace/
├── WorkModeSelector.tsx # 模式选择 (~200行)
├── FullTextMode.tsx # 全文阅读 (~150行)
├── DeepReadMode.tsx # 逐篇精读 (~150行)
├── BatchMode.tsx # 批处理入口
│ └── BatchModeComplete.tsx # 批处理完整 (~511行)
鈹? 鈹斺攢鈹€ Workspace/
鈹? 鈹溾攢鈹€ WorkModeSelector.tsx # 妯″紡閫夋嫨 (~200琛?
鈹? 鈹溾攢鈹€ FullTextMode.tsx # 鍏ㄦ枃闃呰<EFBFBD> (~150琛?
鈹? 鈹溾攢鈹€ DeepReadMode.tsx # 閫愮瘒绮捐<EFBFBD> (~150琛?
鈹? 鈹溾攢鈹€ BatchMode.tsx # 鎵瑰<EFBFBD>鐞嗗叆鍙?鈹? 鈹斺攢鈹€ BatchModeComplete.tsx # 鎵瑰<E98EB5>鐞嗗畬鏁?(~511琛?
鈹溾攢鈹€ hooks/
│ └── useWorkMode.ts # 工作模式Hook
鈹? 鈹斺攢鈹€ useWorkMode.ts # 宸ヤ綔妯″紡Hook
鈹溾攢鈹€ types/
│ └── index.ts # 类型定义
鈹? 鈹斺攢鈹€ index.ts # 绫诲瀷瀹氫箟
鈹斺攢鈹€ styles/
└── workspace.css # 自定义样式
总计: ~2300行前端代码
```
鈹斺攢鈹€ workspace.css # <EFBFBD>畾涔夋牱寮?
鎬昏<EFBFBD>: ~2300琛屽墠绔<E5A2A0>唬鐮?```
---
@@ -144,186 +123,127 @@ frontend-v2/src/modules/pkb/
### 鍘熷瀷鏂囦欢
- **Dashboard**: `docs/03-业务模块/PKB-个人知识库/01-需求分析/知识库仪表盘V5.html`
- **Workspace**: `docs/03-业务模块/PKB-个人知识库/01-需求分析/工作台V3.html`
- **Dashboard**: `docs/03-涓氬姟妯″潡/PKB-涓<>汉鐭ヨ瘑搴?01-闇€姹傚垎鏋?鐭ヨ瘑搴撲华琛ㄧ洏V5.html`
- **Workspace**: `docs/03-涓氬姟妯″潡/PKB-涓<>汉鐭ヨ瘑搴?01-闇€姹傚垎鏋?宸ヤ綔鍙癡3.html`
### Workspace甯冨眬
```
┌─────────────────────────────────────────────────┐
│ [返回] │ 知识库名 │ [问答][资产] │ 设置 头像 │ Header 56px
├─────────────────────────────────────────────────┤
│ [工作模式▼] [文档▼] 已加载 x/y 篇 │ 工作模式栏 40px
├─────────────────────────────────────────────────┤
│ │
│ 聊天区域(最大化) │
│ │
└─────────────────────────────────────────────────┘
```
鈹屸攢鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹?鈹?[杩斿洖] 鈹?鐭ヨ瘑搴撳悕 鈹?[闂<>瓟][璧勪骇] 鈹?璁剧疆 澶村儚 鈹?Header 56px
鈹溾攢鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹?鈹?[宸ヤ綔妯″紡鈻糫 [鏂囨。鈻糫 宸插姞杞?x/y 绡?鈹?宸ヤ綔妯″紡鏍?40px
鈹溾攢鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹?鈹? 鈹?鈹? 鑱婂ぉ鍖哄煙锛堟渶澶у寲锛? 鈹?鈹? 鈹?鈹斺攢鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹?```
### 璁捐<E79281>鐗圭偣
- **单层Header**: 整合导航和Tab切换智能问答/知识资产)
- **紧凑工作模式栏**: 下拉选择,节省空间
- **最大化聊天区域**: 全屏模式,沉浸式对话体验
- **鍗曞眰Header**: 鏁村悎瀵艰埅鍜孴ab鍒囨崲锛堟櫤鑳介棶绛?鐭ヨ瘑璧勪骇锛?- **绱у噾宸ヤ綔妯″紡鏍?*: 涓嬫媺閫夋嫨锛岃妭鐪佺┖闂?- **鏈€澶у寲鑱婂ぉ鍖哄煙**: 鍏ㄥ睆妯″紡锛屾矇娴稿紡瀵硅瘽浣撻獙
- **鍝嶅簲寮忓竷灞€**: 鏀<>寔涓嶅悓灞忓箷灏哄<E7818F>
---
## 馃攲 宸ヤ綔妯″紡
### 1. 全文阅读模式Full Text
**功能说明**
- 加载知识库全部文档
- AI具备全知视角
### 1. 鍏ㄦ枃闃呰<EFBFBD>妯″紡锛團ull Text锛?
**鍔熻兘璇存槑**锛?- 鍔犺浇鐭ヨ瘑搴撳叏閮ㄦ枃妗?- AI鍏峰<E98D8F>鍏ㄧ煡瑙嗚<E79199>
- 閫傚悎鏂囩尞缁艰堪銆佽法鏂囩尞鍒嗘瀽
**技术实现**
- 调用 `/api/v1/chat/stream` 接口
**鎶€鏈<EFBFBD>疄鐜?*锛?- 璋冪敤 `/api/v1/chat/stream` 鎺ュ彛
- 浼犲叆鎵€鏈夋枃妗<E69E83>D
- 浣跨敤SSE娴佸紡鍝嶅簲
### 2. 逐篇精读模式Deep Read
**功能说明**
- 选择1-5篇文档
- 深度解读单篇文献
- 适合精读、批注、理解
**技术实现**
- 下拉选择文档最多5篇
### 2. 閫愮瘒绮捐<EFBFBD>妯″紡锛圖eep Read锛?
**鍔熻兘璇存槑**锛?- 閫夋嫨1-5绡囨枃妗?- 娣卞害瑙<E79199>鍗曠瘒鏂囩尞
- 閫傚悎绮捐<E7BBAE>銆佹壒娉ㄣ€佺悊瑙?
**鎶€鏈<E282AC>疄鐜?*锛?- 涓嬫媺閫夋嫨鏂囨。锛堟渶澶?绡囷級
- 璋冪敤鐩稿悓Chat鎺ュ彛
- 浠呬紶鍏ラ€変腑鏂囨。ID
### 3. 批处理模式(Batch
**功能说明**
- 选择批处理模板
- 批量提取文档信息
- 生成结构化表格
**技术实现**
- 调用 `/api/v1/batch-tasks` 接口
### 3. 鎵瑰<EFBFBD>鐞嗘ā寮忥紙Batch锛?
**鍔熻兘璇存槑**锛?- 閫夋嫨鎵瑰<E98EB5>鐞嗘ā鏉?- 鎵归噺鎻愬彇鏂囨。淇℃伅
- 鐢熸垚缁撴瀯鍖栬〃鏍?
**鎶€鏈<E282AC>疄鐜?*锛?- 璋冪敤 `/api/v1/batch-tasks` 鎺ュ彛
- 鏀<>寔杩涘害鏌ヨ<E98F8C>
- 缁撴灉瀵煎嚭Excel
**当前状态**:🔧 API执行待调试
**褰撳墠鐘舵€?*锛氿煍?API鎵ц<E98EB5>寰呰皟璇?
### 4. RAG妫€绱㈡ā寮忥紙寰呭紑鍙戯級
**功能说明**
- 基于向量检索
- 精准定位相关段落
- 适合快速查找
**当前状态**:❌ 后端待实现
**鍔熻兘璇存槑**锛?- 鍩轰簬鍚戦噺妫€绱?- 绮惧噯瀹氫綅鐩稿叧娈佃惤
- 閫傚悎蹇<E6828E>€熸煡鎵?
**褰撳墠鐘舵€?*锛氣潓 鍚庣<E98D9A>寰呭疄鐜?
---
## 鈿狅笍 宸茬煡闂<E785A1><E99782>
### 1. RAG妫€绱㈡ā寮忔湭瀹炵幇 馃煛 涓<>紭鍏堢骇
**问题描述**
- RAG检索模式暂未实现
- 当前优先全文阅读和逐篇精读模式
**<EFBFBD><EFBFBD>鎻忚堪**锛?- RAG妫€绱㈡ā寮忔殏鏈<E6AE8F>疄鐜?- 褰撳墠浼樺厛鍏ㄦ枃闃呰<E99783>鍜岄€愮瘒绮捐<E7BBAE>妯″紡
**褰卞搷**锛氬伐浣滄ā寮忛€夋嫨鏈夐檺
**解决方案**
- v2.1版本实现RAG检索
- 集成Dify知识库检索能力
### 2. 批处理模板有限 🟢 低优先级
**问题描述**
- 当前只支持1个模板临床研究信息提取
- 需要更多预设模板和自定义能力
**喅鏂规<EFBFBD>**锛?- v2.1鐗堟湰瀹炵幇RAG妫€绱?- 闆嗘垚Dify鐭ヨ瘑搴撴<E690B4>绱㈣兘鍔?
### 2. 鎵瑰<E98EB5>鐞嗘ā鏉挎湁闄?馃煝 浣庝紭鍏堢骇
**闂<><E99782>鎻忚堪**锛?- 褰撳墠鍙<E5A2A0>敮鎸?涓<>ā鏉匡紙涓村簥鐮旂┒淇℃伅鎻愬彇锛?- 闇€瑕佹洿澶氶<E6BEB6>璁炬ā鏉垮拰鑷<E68BB0>畾涔夎兘鍔?
**褰卞搷**锛氭壒澶勭悊搴旂敤鍦烘櫙鏈夐檺
**解决方案**
- v2.2版本增加药物安全性、患者基线等模板
- 支持用户自定义模板
**喅鏂规<EFBFBD>**锛?- v2.2鐗堟湰澧炲姞鑽<EFBFBD>墿瀹夊叏鎬с€佹偅鑰呭熀绾跨瓑妯℃澘
- 鏀<>寔鐢ㄦ埛鑷<E59F9B>畾涔夋ā鏉?
### 3. 鏂囨。棰勮<E6A3B0>鍔熻兘缂哄け 馃煝 浣庝紭鍏堢骇
**问题描述**
- 暂不支持文档在线预览
- 需下载后查看原文
**影响**:用户体验
**解决方案**
- v3.0版本集成PDF预览功能
- 支持文档标注和批注
**<EFBFBD><EFBFBD>鎻忚堪**锛?- 鏆備笉鏀<E7AC89>寔鏂囨。鍦ㄧ嚎棰勮<E6A3B0>
- 闇€涓嬭浇鍚庢煡鐪嬪師鏂?
**褰卞搷**锛氱敤鎴蜂綋楠?
**瑙喅鏂规<E98F82>**锛?- v3.0鐗堟湰闆嗘垚PDF棰勮<EFBFBD>鍔熻兘
- 鏀<>寔鏂囨。鏍囨敞鍜屾壒娉?
---
## 📝 下一步开发计划
## 馃摑 涓嬩竴姝ュ紑鍙戣<E98D99>鍒?
### v2.1 鐗堟湰锛堢煭鏈燂級
1. **RAG检索模式** 🟡
- 实现基于Dify的知识库检索
- 添加工作模式选择器
- 测试检索准确度
1. **RAG妫€绱㈡ā寮?* 馃煛
- 瀹炵幇鍩轰簬Dify鐨勭煡璇嗗簱妫€绱? - 娣诲姞宸ヤ綔妯″紡閫夋嫨鍣? - 娴嬭瘯妫€绱㈠噯纭<E599AF>
2. **鎬ц兘浼樺寲** 馃煛
- 批处理并发优化
- 文档加载缓存
- 鎵瑰<E98EB5>鐞嗗苟鍙戜紭鍖? - 鏂囨。鍔犺浇缂撳瓨
- API鍝嶅簲鏃堕棿浼樺寲
### v2.2 鐗堟湰锛堜腑鏈燂級
3. **批处理增强** 🟢
- 增加药物安全性模板
- 增加患者基线特征模板
- 支持自定义模板
3. **鎵瑰<E98EB5>鐞嗗<E9909E>寮?* 馃煝
- 澧炲姞鑽<E5A79E>墿瀹夊叏鎬фā鏉? - 澧炲姞鎮h€呭熀绾跨壒寰佹ā鏉? - 鏀<>寔鑷<E5AF94>畾涔夋ā鏉?
4. **鐢ㄦ埛浣撻獙浼樺寲** 馃煝
- 鏂囨。绛涢€夊拰鎺掑簭
- 鎵归噺鎿嶄綔
- 快捷键支持
### 中期任务2周内
5. **RAG检索模式**
- 后端API开发
- 前端集成
- 蹇<>嵎閿<E5B58E>敮鎸?
### 涓<>湡浠诲姟锛?鍛ㄥ唴锛?
5. **RAG妫€绱㈡ā寮?*
- 鍚庣<E98D9A>API寮€鍙? - 鍓嶇<E98D93>闆嗘垚
6. **PDF棰勮<E6A3B0>澧炲己**
- 集成PDF查看器
- 支持标注
- 闆嗘垚PDF鏌ョ湅鍣? - 鏀<>寔鏍囨敞
---
## 馃摎 鐩稿叧鏂囨。
### 需求文档
- [PRD V5.0](./01-需求分析/AI%20临床医生与医院知识库%20-%20MVP%20阶段产品需求文档%20(PRD)%20V5.0.md)
- [知识库仪表盘V5原型](./01-需求分析/知识库仪表盘V5.html)
- [工作台V3原型](./01-需求分析/工作台V3.html)
### 闇€姹傛枃妗?- [PRD V5.0](./01-闇€姹傚垎鏋?AI%20涓村簥鍖荤敓涓庡尰闄㈢煡璇嗗簱%20-%20MVP%20闃舵<E99783>у搧闇€姹傛枃妗?20(PRD)%20V5.0.md)
- [鐭ヨ瘑搴撲华琛ㄧ洏V5鍘熷瀷](./01-闇€姹傚垎鏋?鐭ヨ瘑搴撲华琛ㄧ洏V5.html)
- [宸ヤ綔鍙癡3鍘熷瀷](./01-闇€姹傚垎鏋?宸ヤ綔鍙癡3.html)
### 技术文档
- [数据库设计](./02-技术设计/01-数据库设计.md)
### 鎶€鏈<EFBFBD>枃妗?- [鏁版嵁搴撹<E690B4><EFBFBD>(./02-鎶€鏈<E282AC><E98F88>璁?01-鏁版嵁搴撹<E690B4>璁?md)
### 开发记录
- [2026-01-07 前端V3设计实现](./06-开发记录/2026-01-07_PKB模块前端V3设计实现.md)
### 寮€鍙戣<EFBFBD>褰?- [2026-01-07 鍓嶇<E98D93>V3璁捐<E79281>瀹炵幇](./06-寮€鍙戣<E98D99>褰?2026-01-07_PKB妯″潡鍓嶇<E98D93>V3璁捐<E79281>瀹炵幇.md)
### 娴嬭瘯鏂囨。
- [与原型图的差距](./05-测试文档/与原型图的差距.md)
- [涓庡師鍨嬪浘鐨勫樊璺漖(./05-娴嬭瘯鏂囨。/涓庡師鍨嬪浘鐨勫樊璺?md)
---
## 馃帗 缁欐柊寮€鍙戣€呯殑鎻愮ず
### 快速上手
### <EFBFBD>€熶笂鎵?
1. **浜嗚В妯″潡缁撴瀯**
- 阅读本文档了解当前状态
- 查看原型HTML了解UI设计
- 闃呰<E99783><EFBFBD>枃妗簡瑙綋鍓嶇姸鎬? - 鏌ョ湅鍘熷瀷HTML浜嗚ВUI璁捐<E79281>
2. **杩愯<E69DA9>椤圭洰**
```bash
@@ -337,18 +257,14 @@ frontend-v2/src/modules/pkb/
3. **鏌ョ湅鍏抽敭浠g爜**
- `WorkspacePage.tsx` - 宸ヤ綔鍙颁富閫昏緫
- `knowledgeBaseApi.ts` - API璋冪敤
- `useKnowledgeBaseStore.ts` - 状态管理
- `useKnowledgeBaseStore.ts` - 鐘舵€佺<EFBFBD>鐞?
### 娉ㄦ剰浜嬮」
✅ **应该这样做**
1. 使用Zustand管理状态
2. 复用shared/components中的Chat组件
鉁?**搴旇<E690B4>杩欐牱鍋?*锛?1. 浣跨敤Zustand绠悊鐘舵€?2. 澶嶇敤shared/components涓<73>殑Chat缁勪欢
3. 閬靛惊TailwindCSS鏍峰紡瑙勮寖
4. 浣跨敤Ant Design缁勪欢
❌ **不要这样做**
1. 创建新的Chat实现
鉂?**涓嶈<E6B693>杩欐牱鍋?*锛?1. 鍒涘缓鏂扮殑Chat瀹炵幇
2. 鐩存帴鎿嶄綔DOM
3. 浣跨敤琛屽唴鏍峰紡
4. 蹇界暐TypeScript绫诲瀷
@@ -357,45 +273,31 @@ frontend-v2/src/modules/pkb/
## 馃搳 妯″潡缁熻<E7BC81>
### 代码量统计
```
后端代码约1,500行
前端代码约2,300行
总计约3,800行
```
### 浠g爜閲忕粺璁?```
鍚庣<EFBFBD>爜锛氱害1,500琛?鍓嶇<E98D93>爜锛氱害2,300琛?鎬昏<E98EAC>锛氱害3,800琛?```
### 开发进度
```
### 寮€鍙戣繘搴?```
鏁翠綋杩涘害锛氱害75%
- 后端API100%
- Dashboard页面90% ✅
- Workspace页面85% ✅
- 全文阅读模式90% ✅
- 逐篇精读模式85% ✅
- 批处理模式70% 🔧
- RAG检索模式0% ❌
```
- 鍚庣<EFBFBD>API锛?00% 鉁?- Dashboard椤甸潰锛?0% 鉁?- Workspace椤甸潰锛?5% 鉁?- 鍏ㄦ枃闃呰<E99783>妯″紡锛?0% 鉁?- 閫愮瘒绮捐<E7BBAE>妯″紡锛?5% 鉁?- 鎵瑰<E98EB5>鐞嗘ā寮忥細70% 馃敡
- RAG妫€绱㈡ā寮忥細0% 鉂?```
---
## 馃敆 Git鎻愪氦璁板綍
**最新提交**
```
**鏈€鏂版彁浜?*锛?```
5a17d09 feat(pkb): Complete PKB module frontend migration with V3 design
```
**提交内容**
- 后端模块迁移到 /modules/pkb
**鎻愪氦鍐呭<EFBFBD>**锛?- 鍚庣<E98D9A>妯″潡杩佺Щ鍒?/modules/pkb
- 鍓嶇<E98D93>V3璁捐<E79281>瀹炵幇
- 3种工作模式框架
- Chat组件集成
- 3绉嶅伐浣滄ā寮忔<EFBFBD>鏋?- Chat缁勪欢闆嗘垚
---
**鏈€鍚庢洿鏂帮細** 2026-01-07
**文档维护:** PKB模块开发团队
**联系方式:** 项目Issues
**鏂囨。缁存姢锛?* PKB妯″潡寮€鍙戝洟闃?
**鑱旂郴鏂瑰紡锛?* 椤圭洰Issues

View File

@@ -1,164 +1,149 @@
# **AI 临床医生与医院知识库 \- MVP 阶段产品需求文档 (PRD) V5.0**
# **AI 銝游<EFBFBD><EFBFBD><EFBFBD>銝𤾸龫<EFBFBD>䰻霂<EFBFBD><EFBFBD> \- MVP <20>嗆挾鈭批<E988AD><E689B9><EFBFBD><EFBFBD><E79899>獢?(PRD) V5.0**
|
| 版本号 | 日期 | 修改人 | 修改内容 |
| <EFBFBD><EFBFBD>𧋦<EFBFBD>?| <20><EFBFBD> | 靽格㺿鈭?| 靽格㺿<E6A0BC><E3BABF> |
| V4.0 | 2024-06-XX | Product Lead | <20>滨輕蝑𣇉裦 MVP |
| V5.0 | 2024-06-XX | Product Lead | 完整落地版:基于“全量阅读”策略,补全 UI/UX 规范与详细功能定义 |
| V5.0 | 2024-06-XX | Product Lead | 摰峕㟲<EFBFBD>賢𧑐<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>𨅯<EFBFBD><EFBFBD><EFBFBD>霂領<EFBFBD><EFBFBD><EFBFBD><EFBFBD>銵亙<EFBFBD> UI/UX 閫<><E996AB>銝舘祕蝏<E7A595><E89D8F><EFBFBD><EFBFBD>銋?|
## **1\. 核心战略与范围 (Strategy & Scope)**
## **1\. <EFBFBD><EFBFBD><EFBFBD>条裦銝舘<EFBFBD><EFBFBD>?(Strategy & Scope)**
### **1.1 核心价值主张**
放弃传统的“切片式 RAG”利用 DeepSeek-V3 / Qwen-Max 的长窗口能力,通过 **Document-Level RAG (文档级阅读)** 技术,为医生提供**逻辑完整、引用精准**的知识库问答体验。
### **1.1 <EFBFBD><EFBFBD>隞瑕<EFBFBD>潔蜓撘?*
<EFBFBD><EFBFBD>隡删<EFBFBD><EFBFBD><EFBFBD><EFBFBD>𨅯<EFBFBD><EFBFBD><EFBFBD><EFBFBD> RAG<41><EFBFBD><E59885>拍鍂 DeepSeek-V3 / Qwen-Max <20><>鵭蝒堒藁<E5A092><EFBFBD>嚗屸<E59A97><EFBFBD> **Document-Level RAG (<28><>﹝蝥折<E89DA5>霂?** <20><><EFBFBD><EFBFBD>銝箏龫<E7AE8F><E9BEAB><EFBFBD>靘?*<2A><EFBFBD>摰峕㟲<E5B395><E39FB2><EFBFBD><EFBFBD>函移<E587BD>?*<2A><>䰻霂<E4B0BB><E99C82><EFBFBD><EFBFBD>雿㯄<E99BBF><E3AF84>?
### **1.2 MVP <20>嗆挾颲寧<E9A2B2> (Scope Freeze)**
* **适用终端:** Web (PC/Mac 浏览器),兼容 iPad
* **支持格式:** PDF, Word (.docx), PPT (.pptx)
* **硬性限制:** 单库文件数 ≤ 30 个;单文件大小 ≤ 20MB
* **核心场景:** 循证检索 (指南)、深度研读 (文献)、用药助手 (药品)、考典刷题 (考试)。
* **<EFBFBD><EFBFBD>鍂蝏<EFBFBD>:** Web 蝡?(PC/Mac 瘚讛<EFBFBD><EFBFBD>?嚗<><E59A97>摰?iPad<EFBFBD>?
* **<EFBFBD><EFBFBD><EFBFBD><EFBFBD>:** PDF, Word (.docx), PPT (.pptx)<EFBFBD>?
* **蝖祆<EFBFBD><EFBFBD><EFBFBD>?** <20><EFBFBD><E8A8AB><EFBFBD><EFBFBD>?<3F>?30 銝迎<E98A9D><E8BF8E><EFBFBD>隞嗅之撠?<3F>?20MB<EFBFBD>?
* **<EFBFBD><EFBFBD><EFBFBD>箸艶:** 敺芾<E695BA><EFBFBD>蝝?(<28><><EFBFBD>)<29><>楛摨衣<E691A8>霂?(<28><>讃)<29><><EFBFBD>臬𨭌<E887AC>?(<28><EFBFBD>)<29><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (<28><><EFBFBD>)<29>?
## **2\. <20><EFBFBD><E79285>霂行<E99C82> (Detailed Requirements)**
### **2.1 璅<E79285><EFBFBD>嚗帋貌銵函<E98AB5> (Dashboard)**
**用户故事:** 作为医生,我希望一眼看到我有多少个知识库,并能快速创建一个新的专科知识库。
#### **2.1.1 页面布局与 UI 规范**
**<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:** 雿靝蛹<E99D9D><EFBFBD>嚗峕<E59A97>撣峕<E692A3><EFBFBD><E98A9D><EFBFBD><E6BD9B><EFBFBD><E594B3><EFBFBD>撠睲葵<E79DB2><EFBFBD>摨橒<E691A8>撟嗉<E6929F>敹恍<E695B9><EFBFBD>撱箔<E692B1>銝芣鰵<E88AA3><E9B0B5><EFBFBD>蝘𤑳䰻霂<E4B0BB><E99C82><EFBFBD>?
#### **2.1.1 憿菟𢒰撣<F0A292B0><E692A3>銝?UI 閫<><E996AB>**
* **撣<><E692A3>蝏𤘪<E89D8F>:**
* **顶部:** 全局导航栏 (Logo \+$$智能统计$$$$智能清洗$$$$\*\*AI 知识库\*\*$$$$AI 问答$$
\+ 头像)。
* **主体:** "1+3" 卡片阵列布局 (Grid System)
* **憿園<EFBFBD>:** <EFBFBD><EFBFBD>撖潸⏛<EFBFBD>?(Logo \+$$<EFBFBD><EFBFBD>蝏蠘恣$$$$<24><EFBFBD><EFBFBD><E79A9C>$$$$\*\*AI <EFBFBD><EFBFBD>摨脪*\*$$$$AI <EFBFBD><EFBFBD>$$
\+ 憭游<EFBFBD>)<29>?
* **銝颱<EFBFBD>:** "1+3" <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (Grid System)<EFBFBD>?
* **<2A><EFBFBD>霈曇恣:**
* **Slot 1 (<28>啣遣<E595A3>亙藁):**
* **样式:** 浅蓝色渐变背景 (bg-blue-50),深蓝色虚线边框。
* **内容:** 大号 "+" 图标,文案 "创建知识库",下方并列展示 5 个场景图标 (指南/文献/病例/药品/考试) 以提示能力。
* **Slot 2-N (现有知识库):**
* **样式:** 白色卡片,微阴影 (shadow-sm \-\> hover shadow-md)
* **内容:** 图标(左上) \+ 标题(加粗) \+ 类型标签(胶囊样式) \+ "进入工作台"按钮(底部通栏)。
* **<EFBFBD><EFBFBD>:** <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>?(bg-blue-50)嚗峕楛<EFBFBD>肽𠧧<EFBFBD>𡁶瑪颲寞<EFBFBD><EFBFBD>?
* **<EFBFBD><EFBFBD>:** 憭批噡 "+" <EFBFBD><EFBFBD>嚗峕<EFBFBD>獢?"<22>𥕦遣<F0A595A6><EFBFBD>摨?嚗䔶<E59A97><E494B6>孵僎<E5ADB5><EFBFBD>蝷?5 銝芸㦤<E88AB8>臬㦛<E887AC>?(<28><><EFBFBD>/<2F><>讃/<2F><><EFBFBD>/<2F><EFBFBD>/<2F><><EFBFBD>) 隞交<E99A9E>蝷箄<E89DB7><E7AE84><EFBFBD>?
* **Slot 2-N (<EFBFBD><EFBFBD><EFBFBD><EFBFBD>摨?:**
* **<EFBFBD><EFBFBD>:** <EFBFBD>質𠧧<EFBFBD><EFBFBD><EFBFBD><EFBFBD>游蔣 (shadow-sm \-\> hover shadow-md)<EFBFBD>?
* **<EFBFBD><EFBFBD>:** <EFBFBD><EFBFBD>(撌虫<E6928C>) \+ <20><><EFBFBD>(<28><EFBFBD>) \+ 蝐餃<E89D90><E9A483><EFBFBD>倌(<28><EFBFBD><E59785><EFBFBD>) \+ "餈𥕦<E9A488>撌乩<E6928C><E4B9A9>?<3F>厰僼(摨閖<E691A8><E99696>𡁏<EFBFBD>)<29>?
#### **2.1.2 鈭支<E988AD><EFBFBD><E7989A>嚗𡁜<E59A97>撱箇䰻霂<E4B0BB><E99C82>**
* **触发:** 点击“创建知识库”卡片 \-\> 弹出模态框 (Modal)
* **閫血<EFBFBD>:** <EFBFBD>孵稬<EFBFBD>𨅯<EFBFBD>撱箇䰻霂<EFBFBD><EFBFBD><EFBFBD>嘥㨃<EFBFBD>?\-\> 撘孵枂璅⊥<E79285><E28AA5><EFBFBD> (Modal)<EFBFBD>?
* **Step 1: 蝐餃<E89D90><E9A483>㗇𥋘 (Type Selection)**
* **UI:** 5 个大卡片网格。
* **UI:** 5 銝芸之<EFBFBD><EFBFBD>蝵烐聢<EFBFBD>?
* **<2A>厰★:**
1. **循证检索 (指南):** 图标 BookOpen (Blue)。文案:"查诊疗标准、用药剂量"。
2. **深度研读 (文献):** 图标 Microscope (Purple)。文案:"文献综述、横向对比"。
3. **临床决策 (病例):** 图标 Stethoscope (Green)。文案:"疑难病例参考"。
4. **用药助手 (药品):** 图标 Pill (Rose)。文案:"查配伍禁忌"。
5. **考典刷题 (考试):** 图标 GraduationCap (Orange)。文案:"主治/副高备考"。
1. **敺芾<EFBFBD><EFBFBD>蝝?(<28><><EFBFBD>):** <EFBFBD><EFBFBD> BookOpen (Blue)<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>"<22><EFBFBD><E4BAA5><EFBFBD><E59F88><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E887AC>?<3F>?
2. **瘛勗漲<EFBFBD>磰粉 (<28><>):** <EFBFBD><EFBFBD> Microscope (Purple)<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>"<22><>讃蝏潸膩<E6BDB8><E886A9><EFBFBD>穃笆瘥?<3F>?
3. **銝游<EFBFBD><EFBFBD><EFBFBD> (<28><><EFBFBD>):** <EFBFBD><EFBFBD> Stethoscope (Green)<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>"<22>煾𠗕<E785BE><F0A09795><EFBFBD><EFBFBD><EFBFBD><EFBFBD>?<3F>?
4. **<EFBFBD>刻晓<EFBFBD><EFBFBD> (<28><EFBFBD>):** <20><EFBFBD> Pill (Rose)<29><><EFBFBD><EFBFBD><E78DA2>"<22>仿<EFBFBD>隡滨<E99AA1>敹?<3F>?
5. **<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (<28><><EFBFBD>):** <20><EFBFBD> GraduationCap (Orange)<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>"銝餅祥/<2F><EFBFBD><EFBFBD><E686AD>?<3F>?
* **Step 2: <20><EFBFBD>靽⊥<E99DBD> & 閫坿𠧧瘜典<E7989C>**
* **字段:** 知识库名称 (必填)、所属科室 (下拉选:心内/呼吸/消化...)
* **逻辑:** 选中“心内科”后,后端自动在 System Prompt 中注入 *"你是一名心内科专家..."*
* **摮埈挾:** <EFBFBD><EFBFBD>摨枏<EFBFBD>蝘?(敹<>)<29><><EFBFBD>撅䂿<E69285>摰?(銝𧢲<E98A9D><F0A7A2B2><EFBFBD><EFBFBD><E695B9>/<2F>澆𢙺/瘨<><E798A8>...)<EFBFBD>?
* **<EFBFBD><EFBFBD>:** <EFBFBD>劐葉<EFBFBD>𨅯<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>蝡航䌊<EFBFBD>典銁 System Prompt 銝剜釣<E5899C>?*"雿䭾糓銝<E7B393><E98A9D><EFBFBD><E6BB9A><EFBFBD><EFBFBD>銝枏振..."*<2A>?
* **Step 3: <20><>辣銝𠹺<E98A9D> (Upload)**
* **UI:** 大面积拖拽上传区 (Dropzone)
* **UI:** 憭折𢒰蝘舀<EFBFBD><EFBFBD><EFBFBD>隡惩躹 (Dropzone)<EFBFBD>?
* **<2A><EFBFBD>:**
* 前端校验大小 (\>20MB 飘红报错)。
* 前端校验数量 (\>30 个 飘红报错)。
* 上传成功后显示列表,状态流转:上传中... \-\> 就绪。
* <EFBFBD>滨垢<EFBFBD><EFBFBD>憭批<EFBFBD> (\>20MB 憌条滯<E69DA1>仿<EFBFBD>)<29>?
* <EFBFBD>滨垢<EFBFBD><EFBFBD><EFBFBD><EFBFBD> (\>30 銝?憌条滯<E69DA1>仿<EFBFBD>)<29>?
* 銝𠹺<EFBFBD><EFBFBD>𣂼<EFBFBD><EFBFBD>擧遬蝷箏<EFBFBD>銵剁<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>頧穿<EFBFBD>銝𠹺<EFBFBD>銝?.. \-\> 撠梁貌<EFBFBD>?
### **2.2 璅<E79285>鈭䕘<E988AD>瘝㗇絡撘誩極雿𨅯蝱 (Workspace)**
**用户故事:** 作为医生,我希望在一个无干扰的环境中与我的资料对话,并能随时核对原文。
**<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:** 雿靝蛹<E99D9D><EFBFBD>嚗峕<E59A97>撣峕<E692A3><E5B395><EFBFBD>銝芣<E98A9D>撟脫贋<E884AB><E8B48B>㴓憓<E3B493>葉銝擧<E98A9D><E693A7><EFBFBD><EFBFBD><EFBFBD>坔笆霂嘅<E99C82>撟嗉<E6929F><E59789>𤩺𧒄<F0A4A9BA>詨笆<E8A9A8><E7AC86><EFBFBD><EFBFBD>?
#### **2.2.1 <20><EFBFBD><EFBFBD>沲 (Immersive Layout)**
* **憿園<E686BF>撖潸⏛ (Header):**
* **样式:** 深色背景 (bg-slate-900),高度 56px
* **左侧:** \< 返回 (白色文字按钮,点击返回 Dashboard)
* **中间:** 知识库名称 \+ 图标。
* **右侧:** 简单的设置齿轮。
* **<EFBFBD><EFBFBD>:** 瘛梯𠧧<EFBFBD>峕艶 (bg-slate-900)嚗屸<EFBFBD>摨?56px<EFBFBD>?
* **撌虫儒:** \< 餈𥪜<EFBFBD> (<28>質𠧧<E8B3AA><F0A0A7A7><EFBFBD><EFBFBD>厰僼嚗𣬚<E59A97><F0A3AC9A><EFBFBD><E9A489>?Dashboard)<EFBFBD>?
* **銝剝𡢿:** <EFBFBD><EFBFBD>摨枏<EFBFBD>蝘?\+ <20><EFBFBD><E69AB9>?
* **<EFBFBD>喃儒:** <EFBFBD><EFBFBD><EFBFBD>霈曄蔭朣輯蔭<EFBFBD>?
* **璅<E79285><E288AA><EFBFBD>揢 (Tabs):**
* 位于 Header 下方,白色背景,高度 48px
* **Tab A:** \[💬 智能问答\] (默认选中,底部蓝条)。
* **Tab B:** \[📂 知识资产\] (显示文件计数 Badge)
#### **2.2.2 视图 A智能问答 (Smart Chat)**
* 雿滢<EFBFBD> Header 銝𧢲䲮嚗𣬚蒾<EFBFBD><EFBFBD><EFBFBD><EFBFBD>擃睃漲 48px<EFBFBD>?
* **Tab A:** \[<EFBFBD><20><EFBFBD><E7AE84><EFBFBD>\] (暺䁅恕<E48185>劐葉嚗<E89189><E59A97><EFBFBD><EFBFBD><E588BB>?<3F>?
* **Tab B:** \[<EFBFBD><EFBFBD> <20><EFBFBD><EFBFBD>漣\] (<28>曄內<E69B84><E585A7>辣霈⊥㺭 Badge)<EFBFBD>?
#### **2.2.2 閫<>㦛 A嚗𡁏惣<F0A1818F>賡䔮蝑?(Smart Chat)**
* **撣<><E692A3>:**
* **默认:** 单栏宽屏聊天窗口 (最大宽度 900px居中)。
* **扩展:** 当点击引用或手动展开时,右侧滑出 PDF 阅读器 (占比 45%),聊天窗自动收缩至左侧。
* **暺䁅恕:** <EFBFBD><EFBFBD>摰賢<EFBFBD><EFBFBD>𠰴予蝒堒藁 (<28><>憭批捐摨?900px嚗<78><E59A97>銝?<3F>?
* **<EFBFBD><EFBFBD>:** 敶梶<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>见𢆡撅訫<EFBFBD><EFBFBD><EFBFBD><EFBFBD>喃儒皛穃枂 PDF <20><><EFBFBD>?(<28><EFBFBD> 45%)嚗諹<E59A97>憭拍<E686AD><E68B8D>芸𢆡<E88AB8>嗥憬<E597A5>喳椰靘扼<E99D98>?
* **撖寡<E69296>鈭支<E988AD> (Chat Interaction):**
* **输入框:** 底部固定。支持 Shift+Enter 换行。
* **AI 回答:** 流式输出 (Typewriter Effect)
* **引用标注:** 必须以 \[文档名\] 或 \[1\] 形式高亮显示,颜色为品牌蓝。
* **颲枏<EFBFBD>獢?** 摨閖<E691A8><E99696><EFBFBD><E7AE8F><EFBFBD>𣈲<EFBFBD>?Shift+Enter <EFBFBD><EFBFBD><EFBFBD>?
* **AI <EFBFBD><EFBFBD>:** <EFBFBD><EFBFBD>颲枏枂 (Typewriter Effect)<EFBFBD>?
* **撘閧鍂<EFBFBD><EFBFBD>釣:** 敹<>◆隞?\[<5B><><EFBFBD>㙡] <20>?\[1\] 敶<E695B6>擃䀝漁<E4809D>曄內嚗屸<E59A97><E5B1B8>脖蛹<E88496><E89BB9><EFBFBD><EFBFBD><EFBFBD>?
* **<2A>𡒊垢蝑𣇉裦頝舐眏 (<28><EFBFBD><E8A9A8><EFBFBD>):**
* **场景一 (小库直读):** 知识库总 Token \< 32k
* *UI:* 顶部 Toast 提示 "已加载全量上下文AI 具备全知视角"。
* **场景二 (大库路由):** 知识库总 Token \> 32k
* *UI:* 用户提问后,输入框上方出现微型 Loading 状态 —— "正在分析摘要..." \-\> "已定位至《2024指南》等 3 篇文档" \-\> 开始回答。
#### **2.2.3 视图 B知识资产 (Assets Management)**
* **UI 形式:** 全屏数据表格 (Table)。
* **列定义:**
1. **文件名:** 图标 (PDF/Word) \+ 名称。
2. **AI 摘要:** 展示 2-3 行核心摘要文本 (由 DeepSeek 生成),支持 hover 查看全部。
3. **状态:** 准备中 (灰色) / 就绪 (绿色) / 失败 (红色)。
4. **操作:** 预览、删除。
* **筛选器:** 右上角“筛选”按钮,点击弹出下拉面板 (按时间/状态/类型)。
* **<EFBFBD>箸艶銝<EFBFBD> (撠誩<E692A0><E8AAA9>渲粉):** <20><EFBFBD>摨𤘪<E691A8>?Token \< 32k<EFBFBD>?
* *UI:* 憿園<EFBFBD> Toast <EFBFBD>鞟內 "撌脣<E6928C>頧賢<E9A0A7><E8B3A2><EFBFBD>銝𧢲<E98A9D>嚗淾I <20><EFBFBD><E79195>函䰻閫<E4B0BB><E996AB>"<22>?
* **<EFBFBD>箸艶鈭?(憭批<E686AD>頝舐眏):** <20><EFBFBD>摨𤘪<E691A8>?Token \> 32k<EFBFBD>?
* *UI:* <EFBFBD><EFBFBD><EFBFBD>鞾䔮<EFBFBD>𠬍<EFBFBD>颲枏<EFBFBD><EFBFBD><EFBFBD><EFBFBD>孵枂<EFBFBD>啣凝<EFBFBD>?Loading <20><EFBFBD>?<3F><EFBFBD>?"甇<><EFBFBD><E98A81><EFBFBD><EFBFBD><EFBFBD>..." \-\> "撌脣<E6928C>雿滩秐<E6BBA9>?024<32><34><EFBFBD><EFBFBD><EFBFBD> 3 蝭<><E89DAD>獢? \-\> 撘<>憪见<E686AA>蝑𢛵<E89D91>?
#### **2.2.3 閫<>㦛 B嚗𡁶䰻霂<E4B0BB><E99C82>鈭?(Assets Management)**
* **UI 敶<E695B6>:** <20><EFBFBD><E585B8>唳旿銵冽聢 (Table)<29>?
* **<2A><EFBFBD>銋?**
1. **<EFBFBD><EFBFBD><EFBFBD>?** <20><EFBFBD> (PDF/Word) \+ <20>滨妍<E6BBA8>?
2. **AI <20><EFBFBD>:** 撅閧內 2-3 銵峕瓲敹<E793B2><E695B9><EFBFBD><E996AC><EFBFBD>?(<28>?DeepSeek <20><><EFBFBD>)嚗峕𣈲<E5B395>?hover <20><EFBFBD><E4BAA6><EFBFBD><E588B8>?
3. **<EFBFBD><EFBFBD>?** <20><><EFBFBD>銝?(<28>啗𠧧) / 撠梁貌 (蝏輯𠧧) / 憭梯揖 (蝥Z𠧧)<29>?
4. **<EFBFBD><EFBFBD>:** 憸<><E686B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>?
* **蝑偦<E89D91>匧膥:** <20><EFBFBD>閫圝<E996AB>𦦵<EFBFBD><F0A6A6B5><EFBFBD><EFBFBD><E884B2><EFBFBD><E6AEB7>孵稬撘孵枂銝𧢲<E98A9D><F0A7A2B2>踎 (<28>㗇𧒄<E39787>?<3F><EFBFBD>?蝐餃<E89D90>)<29>?
## **3\. 霂衣<E99C82> UI/UX 霈曇恣閫<E681A3><E996AB> (Design Specs)**
銝箇靽肽<EFBFBD><EFBFBD>笔漲嚗諹窈 UI 霈曇恣撣<E681A3><E692A3><EFBFBD>滨垢撘<E59EA2><E69298><EFBFBD>敺芯誑銝贝<E98A9D><E8B49D><EFBFBD><EFBFBD>
### **3.1 <20>脣蔗雿梶頂 (Color Palette)**
使用 Tailwind CSS 默认色板:
* **主色 (Primary):** Blue-600 (\#2563EB) \- 用于按钮、链接、高亮。
* **场景色 (Category Colors):**
雿輻鍂 Tailwind CSS 暺䁅恕<EFBFBD>脫踎嚗?
* **銝餉𠧧 (Primary):** Blue-600 (\#2563EB) \- <20><EFBFBD><E585B6>厰僼<E58EB0><E583BC><EFBFBD><EFBFBD><E4B993><EFBFBD>鈭柴<E988AD>?
* **<2A>箸艶<E7AEB8>?(Category Colors):**
* <20><><EFBFBD>: Blue-500
* <20><>讃: Purple-600
* <20><><EFBFBD>: Emerald-600
* <20><EFBFBD>: Rose-600
* <20><><EFBFBD>: Orange-500
* **中性色:** Slate-50 (背景), Slate-900 (Header), Slate-500 (次要文字)。
* **銝剜<EFBFBD>扯𠧧:** Slate-50 (<EFBFBD>峕艶), Slate-900 (Header), Slate-500 (甈∟<EFBFBD><EFBFBD><EFBFBD><EFBFBD>)<29>?
### **3.2 <20><EFBFBD>蝟餌<E89D9F> (Iconography)**
* **风格:** 线性图标 (Stroke 2px)
* **技术:** 使用 **Inline SVG** (参考 TDD V3.0 Icons 常量),严禁引入外部 Icon Font
* **憌擧聢:** 蝥踵<EFBFBD>批㦛<EFBFBD>?(Stroke 2px)<EFBFBD>?
* **<EFBFBD><EFBFBD><EFBFBD>?** 雿輻鍂 **Inline SVG** (<EFBFBD><EFBFBD><EFBFBD>?TDD V3.0 <EFBFBD>?Icons 撣賊<EFBFBD>)嚗䔶艇蝳<E88987><E89DB3><EFBFBD><EFBFBD><E4BA99>?Icon Font<EFBFBD>?
### **3.3 摮𦯀<E691AE>銝擧<E98A9D><E693A7>?*
### **3.3 字体与排版**
* **字体:** 系统默认无衬线字体 (Inter, Roboto, PingFang SC)。
* **摮𦯀<E691AE>:** 蝟餌<E89D9F>暺䁅恕<E48185>蝥踹<E89DA5>雿?(Inter, Roboto, PingFang SC)<29>?
* **摮堒噡:**
* H1 (憿菟𢒰<E88F9F><F0A292B0><EFBFBD>): 20px Bold
* H2 (璅<E79285><E288AA><EFBFBD><EFBFBD>): 16px Bold
* Body (甇<><E79487>): 14px Regular (銵屸<E98AB5> 1.6)
* Caption (霂湔<E99C82>): 12px Text-Slate-400
## **4\. 异常流程与边界处理 (Exception Handling)**
## **4\. <EFBFBD>虜瘚<EFBFBD><EFBFBD>銝舘器<EFBFBD><EFBFBD><EFBFBD><EFBFBD>?(Exception Handling)**
### **4.1 銝𠹺<E98A9D>憭梯揖**
* **场景:** 用户上传了加密 PDF 或损坏文件。
* **后端:** 解析器捕获异常,返回 status: FAILEDerror\_msg: "File encrypted"
* **前端:** 资产列表中该行变红,显示“解析失败:文件已加密”,并提供“删除”按钮。
* **<EFBFBD>箸艶:** <EFBFBD><EFBFBD>銝𠹺<EFBFBD><EFBFBD><EFBFBD>撖?PDF <20>𡝗<EFBFBD><F0A19D97>𤩺<EFBFBD>隞嗚<E99A9E>?
* **<EFBFBD>𡒊垢:** <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>撣賂<EFBFBD>餈𥪜<EFBFBD> status: FAILED嚗𨫪rror\_msg: "File encrypted"<EFBFBD>?
* **<EFBFBD>滨垢:** <EFBFBD><EFBFBD>𡑒”銝剛砲銵<EFBFBD><EFBFBD><EFBFBD><EFBFBD>曄內<EFBFBD>𡏭圾<EFBFBD>𣂼仃韐伐<EFBFBD><EFBFBD><EFBFBD>辣撌脣<EFBFBD><EFBFBD><EFBFBD><EFBFBD>撟嗆<EFBFBD>靘𥕞<EFBFBD>𨅯<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>?
### **4.2 AI <20><EFBFBD><EFBFBD>𧒄/憭梯揖**
* **场景:** DeepSeek API 响应超时 (\>60s)
* **<EFBFBD>箸艶:** DeepSeek API <EFBFBD><EFBFBD><EFBFBD>𧒄 (\>60s)<EFBFBD>?
* **UI:**
* 消息气泡显示红色感叹号。
* 提示文案: "AI 思考超时,请尝试精简问题或重试。"
* <EFBFBD><EFBFBD>瘞娍部<EFBFBD>曄內蝥𠧧<EFBFBD>笔桖<EFBFBD><EFBFBD>?
* <EFBFBD>鞟內<EFBFBD><EFBFBD><EFBFBD>: "AI <20><EFBFBD><E882BD><EFBFBD><EFBFBD><EFBFBD>霂瑕<E99C82>霂閧移蝞<E7A7BB><E89D9E><EFBFBD><E6A185><EFBFBD>霂𨰻<E99C82>?
* <20>𣂷<EFBFBD>$$<24><EFBFBD>$$
按钮。
### **4.3 引用源定位失败**
* **场景:** 用户点击 \[1\],但该文件已被删除。
* **UI:** 弹出 Toast 提示 "源文件已被删除,无法查看原文"。
<EFBFBD>厰僼<EFBFBD>?
### **4.3 撘閧鍂皞𣂼<E79A9E>雿滚仃韐?*
* **<2A>箸艶:** <20><EFBFBD><E586BD>孵稬 \[1\]嚗䔶<E59A97>霂交<E99C82>隞嗅歇鋡怠<E98BA1><E680A0><EFBFBD>?
* **UI:** 撘孵枂 Toast <20>鞟內 "皞鞉<E79A9E>隞嗅歇鋡怠<E98BA1><E680A0><EFBFBD><E6ADB9><EFBFBD><E4ADBE><EFBFBD><E4BAA6><EFBFBD><EFBFBD>"<22>?
## **5\. 撉峕𤣰瘚贝<E7989A><E8B49D><EFBFBD><EFBFBD> (QA Acceptance)**
| ID | 测试点 | 预期结果 | 优先级 |
| TC01 | 格式兼容性 | 上传 .pdf, .docx, .pptx 文件,均能在资产列表显示“就绪”,且能被检索到。 | P0 |
| TC02 | 边界限制 | 尝试上传第 31 个文件,前端应阻止上传并弹窗提示限制。 | P0 |
| TC03 | 引用跳转 | 提问后,点击回答中的 \[文档名\],右侧面板应滑出并正确加载该文档。 | P0 |
| TC04 | Word表格解析 | 上传包含表格的 Word 指南询问表格内数据AI 应能准确回答数值。 | P1 |
| TC05 | 路由逻辑 | \>32k Token 的库中提问,观察 Network 请求,应看到系统先请求了摘要接口,再请求了全文接口。 | P1 |
| ID | 瘚贝<EFBFBD><EFBFBD>?| 憸<><E686B8>蝏𤘪<E89D8F> | 隡睃<E99AA1>蝥?|
| TC01 | <EFBFBD><EFBFBD><EFBFBD>澆捆<EFBFBD>?| 銝𠹺<E98A9D> .pdf, .docx, .pptx <EFBFBD><EFBFBD>辣嚗<EFBFBD><EFBFBD><EFBFBD>賢銁韏<EFBFBD><EFBFBD>𡑒”<EFBFBD>曄內<EFBFBD>𨅯停蝏芬<EFBFBD><EFBFBD>銝磰<EFBFBD>鋡急<EFBFBD><EFBFBD><EFBFBD>?| P0 |
| TC02 | 颲寧<EFBFBD><EFBFBD>𣂼<EFBFBD> | 撠肽<E692A0>銝𠹺<E98A9D>蝚?31 銝芣<E98A9D>隞塚<E99A9E><E5A19A>滨垢摨娪獈甇<E79487>隡惩僎撘寧<E69298><E5AFA7>鞟內<E99E9F>𣂼<EFBFBD><F0A382BC>?| P0 |
| TC03 | 撘閧鍂頝唾蓮 | <20>鞾䔮<E99EBE>𠬍<EFBFBD><F0A0AC8D>孵稬<E5ADB5><EFBFBD>銝剔<E98A9D> \[<5B><><EFBFBD>㙡]嚗<>𢰧靘折𢒰<E68A98><EFBFBD>皛穃枂撟嗆迤蝖桀<E89D96>頧質砲<E8B3AA><E7A0B2><EFBFBD>?| P0 |
| TC04 | Word銵冽聢閫<EFBFBD><EFBFBD> | 銝𠹺<E98A9D><F0A0B9BA><EFBFBD>鉄銵冽聢<E586BD>?Word <20><><EFBFBD>嚗諹砭<E8ABB9>株”<E6A0AA><EFBFBD><E6BE86>唳旿嚗淾I 摨磰<E691A8><E7A3B0><EFBFBD><EFBFBD><EFBFBD><E482BF><EFBFBD><EFBFBD>?| P1 |
| TC05 | 頝舐眏<EFBFBD><EFBFBD> | <EFBFBD>?\>32k Token <EFBFBD><EFBFBD><EFBFBD>銝剜<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Network 霂瑟<E99C82><EFBFBD><E59A97><EFBFBD><EFBFBD>蝟餌<E89D9F><E9A48C><EFBFBD>窈瘙<E7AA88><E79899><EFBFBD><EFBFBD><E48185>亙藁嚗<E89781><E59A97>霂瑟<E99C82><EFBFBD><E988AD><EFBFBD><EFBFBD>𦻖<EFBFBD><F0A6BB96><EFBFBD>?| P1 |

View File

@@ -1,9 +1,9 @@
# PKB - 个人知识库模块:数据库设计
# PKB - <EFBFBD>汉鐭ヨ瘑搴撴ā鍧楋細鏁版嵁搴撹<EFBFBD>璁?
> **版本:** v1.0
> **更新时间:** 2025-11-12
> **数据库Schema** `pkb_schema`
> **状态:** ✅ 已实施并迁移
> **鐗堟湰锛?* v1.0
> **鏇存柊鏃堕棿锛?* 2025-11-12
> **鏁版嵁搴揝chema锛?* `pkb_schema`
> **鐘舵€侊細** 鉁?宸插疄鏂藉苟杩佺Щ
---
@@ -23,25 +23,25 @@
### 鍔熻兘瀹氫綅
**PKBPersonal Knowledge Base- 个人知识库模块**提供文献管理和智能问答能力,核心功能:
**PKB锛圥ersonal Knowledge Base锛? 涓<>汉鐭ヨ瘑搴撴ā鍧?*鎻愪緵鏂囩尞绠$悊鍜屾櫤鑳介棶绛旇兘鍔涳紝鏍稿績鍔熻兘锛?
1. **知识库管理** - 创建和管理个人知识库
2. **文档上传** - 支持PDF/Word/TXT等格式文档
1. **鐭ヨ瘑搴撶<EFBFBD>鐞?* - 鍒涘缓鍜岀<E98D9C>鐞嗕釜浜虹煡璇嗗簱
2. **鏂囨。涓婁紶** - <EFBFBD>PDF/Word/TXT绛夋牸寮忔枃妗?
3. **鏅鸿兘闂<E58598>** - 鍩轰簬鐭ヨ瘑搴撶殑RAG锛堟<E9949B>绱㈠<E7BBB1>寮虹敓鎴愶級瀵硅瘽
4. **批处理任务** - 批量处理文献提取Phase 3
5. **任务模板** - 预定义的批处理任务模板(Phase 3
4. **鎵瑰<EFBFBD>鐞嗕换鍔?* - 鎵归噺澶勭悊鏂囩尞鎻愬彇锛圥hase 3锛?
5. **浠诲姟妯℃澘** - 棰勫畾涔夌殑鎵瑰<EFBFBD>鐞嗕换鍔℃ā鏉匡紙Phase 3锛?
### 鏍稿績涓氬姟鍦烘櫙
- 用户创建知识库(如"CLL相关知识库"
- 鐢ㄦ埛鍒涘缓鐭ヨ瘑搴擄紙濡?CLL鐩稿叧鐭ヨ瘑搴?锛?
- 涓婁紶PDF鏂囩尞鍒扮煡璇嗗簱
-<>姩鎻愬彇鏂囨湰骞跺悜閲忓寲
- 基于知识库进行智能问答
- 批量提取文献中的结构化信息
- 鍩轰簬鐭ヨ瘑搴撹繘琛屾櫤鑳介棶绛?
- 鎵归噺鎻愬彇鏂囩尞涓<EFBFBD>殑缁撴瀯鍖栦俊鎭?
### 涓嶥ify骞冲彴闆嗘垚
PKB模块深度集成Dify平台
PKB妯″潡娣卞害闆嗘垚Dify骞冲彴锛?
- 姣忎釜鐭ヨ瘑搴撳<E690B4>搴斾竴涓狣ify Dataset
- 姣忎釜鏂囨。瀵瑰簲涓€涓狣ify Document
- 浣跨敤Dify鐨勫悜閲忔<E996B2>绱㈠拰RAG鑳藉姏
@@ -62,26 +62,26 @@ GRANT ALL ON SCHEMA pkb_schema TO aiclinical_admin;
```
### 鏁版嵁杩佺Щ
- **迁移时间:** 2025-11-12
- **源Schema** public
- **迁移脚本:** `docs/09-架构实施/migration-scripts/004-migrate-pkb.sql`
- **数据完整性:** 100%迁移成功
- **杩佺Щ鏃堕棿锛?* 2025-11-12
- **婧怱chema锛?* public
- **杩佺Щ鑴氭湰锛?* `docs/09-鏋舵瀯瀹炴柦/migration-scripts/004-migrate-pkb.sql`
- **鏁版嵁瀹屾暣鎬э細** 鉁?100%杩佺Щ鎴愬姛
---
## 鏁版嵁搴撹〃璁捐<E79281>
### 表列表
### 琛ㄥ垪琛?
| 表名 | 用途 | 行数(估计) | 状态 |
| 琛ㄥ悕 | 鐢ㄩ€?| 琛屾暟锛堜及璁★級 | 鐘舵€?|
|------|------|------------|------|
| `knowledge_bases` | 知识库 | 5-50/用户 | ✅ 已部署 |
| `documents` | 文档 | 10-1000/知识库 | ✅ 已部署 |
| `batch_tasks` | 批处理任务 | 1-100/知识库 | ✅ Phase 3 |
| `batch_results` | 批处理结果 | N条/任务 | Phase 3 |
| `task_templates` | 任务模板 | 10-50/用户 | Phase 3(预留) |
| `knowledge_bases` | 鐭ヨ瘑搴?| 5-50/鐢ㄦ埛 | 鉁?宸查儴缃?|
| `documents` | 鏂囨。 | 10-1000/鐭ヨ瘑搴?| 鉁?宸查儴缃?|
| `batch_tasks` | 鎵瑰<EFBFBD>鐞嗕换鍔?| 1-100/鐭ヨ瘑搴?| 鉁?Phase 3 |
| `batch_results` | 鎵瑰<EFBFBD>鐞嗙粨鏋?| N鏉?浠诲姟 | 鉁?Phase 3 |
| `task_templates` | 浠诲姟妯℃澘 | 10-50/鐢ㄦ埛 | 鉁?Phase 3锛堥<EFBFBD>鐣欙級 |
**总计:** 5个表2个核心表 + 3个Phase 3表)
**鎬昏<EFBFBD>锛?* 5涓<35>〃锛?涓<>牳蹇冭〃 + 3涓狿hase 3<EFBFBD>
---
@@ -89,17 +89,17 @@ GRANT ALL ON SCHEMA pkb_schema TO aiclinical_admin;
**鐢ㄩ€旓細** 瀛樺偍鐢ㄦ埛鍒涘缓鐨勪釜浜虹煡璇嗗簱
#### 表结构
#### 琛ㄧ粨鏋?
| 字段名 | 数据类型 | 约束 | 说明 |
| 瀛楁<EFBFBD>鍚?| 鏁版嵁绫诲瀷 | 绾︽潫 | 璇存槑 |
|--------|---------|------|------|
| id | TEXT | PRIMARY KEY | 知识库唯一标识UUID |
| id | TEXT | PRIMARY KEY | 鐭ヨ瘑搴撳敮涓€鏍囪瘑锛圲UID锛?|
| user_id | TEXT | NOT NULL, FK | 鎵€灞炵敤鎴稩D |
| name | TEXT | NOT NULL | 知识库名称 |
| description | TEXT | NULL | 知识库描述 |
| name | TEXT | NOT NULL | 鐭ヨ瘑搴撳悕绉?|
| description | TEXT | NULL | 鐭ヨ瘑搴撴弿杩?|
| dify_dataset_id | TEXT | NOT NULL, UNIQUE | Dify骞冲彴鐨凞ataset ID |
| file_count | INTEGER | NOT NULL, DEFAULT 0 | 鏂囦欢鏁伴噺 |
| total_size_bytes | BIGINT | NOT NULL, DEFAULT 0 | 总文件大小(字节) |
| total_size_bytes | BIGINT | NOT NULL, DEFAULT 0 | 鎬绘枃浠跺ぇ灏忥紙瀛楄妭锛?|
| created_at | TIMESTAMPTZ | NOT NULL, DEFAULT now() | 鍒涘缓鏃堕棿 |
| updated_at | TIMESTAMPTZ | NOT NULL | 鏇存柊鏃堕棿 |
@@ -138,32 +138,32 @@ model KnowledgeBase {
---
### 2. documents - 文档表
### 2. documents - 鏂囨。琛?
**用途:** 存储知识库中的文档信息
**鐢ㄩ€旓細** 瀛樺偍鐭ヨ瘑搴撲腑鐨勬枃妗d俊鎭?
#### 表结构
#### 琛ㄧ粨鏋?
| 字段名 | 数据类型 | 约束 | 说明 |
| 瀛楁<EFBFBD>鍚?| 鏁版嵁绫诲瀷 | 绾︽潫 | 璇存槑 |
|--------|---------|------|------|
| id | TEXT | PRIMARY KEY | 文档唯一标识UUID |
| id | TEXT | PRIMARY KEY | 鏂囨。鍞<EFBFBD>竴鏍囪瘑锛圲UID锛?|
| kb_id | TEXT | NOT NULL, FK | 鎵€灞炵煡璇嗗簱ID |
| user_id | TEXT | NOT NULL, FK | 鎵€灞炵敤鎴稩D |
| filename | TEXT | NOT NULL | 文件名 |
| filename | TEXT | NOT NULL | 鏂囦欢鍚?|
| file_type | TEXT | NOT NULL | 鏂囦欢绫诲瀷锛坧df/doc/txt绛夛級 |
| file_size_bytes | BIGINT | NOT NULL | 鏂囦欢澶у皬锛堝瓧鑺傦級 |
| file_url | TEXT | NOT NULL | 鏂囦欢瀛樺偍URL |
| dify_document_id | TEXT | NOT NULL | Dify骞冲彴鐨凞ocument ID |
| status | TEXT | NOT NULL, DEFAULT 'uploading' | 状态(uploading/processing/completed/failed |
| progress | INTEGER | NOT NULL, DEFAULT 0 | 处理进度0-100 |
| status | TEXT | NOT NULL, DEFAULT 'uploading' | 鐘舵€侊紙uploading/processing/completed/failed锛?|
| progress | INTEGER | NOT NULL, DEFAULT 0 | 澶勭悊杩涘害锛?-100锛?|
| error_message | TEXT | NULL | 閿欒<E996BF>淇℃伅 |
| segments_count | INTEGER | NULL | 鍒囩墖鏁伴噺 |
| tokens_count | INTEGER | NULL | Token鏁伴噺 |
| extraction_method | TEXT | NULL | 提取方法auto/ocr/parse |
| extraction_method | TEXT | NULL | 鎻愬彇鏂规硶锛坅uto/ocr/parse锛?|
| **Phase 2瀛楁<E7809B>** | | | **鍏ㄦ枃闃呰<E99783>鍔熻兘** |
| full_text | TEXT | NULL | 瀹屾暣鏂囨湰鍐呭<E98D90> |
| full_text_length | INTEGER | NULL | 鏂囨湰闀垮害 |
| metadata | JSONB | NULL | 元数据(作者、标题、摘要等) |
| metadata | JSONB | NULL | 鍏冩暟鎹<EFBFBD>紙浣滆€呫€佹爣棰樸€佹憳瑕佺瓑锛?|
| created_at | TIMESTAMPTZ | NOT NULL, DEFAULT now() | 鍒涘缓鏃堕棿 |
| updated_at | TIMESTAMPTZ | NOT NULL | 鏇存柊鏃堕棿 |
@@ -211,11 +211,11 @@ model Document {
#### 涓氬姟瑙勫垯
1. **鐘舵€佹満** - `status`瀛楁<EFBFBD>悊鏂囨。澶勭悊娴佺▼
- `uploading` `processing` `completed`
- `uploading` 鈫?`processing` 鈫?`completed`
- 澶辫触鏃惰浆涓篳failed`
2. **Dify鍚屾<E98D9A>** - 姣忎釜鏂囨。瀵瑰簲Dify涓<79>殑涓€涓狣ocument
3. **提取方法** - 支持自动识别、OCR、解析三种方式
4. **Phase 2扩展** - `full_text`字段用于全文阅读和深度分析
3. **鎻愬彇鏂规硶** - <EFBFBD>寔鑷<EFBFBD>姩璇嗗埆銆丱CR銆佽В鏋愪笁绉嶆柟寮?
4. **Phase 2鎵╁睍** - `full_text`瀛楁<EFBFBD>鐢ㄤ簬鍏ㄦ枃闃呰<EFBFBD>鍜屾繁搴﹀垎鏋?
---
@@ -223,22 +223,22 @@ model Document {
**鐢ㄩ€旓細** 鎵归噺澶勭悊鏂囩尞锛屾彁鍙栫粨鏋勫寲淇℃伅
#### 表结构
#### 琛ㄧ粨鏋?
| 字段名 | 数据类型 | 约束 | 说明 |
| 瀛楁<EFBFBD>鍚?| 鏁版嵁绫诲瀷 | 绾︽潫 | 璇存槑 |
|--------|---------|------|------|
| id | TEXT | PRIMARY KEY | 任务唯一标识UUID |
| id | TEXT | PRIMARY KEY | 浠诲姟鍞<EFBFBD>竴鏍囪瘑锛圲UID锛?|
| user_id | TEXT | NOT NULL, FK | 鎵€灞炵敤鎴稩D |
| kb_id | TEXT | NOT NULL, FK | 鎵€灞炵煡璇嗗簱ID |
| task_name | TEXT | NOT NULL | 浠诲姟鍚嶇О |
| task_type | TEXT | NOT NULL | 浠诲姟绫诲瀷锛坋xtract_info/summarize绛夛級 |
| prompt_template | TEXT | NOT NULL | Prompt妯℃澘 |
| model_name | TEXT | NOT NULL, DEFAULT 'gpt-4' | 浣跨敤鐨凩LM妯″瀷 |
| status | TEXT | NOT NULL, DEFAULT 'pending' | 状态(pending/running/completed/failed |
| status | TEXT | NOT NULL, DEFAULT 'pending' | 鐘舵€侊紙pending/running/completed/failed锛?|
| total_documents | INTEGER | NOT NULL, DEFAULT 0 | 鎬绘枃妗f暟 |
| processed_count | INTEGER | NOT NULL, DEFAULT 0 | 宸插<E5AEB8>鐞嗘暟 |
| success_count | INTEGER | NOT NULL, DEFAULT 0 | 成功数 |
| failed_count | INTEGER | NOT NULL, DEFAULT 0 | 失败数 |
| success_count | INTEGER | NOT NULL, DEFAULT 0 | 鎴愬姛鏁?|
| failed_count | INTEGER | NOT NULL, DEFAULT 0 | 澶辫触鏁?|
| error_message | TEXT | NULL | 閿欒<E996BF>淇℃伅 |
| created_at | TIMESTAMPTZ | NOT NULL, DEFAULT now() | 鍒涘缓鏃堕棿 |
| updated_at | TIMESTAMPTZ | NOT NULL | 鏇存柊鏃堕棿 |
@@ -279,12 +279,12 @@ model BatchTask {
#### 涓氬姟瑙勫垯
1. **任务类型** - 支持多种批处理类型
- `extract_info` - 提取结构化信息
1. **浠诲姟绫诲瀷** - <EFBFBD>寔澶氱<EFBFBD>鎵瑰<EFBFBD>鐞嗙被鍨?
- `extract_info` - 鎻愬彇缁撴瀯鍖栦俊鎭?
- `summarize` - 鎵归噺鎽樿<E98EBD>
- `classify` - 鏂囩尞鍒嗙被
2. **状态机** - `status`管理任务执行状态
3. **进度跟踪** - 实时更新计数器字段
2. **鐘舵€佹満** - `status`悊浠诲姟鎵ц<EFBFBD>鐘舵€?
3. **杩涘害璺熻釜** - 瀹炴椂鏇存柊璁℃暟鍣ㄥ瓧娈?
4. **妯″瀷閫夋嫨** - 鏀<>寔澶氱<E6BEB6>LLM妯″瀷
---
@@ -293,17 +293,17 @@ model BatchTask {
**鐢ㄩ€旓細** 瀛樺偍鎵瑰<E98EB5>鐞嗕换鍔殑姣忕瘒鏂囩尞缁撴灉
#### 表结构
#### 琛ㄧ粨鏋?
| 字段名 | 数据类型 | 约束 | 说明 |
| 瀛楁<EFBFBD>鍚?| 鏁版嵁绫诲瀷 | 绾︽潫 | 璇存槑 |
|--------|---------|------|------|
| id | TEXT | PRIMARY KEY | 结果唯一标识UUID |
| id | TEXT | PRIMARY KEY | 缁撴灉鍞<EFBFBD>竴鏍囪瘑锛圲UID锛?|
| task_id | TEXT | NOT NULL, FK | 鎵€灞炰换鍔<E68DA2>D |
| document_id | TEXT | NOT NULL, FK | 鎵€灞炴枃妗<E69E83>D |
| status | TEXT | NOT NULL, DEFAULT 'pending' | 状态(pending/processing/completed/failed |
| status | TEXT | NOT NULL, DEFAULT 'pending' | 鐘舵€侊紙pending/processing/completed/failed锛?|
| result_data | JSONB | NULL | 鎻愬彇鐨勭粨鏋勫寲鏁版嵁 |
| raw_output | TEXT | NULL | LLM鍘熷<E98D98>杈撳嚭 |
| tokens_used | INTEGER | NULL | 使用的Token|
| tokens_used | INTEGER | NULL | 浣跨敤鐨凾oken鏁?|
| error_message | TEXT | NULL | 閿欒<E996BF>淇℃伅 |
| created_at | TIMESTAMPTZ | NOT NULL, DEFAULT now() | 鍒涘缓鏃堕棿 |
@@ -336,20 +336,20 @@ model BatchResult {
#### 涓氬姟瑙勫垯
1. **缁撴灉瀛樺偍** - `result_data`瀛樺偍JSON鏍煎紡鐨勭粨鏋勫寲鏁版嵁
2. **原始输出** - `raw_output`保留LLM原始输出便于调试
3. **Token统计** - 记录每篇文献的Token消耗
2. **鍘熷<EFBFBD>杈撳嚭** - `raw_output`淇濈暀LLM鍘熷<EFBFBD>杈撳嚭锛屼究浜庤皟璇?
3. **Token缁熻<EFBFBD>** - 璁板綍姣忕瘒鏂囩尞鐨凾oken娑堣€?
---
### 5. task_templates - 任务模板表 (Phase 3, 暂不实现)
### 5. task_templates - 浠诲姟妯℃澘琛?(Phase 3, 鏆備笉瀹炵幇)
**用途:** 存储预定义的批处理任务模板
**鐢ㄩ€旓細** 瀛樺偍棰勫畾涔夌殑鎵瑰<EFBFBD>鐞嗕换鍔℃ā鏉?
#### 表结构
#### 琛ㄧ粨鏋?
| 字段名 | 数据类型 | 约束 | 说明 |
| 瀛楁<EFBFBD>鍚?| 鏁版嵁绫诲瀷 | 绾︽潫 | 璇存槑 |
|--------|---------|------|------|
| id | TEXT | PRIMARY KEY | 模板唯一标识UUID |
| id | TEXT | PRIMARY KEY | 妯℃澘鍞<EFBFBD>竴鏍囪瘑锛圲UID锛?|
| user_id | TEXT | NOT NULL, FK | 鎵€灞炵敤鎴稩D |
| template_name | TEXT | NOT NULL | 妯℃澘鍚嶇О |
| task_type | TEXT | NOT NULL | 浠诲姟绫诲瀷 |
@@ -385,8 +385,8 @@ model TaskTemplate {
#### 涓氬姟瑙勫垯
1. **妯℃澘澶嶇敤** - 鐢ㄦ埛鍙<E59F9B>繚瀛樺父鐢ㄧ殑浠诲姟閰嶇疆
2. **字段定义** - `output_fields`定义期望的输出结构
3. **暂不实现** - Phase 3预留,后续开发
2. **瀛楁<EFBFBD>瀹氫箟** - `output_fields`瀹氫箟鏈熸湜鐨勮緭鍑虹粨鏋?
3. **鏆備笉瀹炵幇** - Phase 3棰勭暀锛屽悗缁<EFBFBD>紑鍙?
---
@@ -463,51 +463,51 @@ erDiagram
### 璺⊿chema寮曠敤
**外键关系:**
- `knowledge_bases.user_id` `platform_schema.users.id`
- `documents.user_id` `platform_schema.users.id`
- `batch_tasks.user_id` `platform_schema.users.id`
- `task_templates.user_id` `platform_schema.users.id`
**澶栭敭鍏崇郴锛?*
- `knowledge_bases.user_id` 鈫?`platform_schema.users.id`
- `documents.user_id` 鈫?`platform_schema.users.id`
- `batch_tasks.user_id` 鈫?`platform_schema.users.id`
- `task_templates.user_id` 鈫?`platform_schema.users.id`
**说明:** Prisma自动处理跨Schema外键应用代码无需关心Schema前缀
**璇存槑锛?* Prisma鑷<61>姩澶勭悊璺⊿chema澶栭敭锛屽簲鐢ㄤ唬鐮佹棤闇€鍏冲績Schema鍓嶇紑
---
## 绱㈠紩璁捐<E79281>
### 涓婚敭绱㈠紩
所有表的`id`字段自动创建B-tree主键索引。
鎵€鏈夎〃鐨刞id`瀛楁<E7809B><EFBFBD>姩鍒涘缓B-tree涓婚敭绱㈠紩銆?
### 澶栭敭绱㈠紩
| 表名 | 索引字段 | 用途 |
| 琛ㄥ悕 | 绱㈠紩瀛楁<E7809B> | 鐢ㄩ€?|
|------|---------|------|
| knowledge_bases | user_id | 鏌ヨ<E98F8C>鐢ㄦ埛鐨勬墍鏈夌煡璇嗗簱 |
| knowledge_bases | dify_dataset_id | Dify鏁版嵁鍚屾<E98D9A> |
| documents | kb_id | 查询知识库的所有文档 |
| documents | user_id | 查询用户的所有文档 |
| documents | status | 过滤文档状态 |
| documents | kb_id | 鏌ヨ<EFBFBD>鐭ヨ瘑搴撶殑鎵€鏈夋枃妗?|
| documents | user_id | 鏌ヨ<EFBFBD>鐢ㄦ埛鐨勬墍鏈夋枃妗?|
| documents | status | 杩囨护鏂囨。鐘舵€?|
| documents | dify_document_id | Dify鏁版嵁鍚屾<E98D9A> |
| documents | extraction_method | 按提取方法过滤 |
| batch_tasks | user_id | 查询用户的任务 |
| documents | extraction_method | 鎸夋彁鍙栨柟娉曡繃婊?|
| batch_tasks | user_id | 鏌ヨ<EFBFBD>鐢ㄦ埛鐨勪换鍔?|
| batch_tasks | kb_id | 鏌ヨ<E98F8C>鐭ヨ瘑搴撶殑浠诲姟 |
| batch_tasks | status | 过滤任务状态 |
| batch_results | task_id | 查询任务的所有结果 |
| batch_results | document_id | 查询文档的处理结果 |
| batch_results | status | 过滤结果状态 |
| task_templates | user_id | 查询用户的模板 |
| batch_tasks | status | 杩囨护浠诲姟鐘舵€?|
| batch_results | task_id | 鏌ヨ<EFBFBD>浠诲姟鐨勬墍鏈夌粨鏋?|
| batch_results | document_id | 鏌ヨ<EFBFBD>鏂囨。鐨勫<EFBFBD>鐞嗙粨鏋?|
| batch_results | status | 杩囨护缁撴灉鐘舵€?|
| task_templates | user_id | 鏌ヨ<EFBFBD>鐢ㄦ埛鐨勬ā鏉?|
### 鏃堕棿绱㈠紩
| 表名 | 索引字段 | 用途 |
| 琛ㄥ悕 | 绱㈠紩瀛楁<E7809B> | 鐢ㄩ€?|
|------|---------|------|
| batch_tasks | created_at | 按时间排序任务 |
| batch_tasks | created_at | 鎸夋椂闂存帓搴忎换鍔?|
---
## Phase 3鍔熻兘璇存槑
### 批处理工作流程
### 鎵瑰<EFBFBD>鐞嗗伐浣滄祦绋?
```mermaid
sequenceDiagram
@@ -518,23 +518,23 @@ sequenceDiagram
participant LLM
participant BatchResult
User->>API: 创建批处理任务
User->>API: 鍒涘缓鎵瑰<EFBFBD>鐞嗕换鍔?
API->>BatchTask: 鍒涘缓浠诲姟璁板綍
API->>Document: 查询知识库文档列表
API->>Document: 鏌ヨ<EFBFBD>鐭ヨ瘑搴撴枃妗垪琛?
loop 姣忕瘒鏂囨。
BatchTask->>Document: 璇诲彇鏂囨。鍏ㄦ枃
BatchTask->>LLM: 璋冪敤LLM鎻愬彇淇℃伅
LLM-->>BatchTask: 返回结构化数据
LLM-->>BatchTask: 杩斿洖缁撴瀯鍖栨暟鎹?
BatchTask->>BatchResult: 淇濆瓨缁撴灉
BatchTask->>BatchTask: 鏇存柊杩涘害
end
BatchTask->>API: 浠诲姟瀹屾垚
API-->>User: 返回结果汇总
API-->>User: 杩斿洖缁撴灉姹囨€?
```
### 批处理任务类型示例
### 鎵瑰<EFBFBD>鐞嗕换鍔被鍨嬬ず渚?
1. **淇℃伅鎻愬彇** (`extract_info`)
- 鎻愬彇鐮旂┒鏂规硶銆佹牱鏈<E789B1>噺銆丳鍊肩瓑
@@ -542,52 +542,52 @@ sequenceDiagram
2. **鏂囩尞鎽樿<E98EBD>** (`summarize`)
- 鎵归噺鐢熸垚鏂囩尞鎽樿<E98EBD>
- 统一格式和长度
- 缁熶竴鏍煎紡鍜岄暱搴?
3. **鏂囩尞鍒嗙被** (`classify`)
- 鏍规嵁鐮旂┒绫诲瀷鍒嗙被
- 标签化管理
- 鏍囩<E98F8D>鍖栫<E98D96>鐞?
---
## 鍙樻洿鍘嗗彶
### v1.0 - 2025-11-12 - 初始版本 ✅
### v1.0 - 2025-11-12 - 鍒濆<EFBFBD>鐗堟湰 鉁?
**变更内容:**
**鍙樻洿鍐呭<E98D90>锛?*
1. 浠巂public` schema杩佺Щ鍒癭pkb_schema`
2. 5个表全部迁移:
2. 5<EFBFBD>〃鍏ㄩ儴杩佺Щ锛?
- knowledge_bases
- documents
- batch_tasks
- batch_results
- task_templates
3. 鍦≒risma涓<61>坊鍔燻@@schema("pkb_schema")`鏍囩<EFBFBD>
4. 所有数据100%完整迁移
4. 鎵€鏈夋暟鎹?00%瀹屾暣杩佺Щ
**迁移脚本:** `docs/09-架构实施/migration-scripts/004-migrate-pkb.sql`
**杩佺Щ鑴氭湰锛?* `docs/09-鏋舵瀯瀹炴柦/migration-scripts/004-migrate-pkb.sql`
**验证状态:** ✅ 已验证,功能正常
**楠岃瘉鐘舵€侊細** 鉁?宸查獙璇侊紝鍔熻兘姝e父
**特殊处理:**
- `batch_results.rawOutput` `raw_output`(列名映射修正)
- `task_templates.outputFields` `output_fields`(列名映射修正)
**鐗规畩澶勭悊锛?*
- `batch_results.rawOutput` 鈫?`raw_output`锛堝垪鍚嶆槧灏勪慨姝o級
- `task_templates.outputFields` 鈫?`output_fields`锛堝垪鍚嶆槧灏勪慨姝o級
---
## 馃摎 鐩稿叧鏂囨。
- [Schema隔离架构设计](../../../09-架构实施/01-Schema隔离架构设计10个.md)
- [Schema闅旂<EFBFBD>鏋舵瀯璁捐<EFBFBD>](../../../09-鏋舵瀯瀹炴柦/01-Schema闅旂<EFBFBD>鏋舵瀯璁捐<EFBFBD>锛?0涓<30>.md)
- [Schema杩佺Щ瀹屾垚鎶ュ憡](../../../09-鏋舵瀯瀹炴柦/Schema杩佺Щ瀹屾垚鎶ュ憡.md)
- [Prisma閰嶇疆瀹屾垚鎶ュ憡](../../../09-鏋舵瀯瀹炴柦/Prisma閰嶇疆瀹屾垚鎶ュ憡.md)
- [快速功能测试报告](../../../09-架构实施/快速功能测试报告.md)
- [AIA数据库设计文档](../../AIA-AI智能问答/02-技术设计/01-数据库设计.md)
- [<EFBFBD>€熷姛鑳芥祴璇曟姤鍛奭(../../../09-鏋舵瀯瀹炴柦/蹇<>€熷姛鑳芥祴璇曟姤鍛?md)
- [AIA鏁版嵁搴撹<EFBFBD>璁℃枃妗<EFBFBD>(../../AIA-AI鏅鸿兘闂<E58598>瓟/02-鎶€鏈<E282AC><E98F88>璁?01-鏁版嵁搴撹<E690B4>璁?md)
---
**鏂囨。缁存姢鑰咃細** AI鍔╂墜
**鏈€鍚庢洿鏂帮細** 2025-11-12
**文档状态:** ✅ 已完成并验证
**鏂囨。鐘舵€侊細** 鉁?宸插畬鎴愬苟楠岃瘉

View File

@@ -1,59 +1,52 @@
# **与原型图的差距**
# **荳主次蝙句崟逧<EFBFBD>キョ霍?*
文档目的: 修正开发实现效果(图 17.png与产品设计稿图 18.png之间的视觉差距提升产品精致度。
优先级: High (P0) \- 影响视觉体验的核心问题
## **1\. 总体布局与间距 (Global Layout & Spacing)**
设计稿强调了清晰的层级和呼吸感,而实现版本的元素过于紧凑,导致界面显得拥挤。
<EFBFBD>。」逶ョ逧<EFBFBD>シ?菫ョ豁」蠑€蜿大ョ樒鴫謨域棡<E59F9F><EFBFBD>?17.png<6E>我ク惹コァ蜩∬ョセ隶。遞ソ<E9819E><EFBFBD>?18.png<6E>我ケ矩龍逧<E9BE8D><EFBFBD>ァ牙キョ霍晢シ梧署蜊<E7BDB2>コァ蜩∫イセ閾エ蠎ヲ縲?
莨伜<EFBFBD>郤ァ<EFBFBD><EFBFBD> High (P0) \- 蠖ア蜩崎ァ<EFBFBD>ァ我ス馴ェ檎噪譬ク蠢<EFBFBD>琉鬚?
## **1\. 諤サ菴灘ク<E78198>€荳朱龍霍?(Global Layout & Spacing)**
隶セ隶。遞ソ蠑コ隹<EFBFBD><EFBFBD><EFBFBD>匆逧<EFBFBD>アらコァ蜥悟他蜷ク諢滂シ瑚€悟ョ樒鴫迚域悽逧<EFBFBD><EFBFBD><EFBFBD><EFBFBD>コ守エァ蜃托シ悟ッシ閾エ逡碁擇譏セ蠕玲凶謖、縲?
* **鬘オ髱「霎ケ霍<EFBDB9> (Page Margins):**
* **问题:** 实现版左右边距似乎过窄(或不一致),导致内容贴边。
* **修改:** 全局内容区域Container)的左右 Padding 需要统一,建议设置为 16px 20px(请参考设计稿具体数值),保持视觉平衡。
* **髣ョ鬚<EFBFBD>:** 螳樒鴫迚亥キヲ蜿ウ霎ケ霍昜シシ荵手ソ<E6898B><EFBFBD>シ域<EFBDBC>荳堺ク€閾エ<E996BE>会シ悟ッシ閾エ蜀<EFBDB4>ョケ雍エ霎ケ縲?
* **菫ョ謾ケ:** 蜈ィ螻€<C280>ョケ蛹コ蝓滂シ<E6BB82>ontainer<EFBFBD>臥噪蟾ヲ蜿ウ Padding €隕∫サ滉ク€<EFBFBD>悟サコ隶ョ隶セ鄂ョ荳コ 16px 謌?20px<EFBFBD>郁ッキ蜿り€<EFBFBD>ョセ隶。遞ソ蜈キ菴捺焚蛟シ<EFBFBD>会シ御ソ晄戟隗<EFBFBD>ァ牙ケウ陦。縲?
* **蜊。迚<EFBDA1>/蛹コ蝮鈴龍霍<E9BE8D>:**
* **问题:** 列表项或卡片之间的垂直间距过小。
* **修改:** 增加卡片/列表项之间的 margin-bottom确保内容块之间有明显的区分。
## **2\. 字体与排版 (Typography)**
这是造成视觉差异最大的部分。实现版本文字层级拉不开,重点不突出。
* **髣ョ鬚<EFBFBD>:** 蛻苓。ィ鬘ケ謌門今迚<E4BB8A>ケ矩龍逧<E9BE8D>桙逶エ髣エ霍晁ソ<E69981>ー上€?
* **菫ョ謾ケ:** 蠅槫刈蜊。迚<EFBDA1>/蛻苓。ィ鬘ケ荵矩龍逧<E9BE8D> margin-bottom<6F>檎。ョ菫晏<E88FAB>螳ケ蝮嶺ケ矩龍譛画<E8AD9B>譏セ逧<EFBDBE>玄蛻<E78E84>€?
## **2\. 蟄嶺ス謎ク取賜迚?(Typography)**
霑呎弍騾<EFBFBD>謌占ァ<EFBFBD>ァ牙キョ蠑よ怙螟ァ逧<EFBFBD>Κ<EFBFBD>€ょョ樒鴫迚域悽譁<EFBFBD>ュ怜アらコァ諡我ク榊シ€<EFBFBD>碁㍾轤ケ荳咲ェ∝<EFBFBD>縲?
* **譬<>「俶枚蟄<E69E9A> (Headings):**
* **问题:** 实现版的标题字重Font Weight不足且字号可能偏小。
* **修改:** 加大标题字重,使用 font-weight: 600 (Semi-bold) bold。微调字号大小,确保与设计稿一致。
* **髣ョ鬚<EFBFBD>:** 螳樒鴫迚育噪譬<E599AA>「伜ュ鈴㍾<E988B4><E38DBE>ont Weight<68>我ク崎カウ<EFBDB6>御ク泌ュ怜捷蜿ッ閭ス蛛丞ー上€?
* **菫ョ謾ケ:** 蜉<>螟ァ譬<EFBDA7>「伜ュ鈴㍾<E988B4>御スソ逕?font-weight: 600 (Semi-bold) 謌?bold縲ょセョ隹<EFBFBD>ュ怜捷螟ァ蟆擾シ檎。ョ菫昜ク手ョセ隶。遞ソ荳€閾エ縲?
* **豁」譁<EFBDA3>/霎<>勧譁<E58BA7><EFBFBD> (Body/Secondary Text):**
* **问题:** 辅助信息(如日期、标签、描述)颜色过深,导致与标题抢夺视线。
* **髣ョ鬚<EFBFBD>:** 霎<>勧菫。諱ッ<E8ABB1>亥ヲよ律譛溘€<C280><E288B5>ュセ縲∵緒霑ー<E99C91>蛾「懆牡霑<E789A1>キア<EFBDB7>悟ッシ閾エ荳取<E88DB3><E58F96>「俶瓦螟コ隗<EFBDBA>コソ縲?
* **菫ョ謾ケ:**
* 将主要文字颜色调整为深灰(如 \#333333 \#1F2937)。
* 将辅助文字(次要信息)颜色调整为浅灰(如 \#666666 \#9CA3AF),拉开层级。
* <EFBFBD>クサ隕∵枚蟄鈴「懆牡隹<EFBFBD>紛荳コ豺ア轣ー<EFBFBD>亥ヲ<EFBFBD> \#333333 謌?\#1F2937<EFBFBD>€?
* <EFBFBD><EFBFBD>勧譁<EFBFBD>ュ暦シ域ャ。隕∽ソ。諱ッ<EFBFBD>蛾「懆牡隹<EFBFBD>紛荳コ豬<EFBFBD><EFBFBD><EFBFBD>亥ヲ<EFBFBD> \#666666 謌?\#9CA3AF<EFBFBD>会シ梧級蠑€螻らコァ縲?
* **陦碁ォ<E7A281> (Line Height):**
* **问题:** 多行文本的行间距过密,阅读体验差。
* **修改:** 增加 line-height,建议设置为字号的 1.4 1.5 倍。
## **3\. 组件与视觉样式 (Components & Visual Styles)**
* **髣ョ鬚<EFBFBD>:** 螟夊。梧枚譛ャ逧<EFBDAC>。碁龍霍晁ソ<E69981><EFBFBD>シ碁<EFBDBC>隸サ菴馴ェ悟キョ縲?
* **菫ョ謾ケ:** 蠅槫刈 line-height<EFBFBD>悟サコ隶ョ隶セ鄂ョ荳コ蟄怜捷逧?1.4 閾?1.5 蛟阪€?
## **3\. 扈<>サカ荳手ァ<E6898B>ァ画<EFBDA7>キ蠑?(Components & Visual Styles)**
* **蝨<><EFBFBD> (Border Radius):**
* **问题:** 实现版的按钮、卡片或图片的圆角看起来比较直(或者圆角数值不对)。
* **修改:** 统一圆角大小。如果设计稿是 8px 12px,请确保 CSS 中严格执行,不要使用默认的直角。
* **阴影与边框 (Shadows & Borders):**
* **问题:** 设计稿中可能运用了轻微的投影来增加立体感,或者使用了极细的分隔线,而实现版本可能丢失了阴影,或者边框颜色过深。
* **髣ョ鬚<EFBFBD>:** 螳樒鴫迚育噪謖蛾聴縲∝今迚<E4BB8A><E8BF9A>蝗セ迚<EFBDBE>噪蝨<E599AA>ァ堤恚襍キ譚・豈碑セ<E7A291><EFBFBD><EFBFBD><EFBFBD>怕隗呈焚蛟シ荳榊ッケ<EFBDAF>€?
* **菫ョ謾ケ:** 扈滉ク€<C280>ァ貞、ァ蟆上€ょヲよ棡隶セ隶。遞ソ譏?8px 謌?12px<EFBFBD>瑚ッキ遑ョ菫<EFBFBD> CSS 荳ュ荳・譬シ謇ァ陦鯉シ御ク崎ヲ∽スソ逕ィ鮟倩ョ、逧<EFBDA4>峩隗偵€?
* **髦エ蠖ア荳手セケ譯?(Shadows & Borders):**
* **髣ョ鬚<EFBFBD>:** 隶セ隶。遞ソ荳ュ蜿ッ閭ス霑千畑莠<E79591>スサ蠕ョ逧<EFBDAE>兜蠖ア譚・蠅槫刈遶倶ス捺─<E68DBA><EFBFBD><EFBFBD>スソ逕ィ莠<EFBDA8>栫扈<E6A0AB>噪蛻<E599AA>囈郤ソ<E983A4>€悟ョ樒鴫迚域悽蜿ッ閭ス荳「螟ア莠<EFBDB1>亢蠖ア<E8A096><EFBFBD><EFBFBD>セケ譯<EFBDB9>「懆牡霑<E789A1>キア縲?
* **菫ョ謾ケ:**
* 如果是卡片设计,添加轻微的 box-shadow(例如 0 2px 8px rgba(0,0,0,0.05))。
* 分隔线颜色应更淡,建议使用 \#E5E7EB 或类似极浅灰色。
* 螯よ棡譏ッ蜊。迚<EFBFBD>ョセ隶。<EFBFBD>梧キサ蜉<EFBFBD>霓サ蠕ョ逧?box-shadow<EFBFBD>井セ句ヲ?0 2px 8px rgba(0,0,0,0.05)<EFBFBD>€?
* <EFBFBD>囈郤ソ鬚懆牡蠎疲峩豺。<EFBFBD>悟サコ隶ョ菴ソ逕?\#E5E7EB 謌也アサ莨シ譫∵オ<E288B5><EFBDB5>濶イ縲?
* **蝗セ迚<EFBDBE>/蝗セ譬<EFBDBE> (Images & Icons):**
* **问题:** 图片比例可能失调(被拉伸或压缩),或者图标位置未居中对齐。
* **髣ョ鬚<EFBFBD>:** 蝗セ迚<EFBDBE>ッ比セ句庄閭ス螟ア隹<EFBDB1>シ郁「ォ諡我シク謌門視郛ゥ<E9839B>会シ梧<EFBDBC><EFBFBD>崟譬<E5B49F>ス咲スョ譛ェ螻<EFBDAA>クュ蟇ケ鮨舌€?
* **菫ョ謾ケ:**
* 图片设置 object-fit: cover 防止变形。
* 检查图标与文字的垂直对齐方式flex 布局下使用 align-items: center)。
* 蝗セ迚<EFBFBD>ョセ鄂ョ object-fit: cover 髦イ豁「蜿伜ス「縲?
* €譟・蝗セ譬<EFBFBD>ク取枚蟄礼噪蝙ら峩蟇ケ鮨先婿蠑擾シ<EFBFBD>lex 蟶<>€荳倶スソ逕?align-items: center<EFBFBD>€?
## **4\. 蟇シ闊ェ荳朱。カ驛ィ譬<EFBDA8> (Navigation/Header)**
* **状态栏/顶部栏:**
* **问题:** 顶部栏的高度可能不足,或者背景色与设计稿有色差。
* **修改:** 校验顶部栏高度Height确保标题文字在垂直方向绝对居中。
* **迥カ諤∵<EFBFBD><EFBFBD>/鬘カ驛ィ譬?**
* **髣ョ鬚<EFBFBD>:** 鬘カ驛ィ譬冗噪鬮伜コヲ蜿ッ閭ス荳崎カウ<EFBDB6><EFBFBD><EFBFBD>レ譎ッ濶イ荳手ョセ隶。遞ソ譛芽牡蟾ョ縲?
* **菫ョ謾ケ:** 譬。鬪碁。カ驛ィ譬城ォ伜コヲ<EFBDBA><EFBDA6>eight<68>会シ檎。ョ菫晄<E88FAB><E69984>「俶枚蟄怜惠蝙ら峩譁ケ蜷醍サ晏ッケ螻<EFBDB9>クュ縲?
### **菫ョ謾ケ蟒コ隶ョ諤サ扈<EFBDBB> (Action Items for Engineers)**
1. **CSS 变量化:** 建议将设计稿中的**主色、辅色、字号标准、圆角值**定义为 CSS 变量Variables避免硬编码Hard-coding防止不一致。
2. **Flexbox 对齐:** 检查所有列表项,确保使用 display: flex 并正确设置 align-items: center,解决图标与文字的高低差问题。
3. **盒子模型检查:** 打开浏览器开发者工具,逐个核对 Padding Margin 值,不要凭感觉估算。
1. **CSS 蜿倬㍼蛹?** 蟒コ隶ョ蟆<EFBFBD>ョセ隶。遞ソ荳ュ逧<EFBFBD>**荳サ濶イ縲∬セ<E288AC>牡縲∝ュ怜捷譬<E68DB7>㊥縲∝怕隗貞€?*螳壻ケ我ク?CSS 蜿倬㍼<E580AC><E38DBC>ariables<65>会シ碁∩蜈咲。ャ郛也<E9839B><E4B99F><EFBFBD>ard-coding<6E>会シ碁亟豁「荳堺ク€閾エ縲?
2. **Flexbox 蟇ケ鮨<EFBFBD>:** €譟・謇€譛牙<EFBFBD>陦ィ鬘ケ<EFBFBD>檎。ョ菫昜スソ逕?display: flex 蟷カ豁」遑ョ隶セ鄂?align-items: center<EFBFBD>瑚ァ」蜀ウ蝗セ譬<EFBFBD>ク取枚蟄礼噪鬮倅ス主キョ髣ョ鬚倥€?
3. **逶貞ュ先ィ。蝙区」€譟?** 謇灘シ€豬剰ァ亥勣蠑€蜿題€<E9A18C>キ・蜈キ<E89C88>€蝉クェ譬ク蟇ケ Padding 蜥?Margin 蛟シ<EFBFBD>御ク崎ヲ∝<EFBFBD>諢溯ァ我シー邂励€

View File

@@ -1,75 +1,75 @@
# PKB个人知识库 - 前端迁移与批处理功能完善
# PKB<EFBFBD>汉鐭ヨ瘑搴?- 鍓嶇<E98D93>杩佺Щ涓庢壒澶勭悊鍔熻兘瀹屽杽
**开发日期**2026年1月7日
**开发人员**AI Assistant
**寮€鍙戞棩鏈?*锛?026骞?鏈?鏃?
**寮€鍙戜汉鍛?*锛欰I Assistant
**鐗堟湰**锛歷2.0
---
## 一、开发目标
## 涓€銆佸紑鍙戠洰鏍?
1. **前端架构迁移**将PKB前端迁移到 `frontend-v2/modules/pkb` 新架构
1. **鍓嶇<EFBFBD>鏋舵瀯杩佺Щ**锛氬皢PKB鍓嶇<E98D93>杩佺Щ鍒?`frontend-v2/modules/pkb` 鏂版灦鏋?
2. **宸ヤ綔妯″紡瀹炵幇**锛氬疄鐜板叏鏂囬槄璇汇€侀€愮瘒绮捐<E7BBAE>銆佹壒澶勭悊涓夌<E6B693>宸ヤ綔妯″紡
3. **批处理功能**:完善批处理任务的执行、进度显示和结果导出
3. **鎵瑰<EFBFBD>鐞嗗姛鑳?*锛氬畬鍠勬壒澶勭悊浠诲姟鐨勬墽琛屻€佽繘搴︽樉绀哄拰缁撴灉瀵煎嚭
4. **UI浼樺寲**锛氫紭鍖栫晫闈㈢粏鑺傦紝鎻愬崌鐢ㄦ埛浣撻獙
---
## 二、主要工作内容
## 浜屻€佷富瑕佸伐浣滃唴瀹?
### 1. 鍓嶇<E98D93>鏋舵瀯鎼<E780AF>
#### 鐩<>綍缁撴瀯鍒涘缓
```
frontend-v2/src/modules/pkb/
├── api/ # API客户端
│ └── knowledgeBaseApi.ts
├── stores/ # 状态管理
│ └── useKnowledgeBaseStore.ts
鈹溾攢鈹€ api/ # API瀹㈡埛绔?
鈹? 鈹斺攢鈹€ knowledgeBaseApi.ts
鈹溾攢鈹€ stores/ # 鐘舵€佺<EFBFBD>鐞?
鈹? 鈹斺攢鈹€ useKnowledgeBaseStore.ts
鈹溾攢鈹€ components/ # 閫氱敤缁勪欢
│ ├── DocumentUpload.tsx
│ └── Workspace/ # 工作台组件
├── FullTextMode.tsx
├── DeepReadMode.tsx
├── BatchModeComplete.tsx
└── WorkModeSelector.tsx
鈹? 鈹溾攢鈹€ DocumentUpload.tsx
鈹? 鈹斺攢鈹€ Workspace/ # 宸ヤ綔鍙扮粍浠?
鈹? 鈹溾攢鈹€ FullTextMode.tsx
鈹? 鈹溾攢鈹€ DeepReadMode.tsx
鈹? 鈹溾攢鈹€ BatchModeComplete.tsx
鈹? 鈹斺攢鈹€ WorkModeSelector.tsx
鈹溾攢鈹€ pages/ # 椤甸潰缁勪欢
│ ├── DashboardPage.tsx
│ └── WorkspacePage.tsx
鈹? 鈹溾攢鈹€ DashboardPage.tsx
鈹? 鈹斺攢鈹€ WorkspacePage.tsx
鈹溾攢鈹€ hooks/ # 鑷<>畾涔塇ooks
│ └── useWorkMode.ts
鈹? 鈹斺攢鈹€ useWorkMode.ts
鈹斺攢鈹€ styles/ # 鏍峰紡鏂囦欢
鈹斺攢鈹€ workspace.css
```
#### 鏍稿績鏂囦欢鍒涘缓
- **DashboardPage.tsx**:知识库列表和创建入口
- **DashboardPage.tsx**锛氱煡璇嗗簱鍒楄〃鍜屽垱寤哄叆鍙?
- **WorkspacePage.tsx**锛氱煡璇嗗簱宸ヤ綔鍙颁富椤甸潰
- **涓夌<E6B693>宸ヤ綔妯″紡缁勪欢**锛氬叏鏂囬槄璇汇€侀€愮瘒绮捐<E7BBAE>銆佹壒澶勭悊
### 2. Chat缁勪欢闆嗘垚
**鎶€鏈<E282AC>€夊瀷**锛欰nt Design X
**特点**
**鐗圭偣**锛?
- 缁熶竴鐨勫<E990A8>璇濈粍浠讹紝鏀<E7B49D>寔娴佸紡鍝嶅簲
-<>畾涔夋秷鎭<E7A7B7>覆鏌撳櫒
-<>姩婊氬姩鍜岃緭鍏ユ<E98D8F>
**集成问题修复**
- ✅ 输入框清除:使用受控模式 `value={inputValue}`
- ✅ 自动滚动:添加 `messagesEndRef` 锚点
- ✅ 参考文献格式化:实现 `customMessageRenderer`
**闆嗘垚闂<EFBFBD><EFBFBD><EFBFBD><EFBFBD>**锛?
- 鉁?杈撳叆妗嗘竻闄わ細浣跨敤鍙楁帶妯″紡 `value={inputValue}`
- 鉁?鑷<>姩婊氬姩锛氭坊鍔?`messagesEndRef` 閿氱偣
- 鉁?鍙傝€冩枃鐚<E69E83>牸寮忓寲锛氬疄鐜?`customMessageRenderer`
### 3. 宸ヤ綔妯″紡瀹炵幇
#### 3.1 鍏ㄦ枃闃呰<E99783>妯″紡
**功能**
**鍔熻兘**锛?
- 鍔犺浇鐭ヨ瘑搴撳叏閮ㄦ枃妗o紙宸插畬鎴愮姸鎬侊級
- 使用 `fullTextDocumentIds` 参数传递完整文献
- 浣跨敤 `fullTextDocumentIds` 鍙傛暟浼犻€掑畬鏁存枃鐚?
- AI鍏峰<E98D8F>鍏ㄧ煡瑙嗚<E79199>锛屽彲杩涜<E69DA9>缁煎悎鍒嗘瀽
**API调用**
**API璋冪敤**锛?
```typescript
body: JSON.stringify({
content: message,
@@ -79,51 +79,51 @@ body: JSON.stringify({
})
```
**修复问题**
- ❌ 初次加载显示"0篇文档"
- ✅ 将文档数量加入 `conversationKey`,强制重新渲染
**<EFBFBD><EFBFBD><EFBFBD><EFBFBD>**锛?
- 鉂?鍒濇<E98D92>鍔犺浇鏄剧ず"0绡囨枃妗?
- 鉁?灏嗘枃妗f暟閲忓姞鍏?`conversationKey`锛屽己鍒堕噸鏂版覆鏌?
#### 3.2 閫愮瘒绮捐<E7BBAE>妯″紡
**功能**
- 选择1-5篇文档进行深度解读
- 每篇文档独立对话上下文
- 切换文档时清空对话历史
**鍔熻兘**锛?
- 閫夋嫨1-5绡囨枃妗繘琛屾繁搴﹁В璇?
- 姣忕瘒鏂囨。鐙<EFBFBD>珛瀵硅瘽涓婁笅鏂?
- 鍒囨崲鏂囨。鏃舵竻绌哄<EFBFBD>璇濆巻鍙?
**技术实现**
**鎶€鏈<EFBFBD>疄鐜?*锛?
```typescript
const conversationKey = useMemo(() => {
return `kb-deepread-${kbId}-${selectedDoc.id}`;
}, [kbId, selectedDoc.id]);
```
**修复问题**
- ❌ 切换文档报错:`TypeError: formattedContent.replace is not a function`
- ✅ 添加类型检查,正确处理 `MessageRenderParams`
- ❌ 输入框不清除、不自动滚动
- ✅ 在ChatContainer添加受控输入和滚动锚点
**<EFBFBD><EFBFBD><EFBFBD><EFBFBD>**锛?
- 鉂?鍒囨崲鏂囨。鎶ラ敊锛歚TypeError: formattedContent.replace is not a function`
- 鉁?娣诲姞绫诲瀷妫€鏌ワ紝姝g‘澶勭悊 `MessageRenderParams`
- 鉂?杈撳叆妗嗕笉娓呴櫎銆佷笉鑷<E7AC89>姩婊氬姩
- 鉁?鍦–hatContainer娣诲姞鍙楁帶杈撳叆鍜屾粴鍔ㄩ敋鐐?
#### 3.3 批处理模式
#### 3.3 鎵瑰<EFBFBD>鐞嗘ā寮?
**功能**
- 选择3-50篇文档批量提取信息
- 支持临床研究信息提取模板8个字段
**鍔熻兘**锛?
- 閫夋嫨3-50绡囨枃妗f壒閲忔彁鍙栦俊鎭?
- <EFBFBD>寔涓村簥鐮旂┒淇℃伅鎻愬彇妯℃澘锛?涓<>瓧娈碉級
- 瀹炴椂鏄剧ず澶勭悊杩涘害
- 缁撴灉鍙<E78189><E98D99>鍑轰负CSV
**开发历程**
**寮€鍙戝巻绋?*锛?
**问题1选择数量翻倍**
- ❌ 原因点击行和Checkbox都触发选择导致重复添加
- ✅ 解决:使用统一的 `toggle` 函数Checkbox`onClick stopPropagation`
**<EFBFBD><EFBFBD>1锛氶€夋嫨鏁伴噺缈诲€?*
- 鉂?鍘熷洜锛氱偣鍑昏<E98D91>鍜孋heckbox閮借Е鍙戦€夋嫨锛屽<E9949B>鑷撮噸澶嶆坊鍔?
- 鉁?瑙e喅锛氫娇鐢ㄧ粺涓€鐨?`toggle` 鍑芥暟锛孋heckbox鐢?`onClick stopPropagation`
**闂<><E99782>2锛欰PI 404閿欒<E996BF>**
- ❌ 路径错误:`/api/v1/batch-tasks`
- ✅ 正确路径:`/api/v2/pkb/batch-tasks/batch/execute`
- 鉂?璺<>緞閿欒<E996BF>锛歚/api/v1/batch-tasks`
- 鉁?姝<E28098>緞锛歚/api/v1/pkb/batch-tasks/batch/execute`
**闂<><E99782>3锛欰PI 500閿欒<E996BF>**
- ❌ 字段名不匹配:前端发送 `knowledgeBaseId`,后端期望 `kb_id`
- ✅ 修复请求体格式:
- 鉂?瀛楁<E7809B>鍚嶄笉鍖归厤锛氬墠绔<E5A2A0>彂閫?`knowledgeBaseId`锛屽悗绔<EFBFBD>湡鏈?`kb_id`
- 鉁?淇<><E6B787>璇锋眰浣撴牸寮忥細
```typescript
{
kb_id: kbId, // 鍚庣<E98D9A>鏍煎紡
@@ -134,37 +134,37 @@ const conversationKey = useMemo(() => {
}
```
**问题4模板ID不匹配**
- ❌ 前端:`clinicalResearch`(驼峰)
- ❌ 后端:`clinical_research`(下划线)
- ✅ 统一为 `clinical_research`
**<EFBFBD><EFBFBD>4锛氭ā鏉縄D涓嶅尮閰?*
- 鉂?鍓嶇<E98D93>锛歚clinicalResearch`锛堥┘宄帮級
- 鉂?鍚庣<E98D9A>锛歚clinical_research`锛堜笅鍒掔嚎锛?
- 鉁?缁熶竴涓?`clinical_research`
**闂<><E99782>5锛氬墠绔<E5A2A0>笉鏄剧ず缁撴灉**
- ❌ 后端返回 `status: "success"`,前端判断 `status === 'completed'`
- ✅ 修复状态判断:
- 鉂?鍚庣<E98D9A>杩斿洖 `status: "success"`锛屽墠绔<EFBFBD>垽鏂?`status === 'completed'`
- 鉁?淇<><E6B787>鐘舵€佸垽鏂<E59EBD>
```typescript
const isSuccess = docResult.status === 'success' || docResult.status === 'completed';
```
**问题6表格显示粗糙**
- ❌ 文件名过长,内容显示不全
- ✅ 实现方案A
- 文件名最多2行
- 内容最多3行 (`-webkit-line-clamp: 3`)
- 悬停显示完整内容Tooltip
- 结果数据列更宽(280px
**<EFBFBD><EFBFBD>6锛氳〃鏍兼樉绀虹矖绯?*
- 鉂?鏂囦欢鍚嶈繃闀匡紝鍐呭<E98D90>鏄剧ず涓嶅叏
- 鉁?瀹炵幇鏂规<E98F82>A锛?
- 鏂囦欢鍚嶆渶澶?琛?
- 鍐呭<EFBFBD>鏈€澶?琛?(`-webkit-line-clamp: 3`)
- <EFBFBD>仠鏄剧ず瀹屾暣鍐呭<EFBFBD>锛圱ooltip锛?
- 缁撴灉鏁版嵁鍒楁洿瀹斤紙280px锛?
### 4. 鏂囨。涓婁紶鍔熻兘
**问题**
- ❌ "上传新文件"按钮无响应
- ❌ 没有绑定 `onClick` 事件
**<EFBFBD><EFBFBD>**锛?
- 鉂?"涓婁紶鏂版枃浠?鎸夐挳鏃犲搷搴?
- 鉂?娌℃湁缁戝畾 `onClick` 浜嬩欢
**解决方案**
1. 导入 `DocumentUpload` 组件和 `Modal`
2. 添加 `uploadModalVisible` 状态
3. 为按钮绑定 `onClick={() => setUploadModalVisible(true)}`
4. 添加上传弹窗,集成 `DocumentUpload` 组件
**喅鏂规<EFBFBD>**锛?
1. 瀵煎叆 `DocumentUpload` 缁勪欢鍜?`Modal`
2. 娣诲姞 `uploadModalVisible` 鐘舵€?
3. 涓烘寜閽<EFBFBD>粦瀹?`onClick={() => setUploadModalVisible(true)}`
4. 娣诲姞涓婁紶寮圭獥锛岄泦鎴?`DocumentUpload` 缁勪欢
5.<><E6B787>瀵煎叆璺<E58F86>緞锛歚../stores/useKnowledgeBaseStore`
---
@@ -187,59 +187,59 @@ interface MessageRenderParams {
}
```
**解决**:正确解析 `params.message.content`
**瑙e喅**锛氭<E9949B><EFBFBD>В鏋?`params.message.content`
### 2. 批处理结果获取
### 2. 鎵瑰<EFBFBD>鐞嗙粨鏋滆幏鍙?
**问题**:后端返回嵌套结构 `{ success: true, data: { results: [...] } }`
**<EFBFBD><EFBFBD>**锛氬悗绔<E68297>繑鍥炲祵濂楃粨鏋?`{ success: true, data: { results: [...] } }`
**解决**
**瑙e喅**锛?
```typescript
const resultsData = resultsJson.data?.results || [];
const newResults = resultsData.map((docResult: any) => ({
documentId: docResult.document_id,
documentName: docResult.document_name,
result: docResult.data, // 提取数据在这里
result: docResult.data, // 鎻愬彇鏁版嵁鍦ㄨ繖閲?
}));
```
### 3. React Key閲嶅<E996B2>璀﹀憡
**问题**:批处理结果列表使用 `documentId` 作为key可能重复
**<EFBFBD><EFBFBD>**锛氭壒澶勭悊缁撴灉鍒楄〃浣跨敤 `documentId` 浣滀负key锛屽彲鑳介噸澶?
**解决**
**瑙e喅**锛?
- 鍦ㄦ枃妗i€夋嫨鍒楄〃浣跨敤 `useMemo` 鍘婚噸
- 鍦ㄧ粨鏋滄槧灏勬椂浣跨敤 `${documentId}-${index}`<>繚鍞<E7B99A>
### 4. 前后端字段映射
### 4. 鍓嶅悗绔<EFBFBD>瓧娈垫槧灏?
| 鍚庣<E98D9A>瀛楁<E7809B> | 鍓嶇<E98D93>鏄剧ず |
|---------|---------|
| `research_purpose` | 鐮旂┒鐩<E29492>殑 |
| `research_design` | 鐮旂┒璁捐<E79281> |
| `research_subjects` | 鐮旂┒瀵硅薄 |
| `sample_size` | 样本量 |
| `intervention_group` | 干预组 |
| `control_group` | 对照组 |
| `results_data` | 结果及数据 |
| `sample_size` | 鏍锋湰閲?|
| `intervention_group` | 骞查<EFBFBD>缁?|
| `control_group` | 瀵圭収缁?|
| `results_data` | 缁撴灉鍙婃暟鎹?|
| `oxford_level` | 鐗涙触璇勭骇 |
---
## 鍥涖€丄PI璺<49>敱鎬荤粨
### 新架构路由v2
### 鏂版灦鏋勮矾鐢憋紙v2锛?
| 鍔熻兘 | 鏂规硶 | 璺<>緞 |
|------|------|------|
| 知识库列表 | GET | `/api/v2/pkb/knowledge-bases` |
| 创建知识库 | POST | `/api/v2/pkb/knowledge-bases` |
| 上传文档 | POST | `/api/v2/pkb/knowledge-bases/:id/documents` |
| 文档列表 | GET | `/api/v2/pkb/knowledge-bases/:id/documents` |
| 批处理执行 | POST | `/api/v2/pkb/batch-tasks/batch/execute` |
| 批处理状态 | GET | `/api/v2/pkb/batch-tasks/batch/tasks/:id` |
| 批处理结果 | GET | `/api/v2/pkb/batch-tasks/batch/tasks/:id/results` |
| 鐭ヨ瘑搴撳垪琛?| GET | `/api/v1/pkb/knowledge-bases` |
| 鍒涘缓鐭ヨ瘑搴?| POST | `/api/v1/pkb/knowledge-bases` |
| 涓婁紶鏂囨。 | POST | `/api/v1/pkb/knowledge-bases/:id/documents` |
| 鏂囨。鍒楄〃 | GET | `/api/v1/pkb/knowledge-bases/:id/documents` |
| 鎵瑰<EFBFBD>鐞嗘墽琛?| POST | `/api/v1/pkb/batch-tasks/batch/execute` |
| 鎵瑰<EFBFBD>鐞嗙姸鎬?| GET | `/api/v1/pkb/batch-tasks/batch/tasks/:id` |
| 鎵瑰<EFBFBD>鐞嗙粨鏋?| GET | `/api/v1/pkb/batch-tasks/batch/tasks/:id/results` |
### 对话路由(通用)
### 瀵硅瘽璺<EFBFBD>敱锛堥€氱敤锛?
| 鍔熻兘 | 鏂规硶 | 璺<>緞 |
|------|------|------|
| 娴佸紡瀵硅瘽 | POST | `/api/v1/chat/stream` |
@@ -249,20 +249,20 @@ const newResults = resultsData.map((docResult: any) => ({
## 浜斻€乁I/UX浼樺寲缁嗚妭
### 1. WorkspacePage甯冨眬
- **单层Header**整合返回、标题、Tab切换、设置、头像
- **Header高度**`h-14`56px
- **工作模式选择器**:紧凑的 `h-10`
- **鍗曞眰Header**锛氭暣鍚堣繑鍥炪€佹爣棰樸€乀ab鍒囨崲銆佽<EFBFBD><EFBFBD>€佸ご鍍?
- **Header楂樺害**锛歚h-14`锛?6px锛?
- **宸ヤ綔妯″紡閫夋嫨鍣?*锛氱揣鍑戠殑 `h-10` 鏍?
- **Chat鍖哄煙**锛氭渶澶у寲鍓╀綑绌洪棿
### 2. 批处理结果表格
- **固定表头**:背景 `#F9FAFB`,文字 `#6B7280`
- **文件名列**220px最多2行
- **内容列**180-280px最多3行
- **悬停提示**最大宽度450px最大高度300px
### 2. 鎵瑰<EFBFBD>鐞嗙粨鏋滆〃鏍?
- **鍥哄畾琛ㄥご**锛氳儗鏅?`#F9FAFB`锛屾枃瀛?`#6B7280`
- **鏂囦欢鍚嶅垪**锛?20px锛屾渶澶?琛?
- **鍐呭<EFBFBD>鍒?*锛?80-280px锛屾渶澶?琛?
- **<EFBFBD>仠鎻愮ず**锛氭渶澶у<E6BEB6>搴?50px锛屾渶澶ч珮搴?00px
### 3. 参考文献格式
### 3. 鍙傝€冩枃鐚<EFBFBD>牸寮?
```typescript
// 卡片式显示
// 鍗$墖寮忔樉绀?
<div className="flex items-start p-3 bg-blue-50 rounded-lg border border-blue-100">
<BookOpen className="w-4 h-4 text-blue-500 mr-2" />
<span className="text-sm text-slate-700">{citation}</span>
@@ -271,21 +271,21 @@ const newResults = resultsData.map((docResult: any) => ({
---
## 六、测试结果
## <EFBFBD>€佹祴璇曠粨鏋?
### 鍔熻兘娴嬭瘯
| 功能模块 | 测试项 | 结果 |
| 鍔熻兘妯″潡 | 娴嬭瘯椤?| 缁撴灉 |
|---------|--------|------|
| 知识库列表 | 创建/查看/删除 | |
| 文档上传 | 拖拽/点击上传 | |
| 全文阅读 | 加载文档/问答 | |
| 逐篇精读 | 文档切换/问答 | |
| 批处理 | 模板选择/执行/结果显示 | |
| 结果导出 | CSV导出 | |
| 鐭ヨ瘑搴撳垪琛?| 鍒涘缓/鏌ョ湅/鍒犻櫎 | 鉁?|
| 鏂囨。涓婁紶 | 鎷栨嫿/鐐瑰嚮涓婁紶 | 鉁?|
| 鍏ㄦ枃闃呰<EFBFBD> | 鍔犺浇鏂囨。/闂<> | 鉁?|
| 閫愮瘒绮捐<EFBFBD> | 鏂囨。鍒囨崲/闂<> | 鉁?|
| 鎵瑰<EFBFBD>鐞?| 妯℃澘閫夋嫨/鎵ц<E98EB5>/缁撴灉鏄剧ず | 鉁?|
| 缁撴灉瀵煎嚭 | CSV瀵煎嚭 | 鉁?|
### 鎬ц兘娴嬭瘯
- **3篇文档批处理**~17-28
- **6篇文档全文加载**~14k-15k tokens
- **3绡囨枃妗f壒澶勭悊**锛殈17-28绉?
- **6绡囨枃妗e叏鏂囧姞杞?*锛殈14k-15k tokens
- **鏂囨。涓婁紶**锛氳繘搴﹀疄鏃舵樉绀猴紝鏀<E7B49D>寔10MB浠ュ唴
---
@@ -293,44 +293,44 @@ const newResults = resultsData.map((docResult: any) => ({
## 涓冦€佸凡鐭ラ棶棰樹笌鏀硅繘鏂瑰悜
### 褰撳墠闄愬埗
1. 批处理只支持1个模板临床研究信息提取
2. 批处理最少3篇文档后端限制
3. 逐篇精读最多5篇文档前端限制
1. 鎵瑰<EFBFBD>鐞嗗彧鏀<EFBFBD>寔1涓<EFBFBD>ā鏉匡紙涓村簥鐮旂┒淇℃伅鎻愬彇锛?
2. 鎵瑰<EFBFBD>鐞嗘渶灏?绡囨枃妗紙鍚庣<E98D9A>闄愬埗锛?
3. 閫愮瘒绮捐<EFBFBD>鏈€澶?绡囨枃妗紙鍓嶇<E98D93>闄愬埗锛?
### 鏈<>潵浼樺寲
1. **澧炲姞妯℃澘**锛氳嵂鐗╁畨鍏ㄦ€с€佹偅鑰呭熀绾跨壒寰佺瓑
2. **自定义模板**:允许用户自定义提取字段
2. **<EFBFBD>畾涔夋ā鏉?*锛氬厑璁哥敤鎴疯嚜瀹氫箟鎻愬彇瀛楁<E7809B>
3. **缁撴灉棰勮<E6A3B0>**锛氬湪琛ㄦ牸涓<E789B8>敮鎸佸崟鍏冩牸灞曞紑
4. **批处理恢复**:支持中断后继续执行
4. **鎵瑰<EFBFBD>鐞嗘仮澶?*锛氭敮鎸佷腑鏂<E88591>悗缁х画鎵ц<E98EB5>
5. **鏂囨。棰勮<E6A3B0>**锛氶泦鎴怭DF棰勮<E6A3B0>鍔熻兘
---
## 八、代码统计
## <EFBFBD>€佷唬鐮佺粺璁?
### 鏂板<E98F82>鏂囦欢
- 前端页面2个Dashboard、Workspace
- 前端组件6个3种工作模式 + 选择器 + 上传 + 文档列表)
- API客户端1个
- 状态管理1个
- 样式文件1个
- 鍓嶇<EFBFBD>椤甸潰锛?涓<>Dashboard銆乄orkspace锛?
- 鍓嶇<EFBFBD>缁勪欢锛?涓<>紙3绉嶅伐浣滄ā寮?+ 閫夋嫨鍣?+ 涓婁紶 + 鏂囨。鍒楄〃锛?
- API瀹㈡埛绔<EFBFBD>細1涓?
- 鐘舵€佺<EFBFBD>鐞嗭細1涓?
- 鏍峰紡鏂囦欢锛?涓?
### 代码量估算
- TypeScript~2500
- CSS~200
- 文档:~1000
### 浠g爜閲忎及绠?
- TypeScript锛殈2500琛?
- CSS锛殈200琛?
- 鏂囨。锛殈1000琛?
---
## 九、团队协作
## 涔濄€佸洟闃熷崗浣?
### 参考旧版实现
### 鍙傝€冩棫鐗堝疄鐜?
- 鏂囨。涓婁紶锛歚frontend/src/components/knowledge/DocumentUpload.tsx`
- 鎵瑰<E98EB5>鐞嗭細`frontend/src/components/chat/BatchMode.tsx`
- 鏂囨。閫夋嫨锛歚frontend/src/components/chat/DocumentSelection.tsx`
### Git鎻愪氦
- 遵循语义化提交规范
- 閬靛惊璇<EFBFBD>箟鍖栨彁浜よ<EFBFBD>鑼?
-<>枃浣跨敤UTF-8缂栫爜
- 鍒嗗<E98D92>娆℃彁浜わ紝姣忔<E5A7A3>鑱氱劍鍗曚竴鍔熻兘
@@ -338,23 +338,24 @@ const newResults = resultsData.map((docResult: any) => ({
## 鍗併€佹€荤粨
本次开发完成了PKB个人知识库模块从架构设计到核心功能的完整实现特别是
<EFBFBD><EFBFBD>寮€鍙戝畬鎴愪簡PKB涓<EFBFBD>汉鐭ヨ瘑搴撴ā鍧椾粠鏋舵瀯璁捐<EFBFBD>鍒版牳蹇冨姛鑳界殑瀹屾暣瀹炵幇锛岀壒鍒<EFBFBD>槸锛?
1. **新架构迁移**:成功迁移到 `frontend-v2` 新架构
2. **三种工作模式**:全文阅读、逐篇精读、批处理全部实现
3. **批处理完整流程**:从模板选择到结果导出的完整链路
4. **UI/UX优化**:参照原型图精细化实现,用户体验良好
5. **问题解决能力**快速定位并解决10+个技术问题
1. 鉁?**鏂版灦鏋勮縼绉?*锛氭垚鍔熻縼绉诲埌 `frontend-v2` 鏂版灦鏋?
2. 鉁?**涓夌<E6B693>宸ヤ綔妯″紡**锛氬叏鏂囬槄璇汇€侀€愮瘒绮捐<E7BBAE>銆佹壒澶勭悊鍏ㄩ儴瀹炵幇
3. 鉁?**鎵瑰<E98EB5>鐞嗗畬鏁存祦绋?*锛氫粠妯℃澘閫夋嫨鍒扮粨鏋滃<E98F8B>鍑虹殑瀹屾暣閾捐矾
4. 鉁?**UI/UX浼樺寲**锛氬弬鐓у師鍨嬪浘绮剧粏鍖栧疄鐜帮紝鐢ㄦ埛浣撻獙鑹<E78D99>
5. 鉁?**闂<><E99782>喅鑳藉姏**锛氬揩閫熷畾浣嶅苟瑙喅10+涓<>妧鏈<E5A6A7>棶棰?
**里程碑意义**PKB模块已具备生产环境可用性为后续功能扩展奠定了坚实基础
**閲岀▼纰戞剰涔?*锛歅KB妯″潡宸插叿澶囩敓浜х幆澧冨彲鐢ㄦ€э紝涓哄悗缁<E68297>姛鑳芥墿灞曞<E7819E>瀹氫簡鍧氬疄鍩虹<E98DA9>锛?
---
**下一步建议**
1. 进行完整的用户验收测试(UAT
**涓嬩竴姝ュ缓璁?*锛?
1. 杩涜<EFBFBD>瀹屾暣鐨勭敤鎴烽獙鏀舵祴璇曪紙UAT锛?
2. 浼樺寲鎵瑰<E98EB5>鐞嗘€ц兘锛堝苟鍙戙€佺紦瀛橈級
3. 澧炲姞鏇村<E98F87>妯℃澘鍜岃嚜瀹氫箟鑳藉姏
4. 完善错误处理和用户反馈
4. 瀹屽杽閿欒<EFBFBD>澶勭悊鍜岀敤鎴峰弽棣?

View File

@@ -1,9 +1,9 @@
# PKB模块前端V3设计实现 - 开发记录
# PKB妯″潡鍓嶇<EFBFBD>V3璁捐<EFBFBD>瀹炵幇 - 寮€鍙戣<E98D99>褰?
> **日期:** 2026-01-07
> **开发者:** PKB开发团队
> **版本:** v1.0
> **状态:** ✅ 基础框架完成,待细化优化
> **鏃ユ湡锛?* 2026-01-07
> **寮€鍙戣€咃細** PKB寮€鍙戝洟闃?
> **鐗堟湰锛?* v1.0
> **鐘舵€侊細** 鉁?鍩虹<E98DA9>妗嗘灦瀹屾垚锛屽緟缁嗗寲浼樺寲
---
@@ -13,119 +13,119 @@
1. **鍚庣<E98D9A>妯″潡杩佺Щ**锛氬皢PKB鍚庣<E98D9A>爜杩佺Щ鍒版柊鐨勬ā鍧楀寲鏋舵瀯
2. **鍓嶇<E98D93>V3璁捐<E79281>瀹炵幇**锛氬熀浜庡師鍨嬪浘瀹炵幇Dashboard鍜學orkspace椤甸潰
3. **3种工作模式实现**:全文阅读、逐篇精读、批处理
3. **3绉嶅伐浣滄ā寮忓疄鐜?*锛氬叏鏂囬槄璇汇€侀€愮瘒绮捐<E7BBAE>銆佹壒澶勭悊
4. **Chat缁勪欢闆嗘垚**锛氫娇鐢ˋnt Design X Chat缁勪欢瀹炵幇AI瀵硅瘽
---
## ✅ 完成的工作
## 鉁?瀹屾垚鐨勫伐浣?
### 1. 鍚庣<E98D9A>妯″潡杩佺Щ
**迁移内容**
- 将Controller、Service、Route代码迁移到 `backend/src/modules/pkb/`
**杩佺Щ鍐呭<EFBFBD>**锛?
- 灏咰ontroller銆丼ervice銆丷oute浠g爜杩佺Щ鍒?`backend/src/modules/pkb/`
- 鏇存柊import璺<74>
- 注册新API路由 `/api/v2/pkb/*`
- 娉ㄥ唽鏂癆PI璺<EFBFBD> `/api/v1/pkb/*`
- 淇濇寔鏃х増璺<E5A297>`/api/v1/knowledge*` 鍏煎<E98D8F>
**目录结构**
**<EFBFBD>綍缁撴瀯**锛?
```
backend/src/modules/pkb/
鈹溾攢鈹€ controllers/
│ ├── knowledgeBaseController.ts
│ ├── documentController.ts
│ └── batchController.ts
鈹? 鈹溾攢鈹€ knowledgeBaseController.ts
鈹? 鈹溾攢鈹€ documentController.ts
鈹? 鈹斺攢鈹€ batchController.ts
鈹溾攢鈹€ services/
│ ├── knowledgeBaseService.ts
│ ├── documentService.ts
│ └── batchService.ts
鈹? 鈹溾攢鈹€ knowledgeBaseService.ts
鈹? 鈹溾攢鈹€ documentService.ts
鈹? 鈹斺攢鈹€ batchService.ts
鈹溾攢鈹€ routes/
│ └── index.ts
鈹? 鈹斺攢鈹€ index.ts
鈹斺攢鈹€ index.ts
```
**路由注册**
- v2路由:`/api/v2/pkb/knowledge`(新架构)
**<EFBFBD>敱娉ㄥ唽**锛?
- v2<EFBFBD>敱锛歚/api/v1/pkb/knowledge`锛堟柊鏋舵瀯锛?
- v1璺<31>敱锛歚/api/v1/knowledge`銆乣/api/v1/batch-tasks`锛堝吋瀹癸級
### 2. 鍓嶇<E98D93>V3璁捐<E79281>瀹炵幇
**基于原型图**
- `知识库仪表盘V5.html` DashboardPage
- `工作台V3.html` WorkspacePage
**鍩轰簬鍘熷瀷鍥?*锛?
- `鐭ヨ瘑搴撲华琛ㄧ洏V5.html` 鈫?DashboardPage
- `宸ヤ綔鍙癡3.html` 鈫?WorkspacePage
**前端目录结构**
**鍓嶇<EFBFBD><EFBFBD>綍缁撴瀯**锛?
```
frontend-v2/src/modules/pkb/
鈹溾攢鈹€ api/
│ └── knowledgeBaseApi.ts # API客户端
鈹? 鈹斺攢鈹€ knowledgeBaseApi.ts # API瀹㈡埛绔?
鈹溾攢鈹€ stores/
│ └── useKnowledgeBaseStore.ts # Zustand状态管理
鈹? 鈹斺攢鈹€ useKnowledgeBaseStore.ts # Zustand鐘舵€佺<EFBFBD>鐞?
鈹溾攢鈹€ pages/
│ ├── DashboardPage.tsx # 仪表盘页面
│ └── WorkspacePage.tsx # 工作台页面
鈹? 鈹溾攢鈹€ DashboardPage.tsx # <EFBFBD>〃鐩橀〉闈?
鈹? 鈹斺攢鈹€ WorkspacePage.tsx # 宸ヤ綔鍙伴〉闈?
鈹溾攢鈹€ components/
│ └── Workspace/
├── WorkModeSelector.tsx # 工作模式选择器
├── FullTextMode.tsx # 全文阅读模式
├── DeepReadMode.tsx # 逐篇精读模式
├── BatchMode.tsx # 批处理模式
└── BatchModeComplete.tsx # 批处理完整实现
鈹? 鈹斺攢鈹€ Workspace/
鈹? 鈹溾攢鈹€ WorkModeSelector.tsx # 宸ヤ綔妯″紡閫夋嫨鍣?
鈹? 鈹溾攢鈹€ FullTextMode.tsx # 鍏ㄦ枃闃呰<EFBFBD>妯″紡
鈹? 鈹溾攢鈹€ DeepReadMode.tsx # 閫愮瘒绮捐<EFBFBD>妯″紡
鈹? 鈹溾攢鈹€ BatchMode.tsx # 鎵瑰<EFBFBD>鐞嗘ā寮?
鈹? 鈹斺攢鈹€ BatchModeComplete.tsx # 鎵瑰<EFBFBD>鐞嗗畬鏁村疄鐜?
鈹溾攢鈹€ hooks/
│ └── useWorkMode.ts # 工作模式Hook
鈹? 鈹斺攢鈹€ useWorkMode.ts # 宸ヤ綔妯″紡Hook
鈹溾攢鈹€ types/
│ └── index.ts # 类型定义
鈹? 鈹斺攢鈹€ index.ts # 绫诲瀷瀹氫箟
鈹斺攢鈹€ styles/
└── workspace.css # 自定义样式
鈹斺攢鈹€ workspace.css # <EFBFBD>畾涔夋牱寮?
```
### 3. WorkspacePage甯冨眬璁捐<E79281>
**最终采用的布局**
**鏈€缁堥噰鐢ㄧ殑甯冨眬**锛?
```
┌─────────────────────────────────────────────────┐
│ [返回] │ 知识库名 │ [问答][资产] │ 设置 头像 │ Header 56px
├─────────────────────────────────────────────────┤
│ [工作模式▼] [文档▼] 已加载 x/y 篇 │ 工作模式栏 40px
├─────────────────────────────────────────────────┤
聊天区域(最大化)
└─────────────────────────────────────────────────┘
鈹屸攢鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹?
鈹?[杩斿洖] 鈹?鐭ヨ瘑搴撳悕 鈹?[闂<>瓟][璧勪骇] 鈹?璁剧疆 澶村儚 鈹?Header 56px
鈹溾攢鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹?
鈹?[宸ヤ綔妯″紡鈻糫 [鏂囨。鈻糫 宸插姞杞?x/y 绡?鈹?宸ヤ綔妯″紡鏍?40px
鈹溾攢鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹?
鈹? 鈹?
鈹? 鑱婂ぉ鍖哄煙锛堟渶澶у寲锛? 鈹?
鈹? 鈹?
鈹斺攢鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹?
```
**设计特点**
**璁捐<EFBFBD>鐗圭偣**锛?
- 鍗曞眰Header鏁村悎瀵艰埅鍜孴ab鍒囨崲
- 紧凑的工作模式选择栏
- 最大化的聊天区域
- 全屏模式fixed定位
- 绱у噾鐨勫伐浣滄ā寮忛€夋嫨鏍?
- 鏈€澶у寲鐨勮亰澶╁尯鍩?
- 鍏ㄥ睆妯″紡锛坒ixed瀹氫綅锛?
### 4. 3种工作模式
### 4. 3绉嶅伐浣滄ā寮?
| 妯″紡 | 璇存槑 | 鍚庣<E98D9A>API |
|------|------|---------|
| **鍏ㄦ枃闃呰<E99783>** | 鍔犺浇鍏ㄩ儴鏂囨。锛孉I鍏峰<E98D8F>鍏ㄧ煡瑙嗚<E79199> | `/api/v1/chat/stream` |
| **逐篇精读** | 选择1-5篇文档深度解读 | `/api/v1/chat/stream` |
| **批处理** | 批量提取信息,生成结构化表格 | `/api/v1/batch-tasks` |
| **閫愮瘒绮捐<EFBFBD>** | 閫夋嫨1-5绡囨枃妗繁搴﹁В璇?| `/api/v1/chat/stream` |
| **鎵瑰<EFBFBD>鐞?* | 鎵归噺鎻愬彇淇℃伅锛岀敓鎴愮粨鏋勫寲琛ㄦ牸 | `/api/v1/batch-tasks` |
### 5. Chat缁勪欢闆嗘垚
**使用Ant Design X Chat组件**
**浣跨敤Ant Design X Chat缁勪欢**锛?
- 澶嶇敤 `frontend-v2/src/shared/components/Chat/`
-<>寔SSE娴佸紡鍝嶅簲
-<>畾涔夋秷鎭<E7A7B7>覆鏌擄紙寮曠敤鏍煎紡鍖栵級
- 上下文管理
- 涓婁笅鏂囩<EFBFBD>鐞?
---
## 🔧 技术细节
## 馃敡 鎶€鏈<E282AC>粏鑺?
### API璋冪敤閰嶇疆
```typescript
// knowledgeBaseApi.ts
const api = axios.create({
baseURL: `${API_BASE_URL}/api/v2/pkb`,
baseURL: `${API_BASE_URL}/api/v1/pkb`,
timeout: 30000,
});
@@ -135,20 +135,20 @@ const chatApi = axios.create({
});
```
### 状态管理
### 鐘舵€佺<EFBFBD>鐞?
浣跨敤Zustand绠悊鍏ㄥ眬鐘舵€侊細
- 知识库列表
- 当前知识库
- 鐭ヨ瘑搴撳垪琛?
- 褰撳墠鐭ヨ瘑搴?
- 鏂囨。鍒楄〃
- 宸ヤ綔妯″紡
- 选中的文档
- 閫変腑鐨勬枃妗?
### 鏍峰紡鏂规<E98F82>
- TailwindCSS浣滀负涓昏<E6B693>鏍峰紡鏂规<E98F82>
- Ant Design组件库
- 自定义CSS处理特殊样式workspace.css
- Ant Design缁勪欢搴?
- <EFBFBD>畾涔塁SS澶勭悊鐗规畩鏍峰紡锛坵orkspace.css锛?
---
@@ -156,32 +156,32 @@ const chatApi = axios.create({
### 1. 鎵瑰<E98EB5>鐞嗘墽琛屽姛鑳藉緟璋冭瘯
- **闂<><E99782>**锛氭壒澶勭悊妯″紡鏃犳硶鎵ц<E98EB5>
- **原因**后端API `/api/v1/batch-tasks` 需要验证
- **优先级**:🔴 高
- **鍘熷洜**锛氬悗绔疉PI `/api/v1/batch-tasks` 闇€瑕侀獙璇?
- **浼樺厛绾?*锛氿煍?楂?
### 2. 知识资产页面导航条
### 2. 鐭ヨ瘑璧勪骇椤甸潰瀵艰埅鏉?
- **闂<><E99782>**锛氱煡璇嗚祫浜ч〉闈㈢己灏戝<E7818F><EFBFBD>
- **影响**:用户无法在资产页面进行筛选操作
- **优先级**:🟡 中
- **褰卞搷**锛氱敤鎴锋棤娉曞湪璧勪骇椤甸潰杩涜<E69DA9>绛涢€夋搷浣?
- **浼樺厛绾?*锛氿煙?涓?
### 3. UI精细化
- **问题**:与原型图仍有差距,需要进一步优化
- **影响**:用户体验
- **优先级**:🟡 中
### 3. UI绮剧粏鍖?
- **<EFBFBD><EFBFBD>**锛氫笌鍘熷瀷鍥句粛鏈夊樊璺濓紝闇€瑕佽繘涓€姝ヤ紭鍖?
- **褰卞搷**锛氱敤鎴蜂綋楠?
- **浼樺厛绾?*锛氿煙?涓?
---
## 📝 下一步计划
## 馃摑 涓嬩竴姝ヨ<E5A79D>鍒?
### 楂樹紭鍏堢骇
1. 璋冭瘯鎵瑰<E98EB5>鐞咥PI鎵ц<E98EB5>鍔熻兘
2. 完善知识资产页面导航条
3. 引用格式化优化
2. 瀹屽杽鐭ヨ瘑璧勪骇椤甸潰瀵艰埅鏉?
3. 寮曠敤鏍煎紡鍖栦紭鍖?
### 涓<>紭鍏堢骇
4. UI精细化(与原型图对比优化)
4. UI绮剧粏鍖栵紙涓庡師鍨嬪浘瀵规瘮浼樺寲锛?
5. 閿欒<E996BF>澶勭悊瀹屽杽
6. 加载状态优化
6. 鍔犺浇鐘舵€佷紭鍖?
### 浣庝紭鍏堢骇
7. RAG妫€绱㈡ā寮忓疄鐜帮紙鍚庣<E98D9A>寰呭紑鍙戯級
@@ -194,39 +194,40 @@ const chatApi = axios.create({
| 鏂囦欢 | 琛屾暟 | 璇存槑 |
|------|------|------|
| WorkspacePage.tsx | ~513 | 宸ヤ綔鍙颁富椤甸潰 |
| DashboardPage.tsx | ~450 | 仪表盘页面 |
| BatchModeComplete.tsx | ~511 | 批处理完整实现 |
| WorkModeSelector.tsx | ~200 | 工作模式选择器 |
| DashboardPage.tsx | ~450 | <EFBFBD>〃鐩橀〉闈?|
| BatchModeComplete.tsx | ~511 | 鎵瑰<EFBFBD>鐞嗗畬鏁村疄鐜?|
| WorkModeSelector.tsx | ~200 | 宸ヤ綔妯″紡閫夋嫨鍣?|
| FullTextMode.tsx | ~150 | 鍏ㄦ枃闃呰<E99783>妯″紡 |
| DeepReadMode.tsx | ~150 | 閫愮瘒绮捐<E7BBAE>妯″紡 |
| knowledgeBaseApi.ts | ~200 | API客户端 |
| useKnowledgeBaseStore.ts | ~150 | 状态管理 |
| **总计** | **~2300行** | PKB前端模块 |
| knowledgeBaseApi.ts | ~200 | API瀹㈡埛绔?|
| useKnowledgeBaseStore.ts | ~150 | 鐘舵€佺<EFBFBD>鐞?|
| **鎬昏<EFBFBD>** | **~2300琛?* | PKB鍓嶇<EFBFBD>妯″潡 |
---
## 馃幆 鎬荤粨
浠婂ぉ瀹屾垚浜哖KB妯″潡鐨勬牳蹇冨墠绔<EFBFBD><EFBFBD>鏋舵惌寤猴紝瀹炵幇浜嗭細
- ✅ 后端模块迁移和路由注册
- ✅ 前端V3设计基础实现
- ✅ 3种工作模式框架
- Chat组件集成
- ✅ 响应式布局
- 鉁?鍚庣<E98D9A>妯″潡杩佺Щ鍜岃矾鐢辨敞鍐?
- 鉁?鍓嶇<E98D93>V3璁捐<E79281>鍩虹<E98DA9>瀹炵幇
- 鉁?3绉嶅伐浣滄ā寮忔<E5AFAE>鏋?
- 鉁?Chat缁勪欢闆嗘垚
- 鉁?鍝嶅簲寮忓竷灞€
虽然还有一些功能需要调试和优化,但整体架构已经搭建完成,可以作为后续开发的基础。
铏界劧杩樻湁涓€浜涘姛鑳介渶瑕佽皟璇曞拰浼樺寲锛屼絾鏁翠綋鏋舵瀯宸茬粡鎼<EFBFBD>缓瀹屾垚锛屽彲浠ヤ綔涓哄悗缁<EFBFBD>紑鍙戠殑鍩虹<EFBFBD>銆?
---
**Git提交**
**Git鎻愪氦**锛?
```
5a17d09 feat(pkb): Complete PKB module frontend migration with V3 design
```
---
**文档编写时间**2026-01-07
**下次更新**:批处理功能调试完成后
**鏂囨。缂栧啓鏃堕棿**锛?026-01-07
**涓嬫<EFBFBD>鏇存柊**锛氭壒澶勭悊鍔熻兘璋冭瘯瀹屾垚鍚?

View File

@@ -1,37 +1,37 @@
# PKB - 个人知识库
# PKB - <EFBFBD>汉鐭ヨ瘑搴?
> **模块代号:** PKB (Personal Knowledge Base)
> **开发状态:** ✅ 已完成
> **商业价值:** ⭐⭐⭐
> **独立性:** ⭐⭐⭐
> **妯″潡浠e彿锛?* PKB (Personal Knowledge Base)
> **寮€鍙戠姸鎬侊細** 鉁?宸插畬鎴?
> **鍟嗕笟浠峰€硷細** 猸愨瓙猸?
> **<EFBFBD>珛鎬э細** 猸愨瓙猸?
---
## 馃搵 妯″潡姒傝堪
个人知识库允许用户创建私人文献库并基于库内文献进行AI问答RAG
<EFBFBD>汉鐭ヨ瘑搴撳厑璁哥敤鎴峰垱寤虹<EFBFBD>浜烘枃鐚<EFBFBD>簱锛屽苟鍩轰簬搴撳唴鏂囩尞杩涜<EFBFBD>AI闂<EFBFBD>瓟锛圧AG锛夈€?
---
## 馃幆 鏍稿績鍔熻兘
### 已完成功能
1. **知识库CRUD** - 创建、查看、编辑、删除
2. **文档上传** - PDF、Word、TXT、Markdown
3. **RAG问答** - 基于知识库内容问答
4. **@知识库引用** - 智能引用系统100%准确溯源)
5. **配额管理** - 每用户3个知识库每库50个文档
### 宸插畬鎴愬姛鑳?
1. 鉁?**鐭ヨ瘑搴揅RUD** - 鍒涘缓銆佹煡鐪嬨€佺紪杈戙€佸垹闄?
2. 鉁?**鏂囨。涓婁紶** - PDF銆乄ord銆乀XT銆丮arkdown
3. 鉁?**RAG<EFBFBD>** - 鍩轰簬鐭ヨ瘑搴撳唴瀹归棶绛?
4. 鉁?**@鐭ヨ瘑搴撳紩鐢?* - 鏅鸿兘寮曠敤绯荤粺锛?00%鍑嗙<E28098>簮锛?
5. 鉁?**閰嶉<E996B0>** - 姣忕敤鎴?涓<>煡璇嗗簱锛屾瘡搴?0涓<30>枃妗?
---
## 馃搨 鏂囨。缁撴瀯
```
PKB-个人知识库/
├── [AI对接] PKB快速上下文.md # ⏳ 待创建
PKB-<EFBFBD>汉鐭ヨ瘑搴?
鈹溾攢鈹€ [AI瀵规帴] PKB<EFBFBD>€熶笂涓嬫枃.md # 鈴?寰呭垱寤?
鈹溾攢鈹€ 00-椤圭洰姒傝堪/
鈹溾攢鈹€ 01-璁捐<E79281>鏂囨。/
└── README.md # ✅ 当前文档
鈹斺攢鈹€ README.md # 鉁?褰撳墠鏂囨。
```
---
@@ -40,7 +40,7 @@ PKB-个人知识库/
- **LLM缃戝叧** - RAG闂<47>
- **鏂囨。澶勭悊寮曟搸** - 鏂囨。鏂囨湰鎻愬彇
- **RAG引擎** - 向量检索
- **RAG寮曟搸** - 鍚戦噺妫€绱?
---