dify
This commit is contained in:
127
schoolNewsServ/ai/数据同步检查报告.md
Normal file
127
schoolNewsServ/ai/数据同步检查报告.md
Normal file
@@ -0,0 +1,127 @@
|
||||
# AI模块数据同步检查报告
|
||||
|
||||
## ✅ 检查日期:2025-11-04
|
||||
|
||||
## 📊 同步状态总览
|
||||
|
||||
### ✅ 完全同步(3/5个Service)
|
||||
|
||||
#### 1. AiKnowledgeServiceImpl ✅ **已完成所有同步**
|
||||
- ✅ **createKnowledge**: 先调用`difyApiClient.createDataset()`创建Dify知识库,再保存本地
|
||||
- ✅ **updateKnowledge**: 检测title/description变化,调用`difyApiClient.updateDataset()`同步到Dify ✅ **已修复**
|
||||
- ✅ **deleteKnowledge**: 先调用`difyApiClient.deleteDataset()`删除Dify知识库,再删除本地
|
||||
|
||||
---
|
||||
|
||||
#### 2. AiUploadFileServiceImpl ✅
|
||||
- ✅ **uploadToKnowledge**: 调用`difyApiClient.uploadDocumentByFile()`上传到Dify,再保存本地
|
||||
- ✅ **batchUploadToKnowledge**: 批量上传到Dify
|
||||
- ✅ **deleteFile**: 先调用`difyApiClient.deleteDocument()`删除Dify文档,再删除本地
|
||||
- ✅ **syncFileStatus**: 从Dify同步文件处理状态
|
||||
- ✅ **syncKnowledgeFiles**: 批量同步知识库的所有文件状态
|
||||
|
||||
---
|
||||
|
||||
#### 3. AiChatServiceImpl ✅
|
||||
- ✅ **streamChat**: 在对话时自动获取Dify的conversation_id并保存到`difyConversationId`字段
|
||||
- ✅ **blockingChat**: 同上
|
||||
- ⚠️ **createConversation**: 只创建本地会话,**Dify conversation在首次对话时自动创建**
|
||||
- ⚠️ **updateConversation**: 只更新本地(title等元数据),**Dify不支持单独的conversation管理API**
|
||||
- ⚠️ **deleteConversation**: 只删除本地,**Dify没有提供删除conversation的API**
|
||||
|
||||
**说明**:
|
||||
- Dify的conversation是在对话时自动创建和管理的
|
||||
- 本地的TbAiConversation表用于管理会话元数据(标题、摘要、收藏等)
|
||||
- `difyConversationId`字段用于关联Dify的会话ID
|
||||
- **这种设计是合理的**,不需要修改
|
||||
|
||||
---
|
||||
|
||||
### ✅ 无需同步(2/5个Service)
|
||||
|
||||
#### 4. AiAgentConfigServiceImpl ✅
|
||||
- ✅ **createAgent**: 只创建本地配置
|
||||
- ✅ **updateAgent**: 只更新本地配置
|
||||
- ✅ **deleteAgent**: 只删除本地配置
|
||||
|
||||
**说明**:
|
||||
- 智能体配置是本地管理的元数据
|
||||
- `difyAppId`字段只是引用Dify的App ID,不需要通过API创建
|
||||
- Dify App需要在Dify平台手动创建,然后将App ID填入配置
|
||||
- **这种设计是合理的**,不需要修改
|
||||
|
||||
---
|
||||
|
||||
#### 5. AiChatHistoryServiceImpl ✅
|
||||
- ✅ **所有方法都是查询、统计、导出操作**
|
||||
- ✅ 不涉及数据修改,无需同步
|
||||
|
||||
---
|
||||
|
||||
## ✅ 已修复的问题
|
||||
|
||||
### ✅ 问题1:知识库更新未同步到Dify(已修复)
|
||||
|
||||
**文件**: `AiKnowledgeServiceImpl.java`
|
||||
**方法**: `updateKnowledge`
|
||||
**问题**: 更新知识库的title或description时,只更新了本地数据库,没有调用Dify API
|
||||
|
||||
**修复内容**:
|
||||
1. 新增 `DifyApiClient.updateDataset()` 方法
|
||||
2. 新增 `DatasetUpdateRequest` DTO类
|
||||
3. 在 `updateKnowledge()` 方法中添加Dify同步逻辑:
|
||||
- 检测title或description是否改变
|
||||
- 如果改变,调用Dify API更新
|
||||
- Dify更新失败不阻塞本地更新,只记录日志
|
||||
|
||||
**修复时间**: 2025-11-04
|
||||
|
||||
---
|
||||
|
||||
## ✅ 数据同步最佳实践总结
|
||||
|
||||
### 创建操作(CREATE)
|
||||
1. 先调用Dify API创建资源
|
||||
2. 保存Dify返回的ID到本地数据库
|
||||
3. 如果Dify创建失败,不保存本地记录
|
||||
|
||||
### 更新操作(UPDATE)
|
||||
1. 如果更新的字段在Dify中存在对应资源,先更新Dify
|
||||
2. Dify更新成功或失败都记录日志
|
||||
3. 更新本地数据库
|
||||
|
||||
### 删除操作(DELETE)
|
||||
1. 先调用Dify API删除资源
|
||||
2. 即使Dify删除失败也继续删除本地记录(逻辑删除)
|
||||
3. 记录删除日志
|
||||
|
||||
### 同步操作(SYNC)
|
||||
1. 定期从Dify同步状态(如文件向量化状态)
|
||||
2. 使用异步任务避免阻塞主流程
|
||||
|
||||
---
|
||||
|
||||
## 📋 修复清单
|
||||
|
||||
- [x] 修复 `AiKnowledgeServiceImpl.updateKnowledge()` - 添加Dify知识库更新同步 ✅ **已完成**
|
||||
|
||||
---
|
||||
|
||||
## 📝 备注
|
||||
|
||||
1. **Dify Conversation管理**:Dify的conversation是在对话时自动创建的,不需要单独的创建API,当前实现合理。
|
||||
|
||||
2. **智能体配置**:智能体配置是本地元数据,difyAppId只是引用,需要在Dify平台手动创建App,当前实现合理。
|
||||
|
||||
3. **文件上传**:已完美同步,包括上传、删除、状态同步等。
|
||||
|
||||
4. **知识库管理**:除了更新操作,其他都已同步。
|
||||
|
||||
---
|
||||
|
||||
## 🎯 下一步行动
|
||||
|
||||
1. 实现 `AiKnowledgeServiceImpl.updateKnowledge()` 的Dify同步功能
|
||||
2. 测试更新知识库后在Dify平台的显示效果
|
||||
3. 考虑添加批量同步功能,用于修复历史数据不一致问题
|
||||
|
||||
Reference in New Issue
Block a user