xinli/.kiro/specs/local-rag-knowledge-base/tasks.md

327 lines
13 KiB
Markdown
Raw Normal View History

# Implementation Plan
- [ ] 1. 添加Maven依赖和配置
- 在 ry-xinli-system/pom.xml 添加依赖OkHttp、Apache PDFBox、Apache POI
- 在 application.yml 添加RAG相关配置Ollama URL、ChromaDB URL、文件路径
- 创建配置类 RagProperties.java 读取配置
- _Requirements: 8.1, 9.3_
- [ ] 2. 实现Ollama客户端
- 创建 com.ddnai.system.rag.client.OllamaClient.java
- 实现 embed() 方法调用 /api/embeddings 接口
- 实现 generate() 方法调用 /api/generate 接口
- 实现 listModels() 和 checkConnection() 方法
- 添加错误处理和重试机制
- _Requirements: 3.5, 4.4, 5.1, 5.2_
- [ ]* 2.1 编写Ollama客户端单元测试
- 测试embed()方法返回768维向量
- 测试generate()方法返回非空字符串
- 测试连接失败时的错误处理
- [ ] 3. 实现ChromaDB客户端
- 创建 com.ddnai.system.rag.client.ChromaDBClient.java
- 实现 addDocuments() 方法调用 /api/v1/collections/{name}/add
- 实现 query() 方法调用 /api/v1/collections/{name}/query
- 实现 deleteDocuments() 方法
- 实现 getCollection() 方法
- 添加连接池和错误处理
- _Requirements: 1.6, 3.2, 8.5_
- [ ]* 3.1 编写ChromaDB客户端单元测试
- 测试添加文档后能查询到
- 测试删除文档后查询不到
- 测试查询返回Top-K结果
- [ ] 4. 实现文档解析工具
- 创建 com.ddnai.system.rag.util.DocumentParser.java
- 实现 parsePdf() 方法使用PDFBox解析PDF
- 实现 parseDocx() 方法使用Apache POI解析Word
- 实现 parseTxt() 方法读取TXT文件
- 实现 parse() 方法自动识别格式
- 处理解析异常和特殊字符
- _Requirements: 1.1, 1.2, 1.3_
- [ ]* 4.1 编写文档解析单元测试
- 准备测试文档PDF、Word、TXT
- 测试解析结果包含预期文本
- 测试特殊字符处理
- [ ] 5. 实现文本分块工具
- 创建 com.ddnai.system.rag.util.TextSplitter.java
- 实现 split() 方法按字符数分块chunkSize=800, overlap=200
- 实现 splitBySentences() 方法按句子分块
- 确保分块大小在500-1000字符之间除最后一块
- _Requirements: 1.4_
- [ ]* 5.1 编写文本分块单元测试
- 测试分块大小约束
- 测试分块重叠逻辑
- 测试边界情况(短文本、空文本)
- [ ] 6. 实现向量化服务
- 创建 com.ddnai.system.rag.service.EmbeddingService.java
- 注入 OllamaClient
- 实现 embedText() 方法生成768维向量
- 实现 embedBatch() 方法批量向量化
- 添加缓存机制(可选)
- _Requirements: 1.5, 3.1, 4.1_
- [ ]* 6.1 编写向量化服务单元测试
- 测试向量维度为768
- 测试批量向量化
- 测试相同文本生成相同向量
- [ ] 7. 实现知识库管理服务
- 创建 com.ddnai.system.rag.service.KnowledgeService.java
- 实现 uploadDocument() 方法(解析→分块→向量化→存储)
- 实现 listDocuments() 方法返回文档列表(分页)
- 实现 getDocument() 方法返回文档详情
- 实现 deleteDocument() 方法删除文档和向量
- 实现 searchDocuments() 方法按文件名搜索
- 实现 rebuildIndex() 方法重建索引
- _Requirements: 1.1-1.7, 2.1-2.5, 10.1-10.5_
- [ ]* 7.1 编写知识库管理服务单元测试
- 测试上传文档后能列表查询到
- 测试删除文档后查询不到
- 测试文件名搜索功能
- 测试重建索引功能
- [ ] 8. 实现RAG检索服务
- 创建 com.ddnai.system.rag.service.RetrievalService.java
- 注入 ChromaDBClient 和 EmbeddingService
- 实现 retrieve() 方法进行语义检索Top-K=5, threshold=0.7
- 实现 retrieveWithFilter() 方法支持分类过滤
- 实现相似度过滤逻辑
- 实现结果排序和去重
- _Requirements: 3.2, 3.3, 4.2_
- [ ]* 8.1 编写RAG检索服务单元测试
- 测试Top-K数量约束
- 测试相似度阈值过滤
- 测试分类过滤功能
- [ ] 9. 实现提示词构建工具
- 创建 com.ddnai.system.rag.util.PromptBuilder.java
- 实现 buildReportPrompt() 方法构建报告生成提示词
- 实现 buildQAPrompt() 方法构建问答提示词
- 实现 buildSuggestionPrompt() 方法构建建议提示词
- 确保提示词包含所有必要信息(检索知识、用户数据)
- 优化提示词模板以提高生成质量
- _Requirements: 3.4, 4.3_
- [ ]* 9.1 编写提示词构建单元测试
- 测试提示词包含检索知识
- 测试提示词包含用户数据
- 测试提示词格式正确
- [ ] 10. 实现AI生成服务
- 创建 com.ddnai.system.rag.service.GenerationService.java
- 注入 OllamaClient 和 RetrievalService
- 实现 generateReport() 方法(检索→构建提示词→生成报告)
- 实现 answerQuestion() 方法(检索→构建提示词→生成回答)
- 实现 generateSuggestions() 方法生成矫治建议
- 确保返回格式包含内容和来源引用
- 添加生成超时控制30秒
- _Requirements: 3.5, 3.6, 4.4, 4.5_
- [ ]* 10.1 编写AI生成服务单元测试
- 测试生成响应非空
- 测试响应包含来源引用
- 测试超时处理
- [ ] 11. 实现文件监听服务
- 创建 com.ddnai.system.rag.service.FileWatcherService.java
- 使用 Java WatchService 监听 D:\wwwroot\RAG\uploads 目录
- 实现 @PostConstruct startWatching() 方法启动监听
- 实现 processNewFile() 方法处理新文件
- 实现 @PreDestroy stopWatching() 方法停止监听
- 添加文件处理状态记录(避免重复处理)
- 添加错误处理和日志记录
- _Requirements: 1.1-1.7_
- [ ]* 11.1 编写文件监听服务单元测试
- 测试检测到新文件
- 测试自动处理文件
- 测试避免重复处理
- [ ] 12. 创建数据模型类
- 创建 com.ddnai.system.rag.domain.DocumentInfo.java
- 创建 com.ddnai.system.rag.domain.RetrievalResult.java
- 创建 com.ddnai.system.rag.domain.GenerationResult.java
- 创建 com.ddnai.system.rag.domain.SourceReference.java
- 创建 com.ddnai.system.rag.domain.SystemStatusResponse.java
- 创建 com.ddnai.system.rag.domain.KnowledgeStats.java
- 创建 com.ddnai.system.rag.domain.RebuildResult.java
- 添加必要的注解和验证
- _Requirements: 2.1, 2.2, 3.6, 4.5, 5.1_
- [ ] 13. 实现知识库管理Controller
- 创建 com.ddnai.web.controller.psychology.PsyKnowledgeController.java
- 注入 KnowledgeService
- 实现 @PostMapping("/upload") 上传文档接口
- 实现 @GetMapping("/list") 获取文档列表接口(分页)
- 实现 @GetMapping("/{id}") 获取文档详情接口
- 实现 @DeleteMapping("/{id}") 删除文档接口
- 实现 @PostMapping("/search") 搜索文档接口
- 实现 @PostMapping("/rebuild") 重建索引接口
- 添加权限控制注解 @PreAuthorize
- 添加参数验证和错误处理
- _Requirements: 2.1-2.5, 10.1-10.5_
- [ ] 14. 实现AI分析Controller
- 创建 com.ddnai.web.controller.psychology.PsyAIAnalysisController.java
- 注入 GenerationService
- 实现 @PostMapping("/generate-report") 生成报告接口
- 实现 @PostMapping("/chat") 智能问答接口
- 实现 @GetMapping("/system/status") 系统状态接口
- 添加权限控制注解
- 添加请求日志记录
- _Requirements: 3.1-3.7, 4.1-4.5, 5.1-5.3_
- [ ] 15. 集成AI报告生成到现有报告服务
- 修改 PsyComprehensiveReportServiceImpl.java
- 注入 GenerationService
- 在生成综合报告时调用 generateReport()
- 解析生成结果并存储到MySQL
- 保存知识来源引用到数据库(新增字段或表)
- 实现错误处理和降级策略AI失败时使用原有逻辑
- 添加生成日志记录
- _Requirements: 6.2, 6.4_
- [ ]* 15.1 编写报告集成单元测试
- 测试报告生成成功
- 测试报告存储到MySQL
- 测试AI失败时的降级处理
- [ ] 16. 第一次检查点 - 测试核心功能
- 启动Ollama服务
- 启动ChromaDB服务
- 启动Spring Boot应用
- 测试文档上传功能
- 测试知识库管理功能
- 测试RAG报告生成功能
- 测试智能问答功能
- 确保所有测试通过,询问用户是否有问题
- [ ] 17. 创建知识库管理前端页面
- 创建 xinli-ui/src/views/psychology/knowledge/index.vue
- 实现文档列表展示(表格、分页)
- 实现文档上传功能(文件选择、进度条)
- 实现文档删除功能(确认对话框)
- 实现分类筛选功能
- 实现文件名搜索功能
- 实现索引重建功能(进度显示)
- 添加权限控制
- _Requirements: 7.1, 7.2, 7.3_
- [ ] 18. 优化报告展示页面
- 修改 xinli-ui/src/views/psychology/report/comprehensive.vue
- 添加知识来源引用展示区域
- 实现来源链接点击查看详情
- 添加来源文档片段弹窗
- 优化报告内容排版
- 添加"基于知识库生成"标识
- _Requirements: 7.4, 7.5_
- [ ] 19. 创建智能问答前端页面
- 创建 xinli-ui/src/views/psychology/ai-chat/index.vue
- 实现对话界面(消息列表、输入框)
- 实现发送问题功能
- 实现显示回答和来源引用
- 实现多轮对话支持
- 实现对话历史记录
- 添加加载动画和错误提示
- _Requirements: 7.6_
- [ ] 20. 添加前端路由和菜单
- 在 router/index.js 添加知识库管理路由
- 在 router/index.js 添加智能问答路由
- 在菜单配置中添加"知识库管理"菜单项
- 在菜单配置中添加"智能问答"菜单项
- 配置权限控制(管理员可见)
- _Requirements: 7.1, 7.6_
- [ ] 21. 创建系统监控页面
- 创建 xinli-ui/src/views/psychology/ai-system/status.vue
- 显示Ollama连接状态绿色/红色指示灯)
- 显示ChromaDB状态
- 显示可用模型列表
- 显示知识库统计信息(文档数、向量数、存储空间)
- 实现连接测试按钮
- 实现自动刷新功能每30秒
- _Requirements: 5.1, 5.2, 5.3_
- [ ] 22. 第二次检查点 - 端到端测试
- 测试完整的文档上传流程前端→Controller→Service→ChromaDB
- 测试完整的报告生成流程前端→Controller→Service→Ollama→MySQL
- 测试完整的问答流程前端→Controller→Service→Ollama
- 测试知识库管理功能(列表、搜索、删除、重建)
- 测试系统监控功能
- 测试文件监听功能放文件到uploads目录
- 确保所有测试通过,询问用户是否有问题
- [ ] 23. 实现错误处理和日志记录
- 创建统一异常处理类 RagExceptionHandler.java
- 定义自定义异常类RagException、OllamaException、ChromaDBException
- 配置Logback日志按天切分、保留30天
- 实现日志脱敏工具类
- 在所有Service方法中添加日志记录
- 在所有Controller中添加请求日志
- _Requirements: 1.7, 3.7, 5.4_
- [ ] 24. 性能优化
- 实现向量缓存使用Caffeine或Redis
- 优化文档分块算法(并行处理)
- 优化向量化批处理批量调用Ollama API
- 添加数据库索引优化查询
- 实现异步任务处理(文档上传、索引重建使用@Async
- 配置线程池参数
- _Requirements: 1.4, 1.5, 1.6_
- [ ] 25. 安全加固
- 实现文件上传大小限制50MB
- 实现文件格式白名单验证
- 实现API访问频率限制使用拦截器
- 实现日志脱敏(移除敏感信息)
- 添加文件内容安全扫描(可选)
- 配置HTTPS生产环境
- _Requirements: 9.1, 9.2_
- [ ] 26. 编写部署文档和脚本
- 编写 README.md项目介绍、功能说明
- 编写 INSTALL.md安装步骤、环境要求
- 编写 USER_MANUAL.md用户手册
- 创建 start.bat 启动脚本
- 创建 stop.bat 停止脚本
- 创建 backup.bat 备份脚本
- 创建部署包目录结构
- _Requirements: 8.1_
- [ ] 27. 准备初始知识库文档
- 收集心理学专业文档PDF、Word
- 整理文档分类(人格心理学、认知心理学、临床心理学等)
- 放置文档到 D:\wwwroot\RAG\uploads 目录
- 等待系统自动处理或手动上传
- 验证文档已成功向量化
- _Requirements: 1.1-1.7_
- [ ] 28. 最终检查点 - 生产环境验证
- 在生产环境部署Spring Boot应用
- 导入初始心理学文档到知识库
- 进行压力测试(并发用户、大文档处理)
- 验证数据持久化和恢复
- 验证日志记录和监控
- 验证备份和恢复流程
- 生成测试报告
- 确保所有功能正常,询问用户是否满意
- [ ] 29. 用户培训和交付
- 准备用户培训材料PPT、视频
- 进行用户培训(知识库管理、报告生成、智能问答)
- 解答用户问题
- 收集用户反馈
- 交付部署包和文档
- 提供技术支持联系方式