feat(admin): Add user management and upgrade to module permission system

Features - User Management (Phase 4.1):
- Database: Add user_modules table for fine-grained module permissions
- Database: Add 4 user permissions (view/create/edit/delete) to role_permissions
- Backend: UserService (780 lines) - CRUD with tenant isolation
- Backend: UserController + UserRoutes (648 lines) - 13 API endpoints
- Backend: Batch import users from Excel
- Frontend: UserListPage (412 lines) - list/filter/search/pagination
- Frontend: UserFormPage (341 lines) - create/edit with module config
- Frontend: UserDetailPage (393 lines) - details/tenant/module management
- Frontend: 3 modal components (592 lines) - import/assign/configure
- API: GET/POST/PUT/DELETE /api/admin/users/* endpoints

Architecture Upgrade - Module Permission System:
- Backend: Add getUserModules() method in auth.service
- Backend: Login API returns modules array in user object
- Frontend: AuthContext adds hasModule() method
- Frontend: Navigation filters modules based on user.modules
- Frontend: RouteGuard checks requiredModule instead of requiredVersion
- Frontend: Remove deprecated version-based permission system
- UX: Only show accessible modules in navigation (clean UI)
- UX: Smart redirect after login (avoid 403 for regular users)

Fixes:
- Fix UTF-8 encoding corruption in ~100 docs files
- Fix pageSize type conversion in userService (String to Number)
- Fix authUser undefined error in TopNavigation
- Fix login redirect logic with role-based access check
- Update Git commit guidelines v1.2 with UTF-8 safety rules

Database Changes:
- CREATE TABLE user_modules (user_id, tenant_id, module_code, is_enabled)
- ADD UNIQUE CONSTRAINT (user_id, tenant_id, module_code)
- INSERT 4 permissions + role assignments
- UPDATE PUBLIC tenant with 8 module subscriptions

Technical:
- Backend: 5 new files (~2400 lines)
- Frontend: 10 new files (~2500 lines)
- Docs: 1 development record + 2 status updates + 1 guideline update
- Total: ~4900 lines of code

Status: User management 100% complete, module permission system operational
This commit is contained in:
2026-01-16 13:42:10 +08:00
parent 98d862dbd4
commit 66255368b7
560 changed files with 70424 additions and 52353 deletions

View File

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

View File

@@ -1,149 +1,164 @@
# **AI 銝游<EFBFBD><EFBFBD><EFBFBD>銝𤾸龫<EFBFBD>䰻霂<EFBFBD><EFBFBD> \- MVP <20>嗆挾鈭批<E988AD><E689B9><EFBFBD><EFBFBD><E79899>獢?(PRD) V5.0**
# **AI 临床医生与医院知识库 \- MVP 阶段产品需求文档 (PRD) V5.0**
|
| <EFBFBD><EFBFBD>𧋦<EFBFBD>?| <20><EFBFBD> | 靽格㺿鈭?| 靽格㺿<E6A0BC><E3BABF> |
| 版本号 | 日期 | 修改人 | 修改内容 |
| V4.0 | 2024-06-XX | Product Lead | 降维策略 MVP |
| 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>銋?|
| V5.0 | 2024-06-XX | Product Lead | 完整落地版:基于“全量阅读”策略,补全 UI/UX 规范与详细功能定义 |
## **1\. <EFBFBD><EFBFBD><EFBFBD>条裦銝舘<EFBFBD><EFBFBD>?(Strategy & Scope)**
## **1\. 核心战略与范围 (Strategy & Scope)**
### **1.1 <EFBFBD><EFBFBD>隞瑕<EFBFBD>潔蜓撘?*
### **1.1 核心价值主张**
放弃传统的“切片式 RAG”利用 DeepSeek-V3 / Qwen-Max 的长窗口能力,通过 **Document-Level RAG (文档级阅读)** 技术,为医生提供**逻辑完整、引用精准**的知识库问答体验。
<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 阶段边界 (Scope Freeze)**
* **<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>?
* **适用终端:** Web (PC/Mac 浏览器),兼容 iPad
* **支持格式:** PDF, Word (.docx), PPT (.pptx)
* **硬性限制:** 单库文件数 ≤ 30 个;单文件大小 ≤ 20MB
* **核心场景:** 循证检索 (指南)、深度研读 (文献)、用药助手 (药品)、考典刷题 (考试)。
## **2\. 功能模块详情 (Detailed Requirements)**
### **2.1 模块一:仪表盘 (Dashboard)**
**<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>**
**用户故事:** 作为医生,我希望一眼看到我有多少个知识库,并能快速创建一个新的专科知识库。
#### **2.1.1 页面布局与 UI 规范**
* **布局结构:**
* **憿園<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>?
* **顶部:** 全局导航栏 (Logo \+$$智能统计$$$$智能清洗$$$$\*\*AI 知识库\*\*$$$$AI 问答$$
\+ 头像)。
* **主体:** "1+3" 卡片阵列布局 (Grid System)
* **卡片设计:**
* **Slot 1 (新建入口):**
* **<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>?
* **样式:** 浅蓝色渐变背景 (bg-blue-50),深蓝色虚线边框。
* **内容:** 大号 "+" 图标,文案 "创建知识库",下方并列展示 5 个场景图标 (指南/文献/病例/药品/考试) 以提示能力。
* **Slot 2-N (现有知识库):**
* **样式:** 白色卡片,微阴影 (shadow-sm \-\> hover shadow-md)
* **内容:** 图标(左上) \+ 标题(加粗) \+ 类型标签(胶囊样式) \+ "进入工作台"按钮(底部通栏)。
#### **2.1.2 交互流程:创建知识库**
* **閫血<EFBFBD>:** <EFBFBD>孵稬<EFBFBD>𨅯<EFBFBD>撱箇䰻霂<EFBFBD><EFBFBD><EFBFBD>嘥㨃<EFBFBD>?\-\> 撘孵枂璅⊥<E79285><E28AA5><EFBFBD> (Modal)<EFBFBD>?
* **触发:** 点击“创建知识库”卡片 \-\> 弹出模态框 (Modal)
* **Step 1: 类型选择 (Type Selection)**
* **UI:** 5 銝芸之<EFBFBD><EFBFBD>蝵烐聢<EFBFBD>?
* **UI:** 5 个大卡片网格。
* **选项:**
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>?
1. **循证检索 (指南):** 图标 BookOpen (Blue)。文案:"查诊疗标准、用药剂量"。
2. **深度研读 (文献):** 图标 Microscope (Purple)。文案:"文献综述、横向对比"。
3. **临床决策 (病例):** 图标 Stethoscope (Green)。文案:"疑难病例参考"。
4. **用药助手 (药品):** 图标 Pill (Rose)。文案:"查配伍禁忌"。
5. **考典刷题 (考试):** 图标 GraduationCap (Orange)。文案:"主治/副高备考"。
* **Step 2: 基础信息 & 角色注入**
* **摮埈挾:** <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>?
* **字段:** 知识库名称 (必填)、所属科室 (下拉选:心内/呼吸/消化...)
* **逻辑:** 选中“心内科”后,后端自动在 System Prompt 中注入 *"你是一名心内科专家..."*
* **Step 3: 文件上传 (Upload)**
* **UI:** 憭折𢒰蝘舀<EFBFBD><EFBFBD><EFBFBD>隡惩躹 (Dropzone)<EFBFBD>?
* **UI:** 大面积拖拽上传区 (Dropzone)
* **逻辑:**
* <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>?
* 前端校验大小 (\>20MB 飘红报错)。
* 前端校验数量 (\>30 个 飘红报错)。
* 上传成功后显示列表,状态流转:上传中... \-\> 就绪。
### **2.2 模块二:沉浸式工作台 (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 全局框架 (Immersive Layout)**
* **顶部导航 (Header):**
* **<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>?
* **样式:** 深色背景 (bg-slate-900),高度 56px
* **左侧:** \< 返回 (白色文字按钮,点击返回 Dashboard)
* **中间:** 知识库名称 \+ 图标。
* **右侧:** 简单的设置齿轮。
* **模式切换 (Tabs):**
* 雿滢<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)**
* 位于 Header 下方,白色背景,高度 48px
* **Tab A:** \[💬 智能问答\] (默认选中,底部蓝条)。
* **Tab B:** \[📂 知识资产\] (显示文件计数 Badge)
#### **2.2.2 视图 A智能问答 (Smart Chat)**
* **布局:**
* **暺䁅恕:** <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>?
* **默认:** 单栏宽屏聊天窗口 (最大宽度 900px居中)。
* **扩展:** 当点击引用或手动展开时,右侧滑出 PDF 阅读器 (占比 45%),聊天窗自动收缩至左侧。
* **对话交互 (Chat Interaction):**
* **颲枏<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>?
* **输入框:** 底部固定。支持 Shift+Enter 换行。
* **AI 回答:** 流式输出 (Typewriter Effect)
* **引用标注:** 必须以 \[文档名\] 或 \[1\] 形式高亮显示,颜色为品牌蓝。
* **后端策略路由 (核心逻辑):**
* **<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)**
* **场景一 (小库直读):** 知识库总 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. **操作:** 预览、删除。
* **筛选器:** 右上角“筛选”按钮,点击弹出下拉面板 (按时间/状态/类型)。
* **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\. 详细 UI/UX 设计规范 (Design Specs)**
为确保还原度,请 UI 设计师和前端开发遵循以下规范:
### **3.1 色彩体系 (Color Palette)**
雿輻鍂 Tailwind CSS 暺䁅恕<EFBFBD>脫踎嚗?
* **銝餉𠧧 (Primary):** Blue-600 (\#2563EB) \- <20><EFBFBD><E585B6>厰僼<E58EB0><E583BC><EFBFBD><EFBFBD><E4B993><EFBFBD>鈭柴<E988AD>?
* **<2A>箸艶<E7AEB8>?(Category Colors):**
使用 Tailwind CSS 默认色板:
* **主色 (Primary):** Blue-600 (\#2563EB) \- 用于按钮、链接、高亮。
* **场景色 (Category Colors):**
* 指南: Blue-500
* 文献: Purple-600
* 病例: Emerald-600
* 药品: Rose-600
* 考试: Orange-500
* **銝剜<EFBFBD>扯𠧧:** Slate-50 (<EFBFBD>峕艶), Slate-900 (Header), Slate-500 (甈∟<EFBFBD><EFBFBD><EFBFBD><EFBFBD>)<29>?
* **中性色:** Slate-50 (背景), Slate-900 (Header), Slate-500 (次要文字)。
### **3.2 图标系统 (Iconography)**
* **憌擧聢:** 蝥踵<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>?*
* **风格:** 线性图标 (Stroke 2px)
* **技术:** 使用 **Inline SVG** (参考 TDD V3.0 Icons 常量),严禁引入外部 Icon Font
* **摮𦯀<E691AE>:** 蝟餌<E89D9F>暺䁅恕<E48185>蝥踹<E89DA5>雿?(Inter, Roboto, PingFang SC)<29>?
### **3.3 字体与排版**
* **字体:** 系统默认无衬线字体 (Inter, Roboto, PingFang SC)。
* **字号:**
* H1 (页面标题): 20px Bold
* H2 (模块标题): 16px Bold
* Body (正文): 14px Regular (行高 1.6)
* Caption (说明): 12px Text-Slate-400
## **4\. <EFBFBD>虜瘚<EFBFBD><EFBFBD>銝舘器<EFBFBD><EFBFBD><EFBFBD><EFBFBD>?(Exception Handling)**
## **4\. 异常流程与边界处理 (Exception Handling)**
### **4.1 上传失败**
* **<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>?
* **场景:** 用户上传了加密 PDF 或损坏文件。
* **后端:** 解析器捕获异常,返回 status: FAILEDerror\_msg: "File encrypted"
* **前端:** 资产列表中该行变红,显示“解析失败:文件已加密”,并提供“删除”按钮。
### **4.2 AI 回答超时/失败**
* **<EFBFBD>箸艶:** DeepSeek API <EFBFBD><EFBFBD><EFBFBD>𧒄 (\>60s)<EFBFBD>?
* **场景:** DeepSeek API 响应超时 (\>60s)
* **UI:**
* <EFBFBD><EFBFBD>瘞娍部<EFBFBD>曄內蝥𠧧<EFBFBD>笔桖<EFBFBD><EFBFBD>?
* <EFBFBD>鞟內<EFBFBD><EFBFBD><EFBFBD>: "AI <20><EFBFBD><E882BD><EFBFBD><EFBFBD><EFBFBD>霂瑕<E99C82>霂閧移蝞<E7A7BB><E89D9E><EFBFBD><E6A185><EFBFBD>霂𨰻<E99C82>?
* 消息气泡显示红色感叹号。
* 提示文案: "AI 思考超时,请尝试精简问题或重试。"
* 提供$$重试$$
<EFBFBD>厰僼<EFBFBD>?
### **4.3 撘閧鍂皞𣂼<E79A9E>雿滚仃韐?*
按钮。
### **4.3 引用源定位失败**
* **场景:** 用户点击 \[1\],但该文件已被删除。
* **UI:** 弹出 Toast 提示 "源文件已被删除,无法查看原文"。
* **<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\. 验收测试标准 (QA Acceptance)**
| 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 |
| ID | 测试点 | 预期结果 | 优先级 |
| TC01 | 格式兼容性 | 上传 .pdf, .docx, .pptx 文件,均能在资产列表显示“就绪”,且能被检索到。 | P0 |
| TC02 | 边界限制 | 尝试上传第 31 个文件,前端应阻止上传并弹窗提示限制。 | P0 |
| TC03 | 引用跳转 | 提问后,点击回答中的 \[文档名\],右侧面板应滑出并正确加载该文档。 | P0 |
| TC04 | Word表格解析 | 上传包含表格的 Word 指南询问表格内数据AI 应能准确回答数值。 | P1 |
| TC05 | 路由逻辑 | \>32k Token 的库中提问,观察 Network 请求,应看到系统先请求了摘要接口,再请求了全文接口。 | P1 |

View File

@@ -1,9 +1,9 @@
# PKB - <EFBFBD>汉鐭ヨ瘑搴撴ā鍧楋細鏁版嵁搴撹<EFBFBD>璁?
# PKB - 个人知识库模块:数据库设计
> **鐗堟湰锛?* v1.0
> **鏇存柊鏃堕棿锛?* 2025-11-12
> **鏁版嵁搴揝chema锛?* `pkb_schema`
> **鐘舵€侊細** 鉁?宸插疄鏂藉苟杩佺Щ
> **版本:** v1.0
> **更新时间:** 2025-11-12
> **数据库Schema** `pkb_schema`
> **状态:** ✅ 已实施并迁移
---
@@ -23,25 +23,25 @@
### 功能定位
**PKB锛圥ersonal Knowledge Base锛? 涓<>汉鐭ヨ瘑搴撴ā鍧?*鎻愪緵鏂囩尞绠$悊鍜屾櫤鑳介棶绛旇兘鍔涳紝鏍稿績鍔熻兘锛?
**PKBPersonal Knowledge Base- 个人知识库模块**提供文献管理和智能问答能力,核心功能:
1. **鐭ヨ瘑搴撶<EFBFBD>鐞?* - 鍒涘缓鍜岀<E98D9C>鐞嗕釜浜虹煡璇嗗簱
2. **鏂囨。涓婁紶** - <EFBFBD>PDF/Word/TXT绛夋牸寮忔枃妗?
1. **知识库管理** - 创建和管理个人知识库
2. **文档上传** - 支持PDF/Word/TXT等格式文档
3. **智能问答** - 基于知识库的RAG检索增强生成对话
4. **鎵瑰<EFBFBD>鐞嗕换鍔?* - 鎵归噺澶勭悊鏂囩尞鎻愬彇锛圥hase 3锛?
5. **浠诲姟妯℃澘** - 棰勫畾涔夌殑鎵瑰<EFBFBD>鐞嗕换鍔℃ā鏉匡紙Phase 3锛?
4. **批处理任务** - 批量处理文献提取Phase 3
5. **任务模板** - 预定义的批处理任务模板(Phase 3
### 核心业务场景
- 鐢ㄦ埛鍒涘缓鐭ヨ瘑搴擄紙濡?CLL鐩稿叧鐭ヨ瘑搴?锛?
- 用户创建知识库(如"CLL相关知识库"
- 上传PDF文献到知识库
- 自动提取文本并向量化
- 鍩轰簬鐭ヨ瘑搴撹繘琛屾櫤鑳介棶绛?
- 鎵归噺鎻愬彇鏂囩尞涓<EFBFBD>殑缁撴瀯鍖栦俊鎭?
- 基于知识库进行智能问答
- 批量提取文献中的结构化信息
### 与Dify平台集成
PKB妯″潡娣卞害闆嗘垚Dify骞冲彴锛?
PKB模块深度集成Dify平台
- 每个知识库对应一个Dify Dataset
- 每个文档对应一个Dify Document
- 使用Dify的向量检索和RAG能力
@@ -62,26 +62,26 @@ GRANT ALL ON SCHEMA pkb_schema TO aiclinical_admin;
```
### 数据迁移
- **杩佺Щ鏃堕棿锛?* 2025-11-12
- **婧怱chema锛?* public
- **杩佺Щ鑴氭湰锛?* `docs/09-鏋舵瀯瀹炴柦/migration-scripts/004-migrate-pkb.sql`
- **鏁版嵁瀹屾暣鎬э細** 鉁?100%杩佺Щ鎴愬姛
- **迁移时间:** 2025-11-12
- **源Schema** public
- **迁移脚本:** `docs/09-架构实施/migration-scripts/004-migrate-pkb.sql`
- **数据完整性:** 100%迁移成功
---
## 数据库表设计
### 琛ㄥ垪琛?
### 表列表
| 琛ㄥ悕 | 鐢ㄩ€?| 琛屾暟锛堜及璁★級 | 鐘舵€?|
| 表名 | 用途 | 行数(估计) | 状态 |
|------|------|------------|------|
| `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>鐣欙級 |
| `knowledge_bases` | 知识库 | 5-50/用户 | ✅ 已部署 |
| `documents` | 文档 | 10-1000/知识库 | ✅ 已部署 |
| `batch_tasks` | 批处理任务 | 1-100/知识库 | ✅ Phase 3 |
| `batch_results` | 批处理结果 | N条/任务 | Phase 3 |
| `task_templates` | 任务模板 | 10-50/用户 | Phase 3(预留) |
**鎬昏<EFBFBD>锛?* 5涓<35>〃锛?涓<>牳蹇冭〃 + 3涓狿hase 3<EFBFBD>
**总计:** 5个表2个核心表 + 3个Phase 3表)
---
@@ -89,17 +89,17 @@ GRANT ALL ON SCHEMA pkb_schema TO aiclinical_admin;
**用途:** 存储用户创建的个人知识库
#### 琛ㄧ粨鏋?
#### 表结构
| 瀛楁<EFBFBD>鍚?| 鏁版嵁绫诲瀷 | 绾︽潫 | 璇存槑 |
| 字段名 | 数据类型 | 约束 | 说明 |
|--------|---------|------|------|
| id | TEXT | PRIMARY KEY | 鐭ヨ瘑搴撳敮涓€鏍囪瘑锛圲UID锛?|
| id | TEXT | PRIMARY KEY | 知识库唯一标识UUID |
| user_id | TEXT | NOT NULL, FK | 所属用户ID |
| name | TEXT | NOT NULL | 鐭ヨ瘑搴撳悕绉?|
| description | TEXT | NULL | 鐭ヨ瘑搴撴弿杩?|
| name | TEXT | NOT NULL | 知识库名称 |
| description | TEXT | NULL | 知识库描述 |
| dify_dataset_id | TEXT | NOT NULL, UNIQUE | Dify平台的Dataset 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 | 鏂囨。鍞<EFBFBD>竴鏍囪瘑锛圲UID锛?|
| id | TEXT | PRIMARY KEY | 文档唯一标识UUID |
| kb_id | TEXT | NOT NULL, FK | 所属知识库ID |
| user_id | TEXT | NOT NULL, FK | 所属用户ID |
| filename | TEXT | NOT NULL | 鏂囦欢鍚?|
| filename | TEXT | NOT NULL | 文件名 |
| file_type | TEXT | NOT NULL | 文件类型pdf/doc/txt等 |
| file_size_bytes | BIGINT | NOT NULL | 文件大小(字节) |
| file_url | TEXT | NOT NULL | 文件存储URL |
| dify_document_id | TEXT | NOT NULL | Dify平台的Document ID |
| status | TEXT | NOT NULL, DEFAULT 'uploading' | 鐘舵€侊紙uploading/processing/completed/failed锛?|
| progress | INTEGER | NOT NULL, DEFAULT 0 | 澶勭悊杩涘害锛?-100锛?|
| status | TEXT | NOT NULL, DEFAULT 'uploading' | 状态(uploading/processing/completed/failed |
| progress | INTEGER | NOT NULL, DEFAULT 0 | 处理进度0-100 |
| error_message | TEXT | NULL | 错误信息 |
| segments_count | INTEGER | NULL | 切片数量 |
| tokens_count | INTEGER | NULL | Token数量 |
| extraction_method | TEXT | NULL | 鎻愬彇鏂规硶锛坅uto/ocr/parse锛?|
| extraction_method | TEXT | NULL | 提取方法auto/ocr/parse |
| **Phase 2字段** | | | **全文阅读功能** |
| full_text | TEXT | NULL | 完整文本内容 |
| full_text_length | INTEGER | NULL | 文本长度 |
| metadata | JSONB | NULL | 鍏冩暟鎹<EFBFBD>紙浣滆€呫€佹爣棰樸€佹憳瑕佺瓑锛?|
| metadata | JSONB | NULL | 元数据(作者、标题、摘要等) |
| created_at | TIMESTAMPTZ | NOT NULL, DEFAULT now() | 创建时间 |
| updated_at | TIMESTAMPTZ | NOT NULL | 更新时间 |
@@ -211,11 +211,11 @@ model Document {
#### 业务规则
1. **状态机** - `status`字段管理文档处理流程
- `uploading` 鈫?`processing` 鈫?`completed`
- `uploading` `processing` `completed`
- 失败时转为`failed`
2. **Dify同步** - 每个文档对应Dify中的一个Document
3. **鎻愬彇鏂规硶** - <EFBFBD>寔鑷<EFBFBD>姩璇嗗埆銆丱CR銆佽В鏋愪笁绉嶆柟寮?
4. **Phase 2鎵╁睍** - `full_text`瀛楁<EFBFBD>鐢ㄤ簬鍏ㄦ枃闃呰<EFBFBD>鍜屾繁搴﹀垎鏋?
3. **提取方法** - 支持自动识别、OCR、解析三种方式
4. **Phase 2扩展** - `full_text`字段用于全文阅读和深度分析
---
@@ -223,22 +223,22 @@ model Document {
**用途:** 批量处理文献,提取结构化信息
#### 琛ㄧ粨鏋?
#### 表结构
| 瀛楁<EFBFBD>鍚?| 鏁版嵁绫诲瀷 | 绾︽潫 | 璇存槑 |
| 字段名 | 数据类型 | 约束 | 说明 |
|--------|---------|------|------|
| id | TEXT | PRIMARY KEY | 浠诲姟鍞<EFBFBD>竴鏍囪瘑锛圲UID锛?|
| id | TEXT | PRIMARY KEY | 任务唯一标识UUID |
| user_id | TEXT | NOT NULL, FK | 所属用户ID |
| kb_id | TEXT | NOT NULL, FK | 所属知识库ID |
| task_name | TEXT | NOT NULL | 任务名称 |
| task_type | TEXT | NOT NULL | 任务类型extract_info/summarize等 |
| prompt_template | TEXT | NOT NULL | Prompt模板 |
| model_name | TEXT | NOT NULL, DEFAULT 'gpt-4' | 使用的LLM模型 |
| 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 | 总文档数 |
| processed_count | INTEGER | NOT NULL, DEFAULT 0 | 已处理数 |
| 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 | 错误信息 |
| created_at | TIMESTAMPTZ | NOT NULL, DEFAULT now() | 创建时间 |
| updated_at | TIMESTAMPTZ | NOT NULL | 更新时间 |
@@ -279,12 +279,12 @@ model BatchTask {
#### 业务规则
1. **浠诲姟绫诲瀷** - <EFBFBD>寔澶氱<EFBFBD>鎵瑰<EFBFBD>鐞嗙被鍨?
- `extract_info` - 鎻愬彇缁撴瀯鍖栦俊鎭?
1. **任务类型** - 支持多种批处理类型
- `extract_info` - 提取结构化信息
- `summarize` - 批量摘要
- `classify` - 文献分类
2. **鐘舵€佹満** - `status`悊浠诲姟鎵ц<EFBFBD>鐘舵€?
3. **杩涘害璺熻釜** - 瀹炴椂鏇存柊璁℃暟鍣ㄥ瓧娈?
2. **状态机** - `status`管理任务执行状态
3. **进度跟踪** - 实时更新计数器字段
4. **模型选择** - 支持多种LLM模型
---
@@ -293,17 +293,17 @@ model BatchTask {
**用途:** 存储批处理任务的每篇文献结果
#### 琛ㄧ粨鏋?
#### 表结构
| 瀛楁<EFBFBD>鍚?| 鏁版嵁绫诲瀷 | 绾︽潫 | 璇存槑 |
| 字段名 | 数据类型 | 约束 | 说明 |
|--------|---------|------|------|
| id | TEXT | PRIMARY KEY | 缁撴灉鍞<EFBFBD>竴鏍囪瘑锛圲UID锛?|
| id | TEXT | PRIMARY KEY | 结果唯一标识UUID |
| task_id | TEXT | NOT NULL, FK | 所属任务ID |
| document_id | TEXT | NOT NULL, FK | 所属文档ID |
| 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原始输出 |
| tokens_used | INTEGER | NULL | 浣跨敤鐨凾oken鏁?|
| tokens_used | INTEGER | NULL | 使用的Token|
| error_message | TEXT | NULL | 错误信息 |
| created_at | TIMESTAMPTZ | NOT NULL, DEFAULT now() | 创建时间 |
@@ -336,20 +336,20 @@ model BatchResult {
#### 业务规则
1. **结果存储** - `result_data`存储JSON格式的结构化数据
2. **鍘熷<EFBFBD>杈撳嚭** - `raw_output`淇濈暀LLM鍘熷<EFBFBD>杈撳嚭锛屼究浜庤皟璇?
3. **Token缁熻<EFBFBD>** - 璁板綍姣忕瘒鏂囩尞鐨凾oken娑堣€?
2. **原始输出** - `raw_output`保留LLM原始输出便于调试
3. **Token统计** - 记录每篇文献的Token消耗
---
### 5. task_templates - 浠诲姟妯℃澘琛?(Phase 3, 鏆備笉瀹炵幇)
### 5. task_templates - 任务模板表 (Phase 3, 暂不实现)
**鐢ㄩ€旓細** 瀛樺偍棰勫畾涔夌殑鎵瑰<EFBFBD>鐞嗕换鍔℃ā鏉?
**用途:** 存储预定义的批处理任务模板
#### 琛ㄧ粨鏋?
#### 表结构
| 瀛楁<EFBFBD>鍚?| 鏁版嵁绫诲瀷 | 绾︽潫 | 璇存槑 |
| 字段名 | 数据类型 | 约束 | 说明 |
|--------|---------|------|------|
| id | TEXT | PRIMARY KEY | 妯℃澘鍞<EFBFBD>竴鏍囪瘑锛圲UID锛?|
| id | TEXT | PRIMARY KEY | 模板唯一标识UUID |
| user_id | TEXT | NOT NULL, FK | 所属用户ID |
| template_name | TEXT | NOT NULL | 模板名称 |
| task_type | TEXT | NOT NULL | 任务类型 |
@@ -385,8 +385,8 @@ model TaskTemplate {
#### 业务规则
1. **模板复用** - 用户可保存常用的任务配置
2. **瀛楁<EFBFBD>瀹氫箟** - `output_fields`瀹氫箟鏈熸湜鐨勮緭鍑虹粨鏋?
3. **鏆備笉瀹炵幇** - Phase 3棰勭暀锛屽悗缁<EFBFBD>紑鍙?
2. **字段定义** - `output_fields`定义期望的输出结构
3. **暂不实现** - Phase 3预留,后续开发
---
@@ -463,51 +463,51 @@ erDiagram
### 跨Schema引用
**澶栭敭鍏崇郴锛?*
- `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鑷<61>姩澶勭悊璺⊿chema澶栭敭锛屽簲鐢ㄤ唬鐮佹棤闇€鍏冲績Schema鍓嶇紑
**说明:** Prisma自动处理跨Schema外键应用代码无需关心Schema前缀
---
## 索引设计
### 主键索引
鎵€鏈夎〃鐨刞id`瀛楁<E7809B><EFBFBD>姩鍒涘缓B-tree涓婚敭绱㈠紩銆?
所有表的`id`字段自动创建B-tree主键索引。
### 外键索引
| 琛ㄥ悕 | 绱㈠紩瀛楁<E7809B> | 鐢ㄩ€?|
| 表名 | 索引字段 | 用途 |
|------|---------|------|
| knowledge_bases | user_id | 查询用户的所有知识库 |
| knowledge_bases | dify_dataset_id | Dify数据同步 |
| documents | kb_id | 鏌ヨ<EFBFBD>鐭ヨ瘑搴撶殑鎵€鏈夋枃妗?|
| documents | user_id | 鏌ヨ<EFBFBD>鐢ㄦ埛鐨勬墍鏈夋枃妗?|
| documents | status | 杩囨护鏂囨。鐘舵€?|
| documents | kb_id | 查询知识库的所有文档 |
| documents | user_id | 查询用户的所有文档 |
| documents | status | 过滤文档状态 |
| documents | dify_document_id | Dify数据同步 |
| documents | extraction_method | 鎸夋彁鍙栨柟娉曡繃婊?|
| batch_tasks | user_id | 鏌ヨ<EFBFBD>鐢ㄦ埛鐨勪换鍔?|
| documents | extraction_method | 按提取方法过滤 |
| batch_tasks | user_id | 查询用户的任务 |
| batch_tasks | kb_id | 查询知识库的任务 |
| batch_tasks | status | 杩囨护浠诲姟鐘舵€?|
| batch_results | task_id | 鏌ヨ<EFBFBD>浠诲姟鐨勬墍鏈夌粨鏋?|
| batch_results | document_id | 鏌ヨ<EFBFBD>鏂囨。鐨勫<EFBFBD>鐞嗙粨鏋?|
| batch_results | status | 杩囨护缁撴灉鐘舵€?|
| task_templates | user_id | 鏌ヨ<EFBFBD>鐢ㄦ埛鐨勬ā鏉?|
| batch_tasks | status | 过滤任务状态 |
| batch_results | task_id | 查询任务的所有结果 |
| batch_results | document_id | 查询文档的处理结果 |
| batch_results | status | 过滤结果状态 |
| task_templates | user_id | 查询用户的模板 |
### 时间索引
| 琛ㄥ悕 | 绱㈠紩瀛楁<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: 鍒涘缓鎵瑰<EFBFBD>鐞嗕换鍔?
User->>API: 创建批处理任务
API->>BatchTask: 创建任务记录
API->>Document: 鏌ヨ<EFBFBD>鐭ヨ瘑搴撴枃妗垪琛?
API->>Document: 查询知识库文档列表
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`)
- 提取研究方法、样本量、P值等
@@ -542,52 +542,52 @@ sequenceDiagram
2. **文献摘要** (`summarize`)
- 批量生成文献摘要
- 缁熶竴鏍煎紡鍜岄暱搴?
- 统一格式和长度
3. **文献分类** (`classify`)
- 根据研究类型分类
- 鏍囩<E98F8D>鍖栫<E98D96>鐞?
- 标签化管理
---
## 变更历史
### v1.0 - 2025-11-12 - 鍒濆<EFBFBD>鐗堟湰 鉁?
### v1.0 - 2025-11-12 - 初始版本 ✅
**鍙樻洿鍐呭<EFBFBD>锛?*
**变更内容:**
1.`public` schema迁移到`pkb_schema`
2. 5<EFBFBD>〃鍏ㄩ儴杩佺Щ锛?
2. 5个表全部迁移:
- knowledge_bases
- documents
- batch_tasks
- batch_results
- task_templates
3. 在Prisma中添加`@@schema("pkb_schema")`标签
4. 鎵€鏈夋暟鎹?00%瀹屾暣杩佺Щ
4. 所有数据100%完整迁移
**杩佺Щ鑴氭湰锛?* `docs/09-鏋舵瀯瀹炴柦/migration-scripts/004-migrate-pkb.sql`
**迁移脚本:** `docs/09-架构实施/migration-scripts/004-migrate-pkb.sql`
**楠岃瘉鐘舵€侊細** 鉁?宸查獙璇侊紝鍔熻兘姝e父
**验证状态:** ✅ 已验证,功能正常
**鐗规畩澶勭悊锛?*
- `batch_results.rawOutput` 鈫?`raw_output`锛堝垪鍚嶆槧灏勪慨姝o級
- `task_templates.outputFields` 鈫?`output_fields`锛堝垪鍚嶆槧灏勪慨姝o級
**特殊处理:**
- `batch_results.rawOutput` `raw_output`(列名映射修正)
- `task_templates.outputFields` `output_fields`(列名映射修正)
---
## 📚 相关文档
- [Schema闅旂<EFBFBD>鏋舵瀯璁捐<EFBFBD>](../../../09-鏋舵瀯瀹炴柦/01-Schema闅旂<EFBFBD>鏋舵瀯璁捐<EFBFBD>锛?0涓<30>.md)
- [Schema隔离架构设计](../../../09-架构实施/01-Schema隔离架构设计10个.md)
- [Schema迁移完成报告](../../../09-架构实施/Schema迁移完成报告.md)
- [Prisma配置完成报告](../../../09-架构实施/Prisma配置完成报告.md)
- [<EFBFBD>€熷姛鑳芥祴璇曟姤鍛奭(../../../09-鏋舵瀯瀹炴柦/蹇<>€熷姛鑳芥祴璇曟姤鍛?md)
- [AIA鏁版嵁搴撹<EFBFBD>璁℃枃妗<EFBFBD>(../../AIA-AI鏅鸿兘闂<E58598>瓟/02-鎶€鏈<E282AC><E98F88>璁?01-鏁版嵁搴撹<E690B4>璁?md)
- [快速功能测试报告](../../../09-架构实施/快速功能测试报告.md)
- [AIA数据库设计文档](../../AIA-AI智能问答/02-技术设计/01-数据库设计.md)
---
**文档维护者:** AI助手
**最后更新:** 2025-11-12
**鏂囨。鐘舵€侊細** 鉁?宸插畬鎴愬苟楠岃瘉
**文档状态:** ✅ 已完成并验证

View File

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

View File

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

View File

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

View File

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