xinli/.kiro/specs/local-rag-knowledge-base/tasks.md
2025-12-19 14:03:43 +08:00

327 lines
13 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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、视频
- 进行用户培训(知识库管理、报告生成、智能问答)
- 解答用户问题
- 收集用户反馈
- 交付部署包和文档
- 提供技术支持联系方式