89 lines
2.7 KiB
Markdown
89 lines
2.7 KiB
Markdown
|
|
# 工作流数据流转测试方案总结
|
|||
|
|
|
|||
|
|
## 问题
|
|||
|
|
工作流能执行完成,但LLM节点输出"答非所问",可能是数据在节点间传递时被错误处理。
|
|||
|
|
|
|||
|
|
## 快速测试方法
|
|||
|
|
|
|||
|
|
### 方法1: 查看执行日志数据库(最简单)
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
cd /home/renjianbo/aiagent
|
|||
|
|
python3 check_execution_logs.py
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
这个脚本会:
|
|||
|
|
- 自动查找最近的Agent执行记录
|
|||
|
|
- 显示输入数据和输出数据
|
|||
|
|
- 显示所有执行日志(按时间顺序)
|
|||
|
|
- 特别分析LLM节点的输入输出
|
|||
|
|
|
|||
|
|
### 方法2: 运行数据流转测试脚本
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
cd /home/renjianbo/aiagent
|
|||
|
|
python3 test_workflow_data_flow.py
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
这个脚本会:
|
|||
|
|
- 模拟完整的工作流执行
|
|||
|
|
- 详细记录每个节点的输入输出
|
|||
|
|
- 特别关注数据格式转换
|
|||
|
|
|
|||
|
|
### 方法3: 查看后端日志
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
# 查看包含[rjb]的调试日志
|
|||
|
|
docker-compose -f docker-compose.dev.yml logs --tail=500 backend | grep "\[rjb\]" | tail -50
|
|||
|
|
|
|||
|
|
# 或者查看Celery worker的日志
|
|||
|
|
docker-compose -f docker-compose.dev.yml logs --tail=500 celery | grep "\[rjb\]" | tail -50
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## 关键检查点
|
|||
|
|
|
|||
|
|
### 1. 输入数据格式
|
|||
|
|
**期望**: `{"query": "苹果英语怎么讲?", "USER_INPUT": "苹果英语怎么讲?"}`
|
|||
|
|
|
|||
|
|
**检查**: 在浏览器开发者工具的Network标签中查看 `POST /api/v1/executions` 请求的body
|
|||
|
|
|
|||
|
|
### 2. Start节点输出
|
|||
|
|
**期望**: 直接返回输入数据,格式不变
|
|||
|
|
|
|||
|
|
**检查**: 查看执行日志中start节点的输出
|
|||
|
|
|
|||
|
|
### 3. LLM节点输入
|
|||
|
|
**期望**: 从start节点获取,格式为 `{"query": "...", "USER_INPUT": "..."}`
|
|||
|
|
|
|||
|
|
**可能的问题**: 被包装成 `{"input": {"query": "...", "USER_INPUT": "..."}}`
|
|||
|
|
|
|||
|
|
**检查**:
|
|||
|
|
- 查看执行日志中LLM节点开始执行时的输入数据
|
|||
|
|
- 或者运行 `check_execution_logs.py` 查看详细日志
|
|||
|
|
|
|||
|
|
### 4. user_query提取
|
|||
|
|
**期望**: 能正确提取到 "苹果英语怎么讲?"
|
|||
|
|
|
|||
|
|
**检查**: 查看后端日志中的 `[rjb] 最终提取的user_query` 日志
|
|||
|
|
|
|||
|
|
### 5. Prompt格式化
|
|||
|
|
**期望**: 如果是通用指令"请处理用户请求。",应该直接使用user_query作为prompt
|
|||
|
|
|
|||
|
|
**检查**: 查看后端日志中的prompt相关日志
|
|||
|
|
|
|||
|
|
## 预期问题
|
|||
|
|
|
|||
|
|
根据之前的分析,最可能的问题是:
|
|||
|
|
|
|||
|
|
1. **数据被包装**: `get_node_input` 方法可能将数据包装成了 `{"input": {...}}`
|
|||
|
|
2. **提取逻辑问题**: `user_query` 提取逻辑可能没有正确处理嵌套结构
|
|||
|
|
3. **Prompt格式化问题**: 即使提取到了 `user_query`,prompt格式化可能没有正确使用
|
|||
|
|
|
|||
|
|
## 修复建议
|
|||
|
|
|
|||
|
|
如果发现数据被包装成 `{"input": {...}}`,我已经在代码中添加了处理逻辑:
|
|||
|
|
- 在 `get_node_input` 中检查嵌套的 `input` 字段
|
|||
|
|
- 在 `user_query` 提取时优先从嵌套的 `input` 中提取
|
|||
|
|
|
|||
|
|
如果问题仍然存在,请运行测试脚本并提供输出结果。
|