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:
@@ -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>枃妗f槸PKB涓<EFBFBD>汉鐭ヨ瘑搴撴ā鍧楃殑**鐪熷疄鐘舵€佸揩鐓?*锛屽<E9949B>瀹炶<E780B9>褰曞綋鍓嶅紑鍙戠姸鎬併€佹妧鏈<E5A6A7>灦鏋勫拰宸茬煡闂<E785A1><E99782>銆?
|
||||
**涓庡叾浠栨枃妗g殑鍏崇郴**锛?- **鏈<>枃妗o紙00-妯″潡褰撳墠鐘舵€侊級**锛歐hat is锛堢湡瀹炵姸鎬侊紝鍖呮嫭闂<E5ABAD><E99782>锛?- **闇€姹傚垎鏋愭枃妗?*锛歐hat to do锛堜骇鍝侀渶姹傦級
|
||||
- **寮€鍙戣<E98D99>褰曟枃妗?*锛歐hat done锛堝紑鍙戝巻绋嬶級
|
||||
- **鎶€鏈<EFBFBD><EFBFBD>璁℃枃妗?*锛欻ow to do锛堣<E9949B>璁℃柟妗堬級
|
||||
|
||||
---
|
||||
|
||||
@@ -25,37 +20,31 @@
|
||||
|
||||
### 鏍稿績鍔熻兘
|
||||
|
||||
PKB(Personal Knowledge Base)个人知识库模块提供:
|
||||
- 🗂️ **知识库管理**:创建、编辑、删除个人知识库
|
||||
- 📄 **文档管理**:上传、处理、组织文档(PDF/Word/TXT/MD)
|
||||
- 🤖 **AI问答**:基于知识库内容的智能问答
|
||||
- 📊 **批处理**:批量提取文档信息,生成结构化数据
|
||||
|
||||
### 当前状态
|
||||
|
||||
| 组件 | 状态 | 完成度 | 说明 |
|
||||
PKB锛圥ersonal Knowledge Base锛変釜浜虹煡璇嗗簱妯″潡鎻愪緵锛?- 馃梻锔?**鐭ヨ瘑搴撶<E690B4>鐞?*锛氬垱寤恒€佺紪杈戙€佸垹闄や釜浜虹煡璇嗗簱
|
||||
- 馃搫 **鏂囨。绠$悊**锛氫笂浼犮€佸<E282AC>鐞嗐€佺粍缁囨枃妗o紙PDF/Word/TXT/MD锛?- 馃<> **AI闂<49>瓟**锛氬熀浜庣煡璇嗗簱鍐呭<E98D90>鐨勬櫤鑳介棶绛?- 馃搳 **鎵瑰<E98EB5>鐞?*锛氭壒閲忔彁鍙栨枃妗d俊鎭<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>浠g爜缁撴瀯
|
||||
|
||||
```
|
||||
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绡囨枃妗?- 娣卞害瑙h<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个模板(临床研究信息提取)
|
||||
- 需要更多预设模板和自定义能力
|
||||
**瑙e喅鏂规<EFBFBD>**锛?- v2.1鐗堟湰瀹炵幇RAG妫€绱?- 闆嗘垚Dify鐭ヨ瘑搴撴<E690B4>绱㈣兘鍔?
|
||||
### 2. 鎵瑰<E98EB5>鐞嗘ā鏉挎湁闄?馃煝 浣庝紭鍏堢骇
|
||||
|
||||
**闂<><E99782>鎻忚堪**锛?- 褰撳墠鍙<E5A2A0>敮鎸?涓<>ā鏉匡紙涓村簥鐮旂┒淇℃伅鎻愬彇锛?- 闇€瑕佹洿澶氶<E6BEB6>璁炬ā鏉垮拰鑷<E68BB0>畾涔夎兘鍔?
|
||||
**褰卞搷**锛氭壒澶勭悊搴旂敤鍦烘櫙鏈夐檺
|
||||
|
||||
**解决方案**:
|
||||
- v2.2版本增加药物安全性、患者基线等模板
|
||||
- 支持用户自定义模板
|
||||
|
||||
**瑙e喅鏂规<EFBFBD>**锛?- v2.2鐗堟湰澧炲姞鑽<EFBFBD>墿瀹夊叏鎬с€佹偅鑰呭熀绾跨瓑妯℃澘
|
||||
- 鏀<>寔鐢ㄦ埛鑷<E59F9B>畾涔夋ā鏉?
|
||||
### 3. 鏂囨。棰勮<E6A3B0>鍔熻兘缂哄け 馃煝 浣庝紭鍏堢骇
|
||||
|
||||
**问题描述**:
|
||||
- 暂不支持文档在线预览
|
||||
- 需下载后查看原文
|
||||
|
||||
**影响**:用户体验
|
||||
|
||||
**解决方案**:
|
||||
- v3.0版本集成PDF预览功能
|
||||
- 支持文档标注和批注
|
||||
|
||||
**闂<EFBFBD><EFBFBD>鎻忚堪**锛?- 鏆備笉鏀<E7AC89>寔鏂囨。鍦ㄧ嚎棰勮<E6A3B0>
|
||||
- 闇€涓嬭浇鍚庢煡鐪嬪師鏂?
|
||||
**褰卞搷**锛氱敤鎴蜂綋楠?
|
||||
**瑙e喅鏂规<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>枃妗d簡瑙e綋鍓嶇姸鎬? - 鏌ョ湅鍘熷瀷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>浠g爜锛氱害1,500琛?鍓嶇<E98D93>浠g爜锛氱害2,300琛?鎬昏<E98EAC>锛氱害3,800琛?```
|
||||
|
||||
### 开发进度
|
||||
```
|
||||
### 寮€鍙戣繘搴?```
|
||||
鏁翠綋杩涘害锛氱害75%
|
||||
|
||||
- 后端API:100% ✅
|
||||
- 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
|
||||
|
||||
|
||||
|
||||
@@ -1,164 +1,149 @@
|
||||
# **AI 临床医生与医院知识库 \- MVP 阶段产品需求文档 (PRD) V5.0**
|
||||
# **AI 銝游<EFBFBD><EFBFBD>餌<EFBFBD>銝𤾸龫<EFBFBD>Y䰻霂<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>Z<EFBFBD><EFBFBD>?
|
||||
* **AI <EFBFBD>䂿<EFBFBD>:** 瘚<EFBFBD><EFBFBD>颲枏枂 (Typewriter Effect)<EFBFBD>?
|
||||
* **撘閧鍂<EFBFBD><EFBFBD>釣:** 敹<>◆隞?\[<5B><>﹝<EFBFBD>㙡] <20>?\[1\] 敶W<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 敶W<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>X踎 (<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: FAILED,error\_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>蝥g<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>曄內蝥Z𠧧<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>蝝W<EFBFBD><EFBFBD>?| P0 |
|
||||
| TC02 | 颲寧<EFBFBD><EFBFBD>𣂼<EFBFBD> | 撠肽<E692A0>銝𠹺<E98A9D>蝚?31 銝芣<E98A9D>隞塚<E99A9E><E5A19A>滨垢摨娪獈甇V<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 |
|
||||
@@ -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 @@
|
||||
|
||||
### 鍔熻兘瀹氫綅
|
||||
|
||||
**PKB(Personal 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>鐭ヨ瘑搴撴枃妗e垪琛?
|
||||
|
||||
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
|
||||
**文档状态:** ✅ 已完成并验证
|
||||
**鏂囨。鐘舵€侊細** 鉁?宸插畬鎴愬苟楠岃瘉
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -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>諢溯ァ我シー邂励
|
||||
@@ -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绡囨枃妗h繘琛屾繁搴﹁В璇?
|
||||
- 姣忕瘒鏂囨。鐙<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`
|
||||
- 鉁?姝g‘璺<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` 组件
|
||||
**瑙e喅鏂规<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>鐞嗘渶灏?绡囨枃妗o紙鍚庣<E98D9A>闄愬埗锛?
|
||||
3. 閫愮瘒绮捐<EFBFBD>鏈€澶?绡囨枃妗o紙鍓嶇<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>瑙e喅鑳藉姏**锛氬揩閫熷畾浣嶅苟瑙e喅10+涓<>妧鏈<E5A6A7>棶棰?
|
||||
|
||||
**里程碑意义**:PKB模块已具备生产环境可用性,为后续功能扩展奠定了坚实基础!
|
||||
**閲岀▼纰戞剰涔?*锛歅KB妯″潡宸插叿澶囩敓浜х幆澧冨彲鐢ㄦ€э紝涓哄悗缁<E68297>姛鑳芥墿灞曞<E7819E>瀹氫簡鍧氬疄鍩虹<E98DA9>锛?
|
||||
|
||||
---
|
||||
|
||||
**下一步建议**:
|
||||
1. 进行完整的用户验收测试(UAT)
|
||||
**涓嬩竴姝ュ缓璁?*锛?
|
||||
1. 杩涜<EFBFBD>瀹屾暣鐨勭敤鎴烽獙鏀舵祴璇曪紙UAT锛?
|
||||
2. 浼樺寲鎵瑰<E98EB5>鐞嗘€ц兘锛堝苟鍙戙€佺紦瀛橈級
|
||||
3. 澧炲姞鏇村<E98F87>妯℃澘鍜岃嚜瀹氫箟鑳藉姏
|
||||
4. 完善错误处理和用户反馈
|
||||
4. 瀹屽杽閿欒<EFBFBD>澶勭悊鍜岀敤鎴峰弽棣?
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -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>浠g爜杩佺Щ鍒版柊鐨勬ā鍧楀寲鏋舵瀯
|
||||
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绡囨枃妗f繁搴﹁В璇?| `/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>鏇存柊**锛氭壒澶勭悊鍔熻兘璋冭瘯瀹屾垚鍚?
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -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寮曟搸** - 鍚戦噺妫€绱?
|
||||
|
||||
---
|
||||
|
||||
|
||||
Reference in New Issue
Block a user