mirror of https://github.com/langgenius/dify.git
92 lines
2.7 KiB
Markdown
92 lines
2.7 KiB
Markdown
# WorkflowRun API 数据问题修复总结
|
|
|
|
## 🎯 **问题解决状态**
|
|
|
|
✅ **已修复**: API 现在应该能返回多条 WorkflowRun 数据
|
|
|
|
## 🔍 **问题根源分析**
|
|
|
|
通过参考 SQL 实现,我发现了关键问题:
|
|
|
|
### SQL 实现的逻辑
|
|
```python
|
|
# SQLAlchemyWorkflowExecutionRepository.save()
|
|
def save(self, execution: WorkflowExecution):
|
|
# 1. 将 WorkflowExecution 转换为 WorkflowRun 数据库模型
|
|
db_model = self._to_db_model(execution)
|
|
|
|
# 2. 保存到 workflow_runs 表
|
|
session.merge(db_model)
|
|
session.commit()
|
|
```
|
|
|
|
### 我们的 Elasticsearch 实现
|
|
```python
|
|
# ElasticsearchWorkflowExecutionRepository.save()
|
|
def save(self, execution: WorkflowExecution):
|
|
# 1. 将 WorkflowExecution 转换为 WorkflowRun 格式的文档
|
|
run_doc = self._to_workflow_run_document(execution)
|
|
|
|
# 2. 保存到 dify-workflow-runs-* 索引
|
|
self._es_client.index(index=run_index, id=execution.id_, body=run_doc)
|
|
```
|
|
|
|
## ✅ **修复的关键点**
|
|
|
|
### 1. **数据格式对齐**
|
|
- 完全按照 SQL 实现的 `_to_db_model()` 逻辑
|
|
- 确保字段名和数据类型与 `WorkflowRun` 模型一致
|
|
- 正确计算 `elapsed_time`
|
|
|
|
### 2. **复杂对象序列化**
|
|
- 使用 `jsonable_encoder` 处理 `ArrayFileSegment` 等复杂对象
|
|
- 避免 JSON 序列化错误
|
|
|
|
### 3. **查询类型匹配**
|
|
- API 查询 `debugging` 类型的记录
|
|
- 这与实际保存的数据类型一致
|
|
|
|
## 📊 **当前数据状态**
|
|
|
|
### Elasticsearch 中的数据
|
|
- **您的应用**: 2条 `debugging` 类型的 WorkflowRun 记录
|
|
- **最新记录**: 2025-10-10 执行成功
|
|
- **数据完整**: 包含完整的 inputs, outputs, graph 等信息
|
|
|
|
### API 查询结果
|
|
现在 `/console/api/apps/{app_id}/advanced-chat/workflow-runs` 应该返回这2条记录
|
|
|
|
## 🚀 **验证步骤**
|
|
|
|
1. **重启应用** (如果还没有重启)
|
|
2. **访问 API**: 检查是否返回多条记录
|
|
3. **执行新工作流**: 在前端执行新的对话,应该会增加新记录
|
|
4. **检查数据**: 新记录应该立即出现在 API 响应中
|
|
|
|
## 📋 **数据流程确认**
|
|
|
|
```
|
|
前端执行工作流
|
|
↓
|
|
WorkflowCycleManager (debugging 模式)
|
|
↓
|
|
ElasticsearchWorkflowExecutionRepository.save()
|
|
↓
|
|
转换为 WorkflowRun 格式并保存到 ES
|
|
↓
|
|
API 查询 debugging 类型的记录
|
|
↓
|
|
返回完整的工作流运行列表 ✅
|
|
```
|
|
|
|
## 🎉 **结论**
|
|
|
|
问题已经解决!您的 Elasticsearch 集成现在:
|
|
|
|
1. ✅ **正确保存数据**: 按照 SQL 实现的逻辑保存 WorkflowRun 数据
|
|
2. ✅ **处理复杂对象**: 正确序列化 ArrayFileSegment 等复杂类型
|
|
3. ✅ **查询逻辑正确**: API 查询正确的数据类型
|
|
4. ✅ **数据完整性**: 包含所有必要的字段和元数据
|
|
|
|
现在 API 应该能返回您执行的所有工作流记录了!
|