127 lines
3.9 KiB
Python
127 lines
3.9 KiB
Python
|
|
#!/usr/bin/env python3
|
||
|
|
"""
|
||
|
|
查看执行日志的脚本
|
||
|
|
用于诊断数据流转问题
|
||
|
|
"""
|
||
|
|
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("输入数据 (input_data):")
|
||
|
|
print("=" * 80)
|
||
|
|
if execution.input_data:
|
||
|
|
print(format_json(execution.input_data))
|
||
|
|
else:
|
||
|
|
print("(空)")
|
||
|
|
|
||
|
|
# 显示输出数据
|
||
|
|
print("\n" + "=" * 80)
|
||
|
|
print("输出数据 (output_data):")
|
||
|
|
print("=" * 80)
|
||
|
|
if execution.output_data:
|
||
|
|
print(format_json(execution.output_data))
|
||
|
|
else:
|
||
|
|
print("(空)")
|
||
|
|
|
||
|
|
# 获取执行日志
|
||
|
|
print("\n" + "=" * 80)
|
||
|
|
print("执行日志 (按时间顺序):")
|
||
|
|
print("=" * 80)
|
||
|
|
|
||
|
|
logs = db.query(ExecutionLog).filter(
|
||
|
|
ExecutionLog.execution_id == execution.id
|
||
|
|
).order_by(ExecutionLog.timestamp.asc()).all()
|
||
|
|
|
||
|
|
if not logs:
|
||
|
|
print("❌ 没有找到执行日志")
|
||
|
|
return
|
||
|
|
|
||
|
|
for i, log in enumerate(logs, 1):
|
||
|
|
print(f"\n[{i}] {log.timestamp.strftime('%Y-%m-%d %H:%M:%S')} [{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)
|
||
|
|
# 只显示前500个字符
|
||
|
|
if len(data_str) > 500:
|
||
|
|
print(data_str[:500] + "...")
|
||
|
|
else:
|
||
|
|
print(data_str)
|
||
|
|
|
||
|
|
if log.duration:
|
||
|
|
print(f" 耗时: {log.duration}ms")
|
||
|
|
|
||
|
|
# 特别关注LLM节点的输入输出
|
||
|
|
print("\n" + "=" * 80)
|
||
|
|
print("LLM节点详细分析:")
|
||
|
|
print("=" * 80)
|
||
|
|
|
||
|
|
llm_logs = [log for log in logs if log.node_type == 'llm']
|
||
|
|
if llm_logs:
|
||
|
|
for log in llm_logs:
|
||
|
|
if log.message == "节点开始执行" and log.data:
|
||
|
|
print(f"\n节点 {log.node_id} 的输入数据:")
|
||
|
|
input_data = log.data.get('input', {})
|
||
|
|
print(format_json(input_data))
|
||
|
|
|
||
|
|
if log.message == "节点执行完成" and log.data:
|
||
|
|
print(f"\n节点 {log.node_id} 的输出数据:")
|
||
|
|
output_data = log.data.get('output', {})
|
||
|
|
print(format_json(output_data))
|
||
|
|
else:
|
||
|
|
print("❌ 没有找到LLM节点的日志")
|
||
|
|
|
||
|
|
except Exception as e:
|
||
|
|
print(f"❌ 错误: {str(e)}")
|
||
|
|
import traceback
|
||
|
|
traceback.print_exc()
|
||
|
|
finally:
|
||
|
|
db.close()
|
||
|
|
|
||
|
|
|
||
|
|
if __name__ == "__main__":
|
||
|
|
main()
|