ss
This commit is contained in:
164
check_switch_logs.py
Executable file
164
check_switch_logs.py
Executable file
@@ -0,0 +1,164 @@
|
||||
#!/usr/bin/env python3
|
||||
"""
|
||||
查看Switch节点日志的专用脚本
|
||||
用于诊断Switch节点的分支过滤问题
|
||||
"""
|
||||
import sys
|
||||
import os
|
||||
import json
|
||||
from datetime import datetime
|
||||
|
||||
# 添加项目路径
|
||||
sys.path.insert(0, os.path.join(os.path.dirname(__file__), 'backend'))
|
||||
|
||||
from app.core.database import SessionLocal
|
||||
from app.models.execution import Execution
|
||||
from app.models.execution_log import ExecutionLog
|
||||
|
||||
|
||||
def format_json(data):
|
||||
"""格式化JSON数据"""
|
||||
if isinstance(data, dict):
|
||||
return json.dumps(data, ensure_ascii=False, indent=2)
|
||||
return str(data)
|
||||
|
||||
|
||||
def main():
|
||||
"""主函数"""
|
||||
db = SessionLocal()
|
||||
|
||||
try:
|
||||
# 获取最近的执行记录
|
||||
print("=" * 80)
|
||||
print("查找最近的Agent执行记录...")
|
||||
print("=" * 80)
|
||||
|
||||
execution = db.query(Execution).filter(
|
||||
Execution.agent_id.isnot(None)
|
||||
).order_by(Execution.created_at.desc()).first()
|
||||
|
||||
if not execution:
|
||||
print("❌ 没有找到执行记录")
|
||||
return
|
||||
|
||||
print(f"\n✅ 找到执行记录: {execution.id}")
|
||||
print(f" 状态: {execution.status}")
|
||||
print(f" 执行时间: {execution.execution_time}ms")
|
||||
print(f" 创建时间: {execution.created_at}")
|
||||
|
||||
# 获取执行日志
|
||||
print("\n" + "=" * 80)
|
||||
print("Switch节点相关日志:")
|
||||
print("=" * 80)
|
||||
|
||||
logs = db.query(ExecutionLog).filter(
|
||||
ExecutionLog.execution_id == execution.id
|
||||
).order_by(ExecutionLog.timestamp.asc()).all()
|
||||
|
||||
if not logs:
|
||||
print("❌ 没有找到执行日志")
|
||||
return
|
||||
|
||||
# 筛选Switch节点相关的日志
|
||||
switch_logs = []
|
||||
for log in logs:
|
||||
if log.node_type == 'switch' or 'Switch' in log.message or '[rjb] Switch' in log.message:
|
||||
switch_logs.append(log)
|
||||
|
||||
if not switch_logs:
|
||||
print("❌ 没有找到Switch节点相关的日志")
|
||||
print("\n所有日志节点类型:")
|
||||
node_types = set(log.node_type for log in logs if log.node_type)
|
||||
for nt in sorted(node_types):
|
||||
print(f" - {nt}")
|
||||
return
|
||||
|
||||
print(f"\n找到 {len(switch_logs)} 条Switch节点相关日志:\n")
|
||||
|
||||
for i, log in enumerate(switch_logs, 1):
|
||||
print(f"[{i}] {log.timestamp.strftime('%H:%M:%S.%f')[:-3]} [{log.level}]")
|
||||
print(f" 节点: {log.node_id or '(无)'} ({log.node_type or '(无)'})")
|
||||
print(f" 消息: {log.message}")
|
||||
|
||||
if log.data:
|
||||
print(f" 数据:")
|
||||
data_str = format_json(log.data)
|
||||
# 显示完整数据
|
||||
for line in data_str.split('\n'):
|
||||
print(f" {line}")
|
||||
|
||||
if log.duration:
|
||||
print(f" 耗时: {log.duration}ms")
|
||||
print()
|
||||
|
||||
# 特别分析Switch节点的匹配和过滤过程
|
||||
print("=" * 80)
|
||||
print("Switch节点执行流程分析:")
|
||||
print("=" * 80)
|
||||
|
||||
match_logs = [log for log in switch_logs if '匹配' in log.message]
|
||||
filter_logs = [log for log in switch_logs if '过滤' in log.message]
|
||||
|
||||
if match_logs:
|
||||
print("\n📊 匹配阶段:")
|
||||
for log in match_logs:
|
||||
if log.data:
|
||||
data = log.data
|
||||
print(f" 节点 {log.node_id}:")
|
||||
print(f" 字段: {data.get('field', 'N/A')}")
|
||||
print(f" 字段值: {data.get('field_value', 'N/A')}")
|
||||
print(f" 匹配的分支: {data.get('matched_case', 'N/A')}")
|
||||
print(f" 处理后的输入键: {data.get('processed_input_keys', 'N/A')}")
|
||||
|
||||
if filter_logs:
|
||||
print("\n🔍 过滤阶段:")
|
||||
for log in filter_logs:
|
||||
if log.data:
|
||||
data = log.data
|
||||
print(f" 节点 {log.node_id}:")
|
||||
print(f" 匹配的分支: {data.get('branch', 'N/A')}")
|
||||
print(f" 过滤前边数: {data.get('edges_before', 'N/A')}")
|
||||
print(f" 保留边数: {data.get('edges_kept', 'N/A')}")
|
||||
print(f" 移除边数: {data.get('edges_removed', 'N/A')}")
|
||||
|
||||
# 检查意图理解节点的输出
|
||||
print("\n" + "=" * 80)
|
||||
print("意图理解节点输出分析:")
|
||||
print("=" * 80)
|
||||
|
||||
intent_logs = [log for log in logs if log.node_id and 'intent' in log.node_id.lower()]
|
||||
if intent_logs:
|
||||
for log in intent_logs:
|
||||
if log.message == "节点执行完成" and log.data:
|
||||
print(f"\n节点 {log.node_id} 的输出:")
|
||||
output = log.data.get('output', {})
|
||||
print(format_json(output))
|
||||
else:
|
||||
print("❌ 没有找到意图理解节点的日志")
|
||||
|
||||
# 检查所有节点的输出(用于调试)
|
||||
print("\n" + "=" * 80)
|
||||
print("所有节点输出摘要:")
|
||||
print("=" * 80)
|
||||
|
||||
node_outputs = {}
|
||||
for log in logs:
|
||||
if log.message == "节点执行完成" and log.node_id:
|
||||
node_outputs[log.node_id] = log.data.get('output', {})
|
||||
|
||||
for node_id, output in node_outputs.items():
|
||||
if isinstance(output, str) and len(output) > 100:
|
||||
print(f"{node_id}: {output[:100]}...")
|
||||
else:
|
||||
print(f"{node_id}: {output}")
|
||||
|
||||
except Exception as e:
|
||||
print(f"❌ 错误: {str(e)}")
|
||||
import traceback
|
||||
traceback.print_exc()
|
||||
finally:
|
||||
db.close()
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
Reference in New Issue
Block a user