test_timestamp.py 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109
  1. #!/usr/bin/env python3
  2. """
  3. 检查conversation_state中的时间戳信息
  4. """
  5. import asyncio
  6. import sys
  7. from pathlib import Path
  8. from datetime import datetime
  9. # 添加项目路径
  10. project_root = Path(__file__).parent
  11. sys.path.insert(0, str(project_root))
  12. from react_agent.agent import CustomReactAgent
  13. async def test_timestamp_info():
  14. """检查时间戳相关信息"""
  15. print("=" * 60)
  16. print("检查时间戳信息")
  17. print("=" * 60)
  18. try:
  19. # 初始化Agent
  20. print("🚀 初始化Agent...")
  21. agent = await CustomReactAgent.create()
  22. # 获取对话历史
  23. thread_id = "wang10:20250717211620915"
  24. print(f"📖 获取对话历史: {thread_id}")
  25. # 直接从checkpointer获取原始数据
  26. thread_config = {"configurable": {"thread_id": thread_id}}
  27. conversation_state = await agent.checkpointer.aget(thread_config)
  28. if not conversation_state:
  29. print("❌ 未找到对话数据")
  30. return
  31. # 检查conversation_state的时间戳信息
  32. print(f"\n🔍 conversation_state详细信息:")
  33. for key, value in conversation_state.items():
  34. print(f" {key}: {value} (类型: {type(value).__name__})")
  35. # 特别关注ts字段
  36. if 'ts' in conversation_state:
  37. ts_value = conversation_state['ts']
  38. print(f"\n⏰ 时间戳分析:")
  39. print(f" 原始ts值: {ts_value}")
  40. print(f" ts类型: {type(ts_value).__name__}")
  41. # 尝试解析时间戳
  42. if isinstance(ts_value, (int, float)):
  43. # 可能是Unix时间戳
  44. try:
  45. if ts_value > 1000000000000: # 毫秒时间戳
  46. dt = datetime.fromtimestamp(ts_value / 1000)
  47. print(f" 解析为毫秒时间戳: {dt}")
  48. else: # 秒时间戳
  49. dt = datetime.fromtimestamp(ts_value)
  50. print(f" 解析为秒时间戳: {dt}")
  51. except:
  52. print(f" 时间戳解析失败")
  53. elif isinstance(ts_value, str):
  54. # 可能是ISO格式字符串
  55. try:
  56. dt = datetime.fromisoformat(ts_value.replace('Z', '+00:00'))
  57. print(f" 解析为ISO时间: {dt}")
  58. except:
  59. print(f" 字符串时间戳解析失败")
  60. # 检查thread_id中的时间信息
  61. print(f"\n🔍 Thread ID时间分析:")
  62. print(f" Thread ID: {thread_id}")
  63. if ':' in thread_id:
  64. parts = thread_id.split(':')
  65. if len(parts) >= 2:
  66. timestamp_part = parts[1] # wang10:20250717211620915
  67. print(f" 时间戳部分: {timestamp_part}")
  68. # 尝试解析thread_id中的时间戳
  69. if len(timestamp_part) >= 14:
  70. try:
  71. year = timestamp_part[:4]
  72. month = timestamp_part[4:6]
  73. day = timestamp_part[6:8]
  74. hour = timestamp_part[8:10]
  75. minute = timestamp_part[10:12]
  76. second = timestamp_part[12:14]
  77. ms = timestamp_part[14:] if len(timestamp_part) > 14 else "000"
  78. dt_str = f"{year}-{month}-{day} {hour}:{minute}:{second}.{ms}"
  79. print(f" 解析为: {dt_str}")
  80. # 创建datetime对象
  81. dt = datetime.strptime(f"{year}-{month}-{day} {hour}:{minute}:{second}", "%Y-%m-%d %H:%M:%S")
  82. print(f" DateTime对象: {dt}")
  83. except Exception as e:
  84. print(f" Thread ID时间解析失败: {e}")
  85. await agent.close()
  86. except Exception as e:
  87. print(f"❌ 测试失败: {e}")
  88. import traceback
  89. traceback.print_exc()
  90. if __name__ == "__main__":
  91. asyncio.run(test_timestamp_info())