mirror of https://github.com/langgenius/dify.git
3.5 KiB
3.5 KiB
WorkflowRun API 数据问题分析和解决方案
🔍 问题分析
您遇到的问题是:/console/api/apps/{app_id}/advanced-chat/workflow-runs API 只返回一条数据,但实际执行了多次工作流。
根本原因
-
数据存储分离:
WorkflowExecution(域模型) → 存储在dify-workflow-executions-*索引WorkflowRun(数据库模型) → 存储在dify-workflow-runs-*索引- API 查询的是
WorkflowRun数据
-
查询类型过滤:
- API 只查询
triggered_from == debugging的记录 - 但前端执行的工作流可能是
app-run类型
- API 只查询
-
数据同步缺失:
- 系统创建了
WorkflowExecution记录(65条) - 但没有创建对应的
WorkflowRun记录
- 系统创建了
✅ 解决方案
1. 修改 WorkflowExecutionRepository
我已经修改了 ElasticsearchWorkflowExecutionRepository.save() 方法,现在它会:
- 保存
WorkflowExecution数据到workflow-executions索引 - 同时保存对应的
WorkflowRun数据到workflow-runs索引
2. 修改查询逻辑
修改了 WorkflowRunService.get_paginate_advanced_chat_workflow_runs() 方法:
- 从查询
debugging类型改为查询app-run类型 - 这样可以返回用户在前端执行的工作流记录
🚀 测试步骤
1. 重启应用
使用新的配置重启 Dify API 服务
2. 执行新的工作流
在前端执行一个新的工作流对话
3. 检查数据
# 检查 Elasticsearch 中的数据
curl -k -u elastic:2gYvv6+O36PGwaVD6yzE -X GET "https://localhost:9200/dify-workflow-runs-*/_search?pretty&size=1"
# 检查 triggered_from 统计
curl -k -u elastic:2gYvv6+O36PGwaVD6yzE -X GET "https://localhost:9200/dify-workflow-runs-*/_search?pretty" -H 'Content-Type: application/json' -d '{
"size": 0,
"aggs": {
"triggered_from_stats": {
"terms": {
"field": "triggered_from"
}
}
}
}'
4. 测试 API
访问 http://localhost:5001/console/api/apps/2b517b83-ecd1-4097-83e4-48bc626fd0af/advanced-chat/workflow-runs
📊 数据流程图
前端执行工作流
↓
WorkflowCycleManager.handle_workflow_run_start()
↓
WorkflowExecutionRepository.save(WorkflowExecution)
↓
ElasticsearchWorkflowExecutionRepository.save()
↓
保存到两个索引:
├── dify-workflow-executions-* (WorkflowExecution 数据)
└── dify-workflow-runs-* (WorkflowRun 数据)
↓
API 查询 workflow-runs 索引
↓
返回完整的工作流运行列表
🔧 配置要求
确保您的 .env 文件包含:
# Elasticsearch 配置
ELASTICSEARCH_ENABLED=true
ELASTICSEARCH_HOSTS=["https://localhost:9200"]
ELASTICSEARCH_USERNAME=elastic
ELASTICSEARCH_PASSWORD=2gYvv6+O36PGwaVD6yzE
ELASTICSEARCH_USE_SSL=true
ELASTICSEARCH_VERIFY_CERTS=false
# Repository 配置
CORE_WORKFLOW_EXECUTION_REPOSITORY=core.repositories.elasticsearch_workflow_execution_repository.ElasticsearchWorkflowExecutionRepository
CORE_WORKFLOW_NODE_EXECUTION_REPOSITORY=core.repositories.elasticsearch_workflow_node_execution_repository.ElasticsearchWorkflowNodeExecutionRepository
API_WORKFLOW_RUN_REPOSITORY=repositories.elasticsearch_api_workflow_run_repository.ElasticsearchAPIWorkflowRunRepository
🎯 预期结果
修复后,您应该能够:
- 在前端执行多次工作流
- API 返回所有执行的工作流记录
- 数据同时存储在两个索引中,保持一致性
现在重启应用并测试新的工作流执行,应该可以看到完整的运行历史了!