# PKB个人知识?- 前端迁移与批处理功能完善 **开发日?*?026??? **开发人?*:AI Assistant **版本**:v2.0 --- ## 一、开发目? 1. **前端架构迁移**:将PKB前端迁移?`frontend-v2/modules/pkb` 新架? 2. **工作模式实现**:实现全文阅读、逐篇精读、批处理三种工作模式 3. **批处理功?*:完善批处理任务的执行、进度显示和结果导出 4. **UI优化**:优化界面细节,提升用户体验 --- ## 二、主要工作内? ### 1. 前端架构搭建 #### 目录结构创建 ``` frontend-v2/src/modules/pkb/ ├── api/ # API客户? ? └── knowledgeBaseApi.ts ├── stores/ # 状态管? ? └── useKnowledgeBaseStore.ts ├── components/ # 通用组件 ? ├── DocumentUpload.tsx ? └── Workspace/ # 工作台组? ? ├── FullTextMode.tsx ? ├── DeepReadMode.tsx ? ├── BatchModeComplete.tsx ? └── WorkModeSelector.tsx ├── pages/ # 页面组件 ? ├── DashboardPage.tsx ? └── WorkspacePage.tsx ├── hooks/ # 自定义Hooks ? └── useWorkMode.ts └── styles/ # 样式文件 └── workspace.css ``` #### 核心文件创建 - **DashboardPage.tsx**:知识库列表和创建入? - **WorkspacePage.tsx**:知识库工作台主页面 - **三种工作模式组件**:全文阅读、逐篇精读、批处理 ### 2. Chat组件集成 **技术选型**:Ant Design X **特点**? - 统一的对话组件,支持流式响应 - 自定义消息渲染器 - 自动滚动和输入框管理 **集成问题修复**? - ?输入框清除:使用受控模式 `value={inputValue}` - ?自动滚动:添?`messagesEndRef` 锚点 - ?参考文献格式化:实?`customMessageRenderer` ### 3. 工作模式实现 #### 3.1 全文阅读模式 **功能**? - 加载知识库全部文档(已完成状态) - 使用 `fullTextDocumentIds` 参数传递完整文? - AI具备全知视角,可进行综合分析 **API调用**? ```typescript body: JSON.stringify({ content: message, modelType: 'qwen-long', knowledgeBaseIds: [kbId], fullTextDocumentIds: completedDocIds, // 全文模式 }) ``` **修复问题**? - ?初次加载显示"0篇文? - ?将文档数量加?`conversationKey`,强制重新渲? #### 3.2 逐篇精读模式 **功能**? - 选择1-5篇文档进行深度解? - 每篇文档独立对话上下? - 切换文档时清空对话历? **技术实?*? ```typescript const conversationKey = useMemo(() => { return `kb-deepread-${kbId}-${selectedDoc.id}`; }, [kbId, selectedDoc.id]); ``` **修复问题**? - ?切换文档报错:`TypeError: formattedContent.replace is not a function` - ?添加类型检查,正确处理 `MessageRenderParams` - ?输入框不清除、不自动滚动 - ?在ChatContainer添加受控输入和滚动锚? #### 3.3 批处理模? **功能**? - 选择3-50篇文档批量提取信? - 支持临床研究信息提取模板?个字段) - 实时显示处理进度 - 结果可导出为CSV **开发历?*? **问题1:选择数量翻?* - ?原因:点击行和Checkbox都触发选择,导致重复添? - ?解决:使用统一?`toggle` 函数,Checkbox?`onClick stopPropagation` **问题2:API 404错误** - ?路径错误:`/api/v1/batch-tasks` - ?正确路径:`/api/v1/pkb/batch-tasks/batch/execute` **问题3:API 500错误** - ?字段名不匹配:前端发?`knowledgeBaseId`,后端期?`kb_id` - ?修复请求体格式: ```typescript { kb_id: kbId, // 后端格式 document_ids: selectedDocs, template_type: 'preset', template_id: 'clinical_research', model_type: 'qwen-long', } ``` **问题4:模板ID不匹?* - ?前端:`clinicalResearch`(驼峰) - ?后端:`clinical_research`(下划线? - ?统一?`clinical_research` **问题5:前端不显示结果** - ?后端返回 `status: "success"`,前端判?`status === 'completed'` - ?修复状态判断: ```typescript const isSuccess = docResult.status === 'success' || docResult.status === 'completed'; ``` **问题6:表格显示粗?* - ?文件名过长,内容显示不全 - ?实现方案A? - 文件名最?? - 内容最??(`-webkit-line-clamp: 3`) - 悬停显示完整内容(Tooltip? - 结果数据列更宽(280px? ### 4. 文档上传功能 **问题**? - ?"上传新文?按钮无响? - ?没有绑定 `onClick` 事件 **解决方案**? 1. 导入 `DocumentUpload` 组件?`Modal` 2. 添加 `uploadModalVisible` 状? 3. 为按钮绑?`onClick={() => setUploadModalVisible(true)}` 4. 添加上传弹窗,集?`DocumentUpload` 组件 5. 修复导入路径:`../stores/useKnowledgeBaseStore` --- ## 三、技术难点与解决方案 ### 1. ChatContainer消息渲染 **问题**:自定义渲染器接收的参数格式复杂 ```typescript interface MessageRenderParams { id: string | number; message: { id: string | number; role: string; content: string; status?: string; }; status: string; } ``` **解决**:正确解?`params.message.content` ### 2. 批处理结果获? **问题**:后端返回嵌套结?`{ success: true, data: { results: [...] } }` **解决**? ```typescript const resultsData = resultsJson.data?.results || []; const newResults = resultsData.map((docResult: any) => ({ documentId: docResult.document_id, documentName: docResult.document_name, result: docResult.data, // 提取数据在这? })); ``` ### 3. React Key重复警告 **问题**:批处理结果列表使用 `documentId` 作为key,可能重? **解决**? - 在文档选择列表使用 `useMemo` 去重 - 在结果映射时使用 `${documentId}-${index}` 确保唯一 ### 4. 前后端字段映? | 后端字段 | 前端显示 | |---------|---------| | `research_purpose` | 研究目的 | | `research_design` | 研究设计 | | `research_subjects` | 研究对象 | | `sample_size` | 样本?| | `intervention_group` | 干预?| | `control_group` | 对照?| | `results_data` | 结果及数?| | `oxford_level` | 牛津评级 | --- ## 四、API路由总结 ### 新架构路由(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` | | 批处理执?| POST | `/api/v1/pkb/batch-tasks/batch/execute` | | 批处理状?| GET | `/api/v1/pkb/batch-tasks/batch/tasks/:id` | | 批处理结?| GET | `/api/v1/pkb/batch-tasks/batch/tasks/:id/results` | ### 对话路由(通用? | 功能 | 方法 | 路径 | |------|------|------| | 流式对话 | POST | `/api/v1/chat/stream` | --- ## 五、UI/UX优化细节 ### 1. WorkspacePage布局 - **单层Header**:整合返回、标题、Tab切换、设置、头? - **Header高度**:`h-14`?6px? - **工作模式选择?*:紧凑的 `h-10` ? - **Chat区域**:最大化剩余空间 ### 2. 批处理结果表? - **固定表头**:背?`#F9FAFB`,文?`#6B7280` - **文件名列**?20px,最?? - **内容?*?80-280px,最?? - **悬停提示**:最大宽?50px,最大高?00px ### 3. 参考文献格? ```typescript // 卡片式显?