test_ts_meaning.py 6.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166
  1. #!/usr/bin/env python3
  2. """
  3. 测试conversation_state['ts']的确切含义
  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_ts_meaning():
  14. """测试ts字段的含义"""
  15. print("=" * 60)
  16. print("测试conversation_state['ts']的含义")
  17. print("=" * 60)
  18. try:
  19. # 初始化Agent
  20. print("🚀 初始化Agent...")
  21. agent = await CustomReactAgent.create()
  22. # 测试多个不同的thread_id
  23. thread_ids = [
  24. "wang10:20250717211620915", # 原始的长对话
  25. # 如果有其他thread_id可以添加
  26. ]
  27. for thread_id in thread_ids:
  28. print(f"\n📖 分析Thread: {thread_id}")
  29. # 从checkpointer获取原始数据
  30. thread_config = {"configurable": {"thread_id": thread_id}}
  31. conversation_state = await agent.checkpointer.aget(thread_config)
  32. if not conversation_state:
  33. print(f" ❌ 未找到对话数据")
  34. continue
  35. # 分析时间戳
  36. ts_value = conversation_state.get('ts')
  37. messages = conversation_state.get('channel_values', {}).get('messages', [])
  38. print(f" 📊 消息总数: {len(messages)}")
  39. print(f" ⏰ conversation_state['ts']: {ts_value}")
  40. # 解析时间戳
  41. if ts_value:
  42. try:
  43. dt = datetime.fromisoformat(ts_value.replace('Z', '+00:00'))
  44. print(f" ⏰ 解析后的时间: {dt}")
  45. except:
  46. print(f" ❌ 时间戳解析失败")
  47. # 分析Thread ID中的时间
  48. if ':' in thread_id:
  49. parts = thread_id.split(':')
  50. if len(parts) >= 2:
  51. timestamp_part = parts[1]
  52. if len(timestamp_part) >= 14:
  53. try:
  54. year = timestamp_part[:4]
  55. month = timestamp_part[4:6]
  56. day = timestamp_part[6:8]
  57. hour = timestamp_part[8:10]
  58. minute = timestamp_part[10:12]
  59. second = timestamp_part[12:14]
  60. ms = timestamp_part[14:] if len(timestamp_part) > 14 else "000"
  61. thread_dt = datetime.strptime(f"{year}-{month}-{day} {hour}:{minute}:{second}", "%Y-%m-%d %H:%M:%S")
  62. print(f" 🆔 Thread ID时间: {thread_dt}")
  63. # 比较两个时间
  64. if ts_value:
  65. ts_dt = datetime.fromisoformat(ts_value.replace('Z', '+00:00')).replace(tzinfo=None)
  66. time_diff = (ts_dt - thread_dt).total_seconds()
  67. print(f" 🔄 时间差: {time_diff:.2f} 秒 (ts - thread_time)")
  68. if abs(time_diff) < 60:
  69. print(f" 💡 时间差很小,ts可能是对话开始时间")
  70. else:
  71. print(f" 💡 时间差较大,ts可能是最后更新时间")
  72. except Exception as e:
  73. print(f" ❌ Thread ID时间解析失败: {e}")
  74. # 检查其他可能的时间字段
  75. print(f" 🔍 conversation_state所有字段:")
  76. for key, value in conversation_state.items():
  77. if 'time' in key.lower() or 'date' in key.lower() or 'created' in key.lower() or 'updated' in key.lower():
  78. print(f" {key}: {value}")
  79. await agent.close()
  80. except Exception as e:
  81. print(f"❌ 测试失败: {e}")
  82. import traceback
  83. traceback.print_exc()
  84. async def create_test_conversation():
  85. """创建一个测试对话来观察ts的变化"""
  86. print(f"\n" + "=" * 60)
  87. print("创建测试对话观察ts变化")
  88. print("=" * 60)
  89. try:
  90. # 初始化Agent
  91. agent = await CustomReactAgent.create()
  92. # 创建新的测试对话
  93. test_user = "test_user"
  94. test_message = "你好,这是一个测试消息"
  95. print(f"🚀 发送测试消息...")
  96. result = await agent.chat(test_message, test_user)
  97. if result.get('success'):
  98. thread_id = result.get('thread_id')
  99. print(f"✅ 对话创建成功,Thread ID: {thread_id}")
  100. # 立即检查ts
  101. thread_config = {"configurable": {"thread_id": thread_id}}
  102. conversation_state = await agent.checkpointer.aget(thread_config)
  103. if conversation_state:
  104. ts_value = conversation_state.get('ts')
  105. messages = conversation_state.get('channel_values', {}).get('messages', [])
  106. print(f"📊 首次对话后:")
  107. print(f" 消息数量: {len(messages)}")
  108. print(f" ts值: {ts_value}")
  109. # 发送第二条消息
  110. print(f"\n🚀 发送第二条消息...")
  111. result2 = await agent.chat("这是第二条消息", test_user, thread_id)
  112. if result2.get('success'):
  113. # 再次检查ts
  114. conversation_state2 = await agent.checkpointer.aget(thread_config)
  115. if conversation_state2:
  116. ts_value2 = conversation_state2.get('ts')
  117. messages2 = conversation_state2.get('channel_values', {}).get('messages', [])
  118. print(f"📊 第二次对话后:")
  119. print(f" 消息数量: {len(messages2)}")
  120. print(f" ts值: {ts_value2}")
  121. # 比较两次的ts
  122. if ts_value != ts_value2:
  123. print(f" 💡 ts值发生了变化!这说明ts是最后更新时间")
  124. else:
  125. print(f" 💡 ts值没有变化,可能是创建时间")
  126. await agent.close()
  127. except Exception as e:
  128. print(f"❌ 测试对话创建失败: {e}")
  129. if __name__ == "__main__":
  130. asyncio.run(test_ts_meaning())
  131. # 注释掉测试对话创建,避免产生过多测试数据
  132. # asyncio.run(create_test_conversation())