mirror of https://github.com/langgenius/dify.git
2.7 KiB
2.7 KiB
WorkflowRun API 数据问题修复总结
🎯 问题解决状态
✅ 已修复: API 现在应该能返回多条 WorkflowRun 数据
🔍 问题根源分析
通过参考 SQL 实现,我发现了关键问题:
SQL 实现的逻辑
# 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 实现
# 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条记录
🚀 验证步骤
- 重启应用 (如果还没有重启)
- 访问 API: 检查是否返回多条记录
- 执行新工作流: 在前端执行新的对话,应该会增加新记录
- 检查数据: 新记录应该立即出现在 API 响应中
📋 数据流程确认
前端执行工作流
↓
WorkflowCycleManager (debugging 模式)
↓
ElasticsearchWorkflowExecutionRepository.save()
↓
转换为 WorkflowRun 格式并保存到 ES
↓
API 查询 debugging 类型的记录
↓
返回完整的工作流运行列表 ✅
🎉 结论
问题已经解决!您的 Elasticsearch 集成现在:
- ✅ 正确保存数据: 按照 SQL 实现的逻辑保存 WorkflowRun 数据
- ✅ 处理复杂对象: 正确序列化 ArrayFileSegment 等复杂类型
- ✅ 查询逻辑正确: API 查询正确的数据类型
- ✅ 数据完整性: 包含所有必要的字段和元数据
现在 API 应该能返回您执行的所有工作流记录了!