123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121 |
- #!/usr/bin/env python3
- """
- 测试LangChain消息对象的属性,查看是否包含id和时间戳信息
- """
- import asyncio
- import sys
- import os
- from pathlib import Path
- # 添加项目路径
- project_root = Path(__file__).parent
- sys.path.insert(0, str(project_root))
- from react_agent.agent import CustomReactAgent
- async def test_message_attributes():
- """测试消息对象的属性"""
- print("=" * 60)
- print("测试LangChain消息对象属性")
- print("=" * 60)
-
- try:
- # 初始化Agent
- print("🚀 初始化Agent...")
- agent = await CustomReactAgent.create()
-
- # 获取对话历史
- thread_id = "wang10:20250717211620915"
- print(f"📖 获取对话历史: {thread_id}")
-
- # 直接从checkpointer获取原始数据
- thread_config = {"configurable": {"thread_id": thread_id}}
- conversation_state = await agent.checkpointer.aget(thread_config)
-
- if not conversation_state:
- print("❌ 未找到对话数据")
- return
-
- messages = conversation_state.get('channel_values', {}).get('messages', [])
- print(f"📊 找到 {len(messages)} 条原始消息")
-
- # 分析前5条消息的属性
- print(f"\n🔍 分析前5条消息的所有属性:")
- for i, msg in enumerate(messages[:5]):
- print(f"\n消息 {i+1}:")
- print(f" 类型: {type(msg).__name__}")
- print(f" 内容长度: {len(str(msg.content))}")
-
- # 获取所有属性
- all_attrs = dir(msg)
- # 过滤出非私有属性
- public_attrs = [attr for attr in all_attrs if not attr.startswith('_')]
- print(f" 公共属性: {public_attrs}")
-
- # 检查关键属性
- key_attrs = ['id', 'timestamp', 'created_at', 'time', 'date', 'additional_kwargs', 'response_metadata']
- for attr in key_attrs:
- if hasattr(msg, attr):
- value = getattr(msg, attr)
- print(f" {attr}: {value} (类型: {type(value).__name__})")
-
- # 检查additional_kwargs和response_metadata
- if hasattr(msg, 'additional_kwargs') and msg.additional_kwargs:
- print(f" additional_kwargs内容: {msg.additional_kwargs}")
-
- if hasattr(msg, 'response_metadata') and msg.response_metadata:
- print(f" response_metadata内容: {msg.response_metadata}")
-
- # 打印消息的dict表示(如果有的话)
- if hasattr(msg, 'dict'):
- try:
- msg_dict = msg.dict()
- print(f" dict()方法返回的键: {list(msg_dict.keys())}")
- except:
- pass
-
- # 检查conversation_state的其他信息
- print(f"\n🔍 conversation_state的顶级键: {list(conversation_state.keys())}")
-
- # 检查是否有时间戳相关的元数据
- for key, value in conversation_state.items():
- if 'time' in key.lower() or 'date' in key.lower() or 'created' in key.lower():
- print(f" 时间相关字段 {key}: {value}")
-
- await agent.close()
-
- except Exception as e:
- print(f"❌ 测试失败: {e}")
- import traceback
- traceback.print_exc()
- async def test_create_new_message():
- """测试创建新消息时是否自动添加时间戳"""
- print(f"\n" + "=" * 60)
- print("测试新建消息的属性")
- print("=" * 60)
-
- try:
- from langchain_core.messages import HumanMessage, AIMessage
- from datetime import datetime
- import uuid
-
- # 创建新消息
- human_msg = HumanMessage(content="测试消息", id=str(uuid.uuid4()))
- ai_msg = AIMessage(content="AI回复", id=str(uuid.uuid4()))
-
- print("🔍 新建HumanMessage属性:")
- print(f" id: {getattr(human_msg, 'id', 'None')}")
- print(f" 所有属性: {[attr for attr in dir(human_msg) if not attr.startswith('_')]}")
-
- print("🔍 新建AIMessage属性:")
- print(f" id: {getattr(ai_msg, 'id', 'None')}")
- print(f" 所有属性: {[attr for attr in dir(ai_msg) if not attr.startswith('_')]}")
-
- except Exception as e:
- print(f"❌ 新消息测试失败: {e}")
- if __name__ == "__main__":
- print(f"🚀 开始消息属性测试 - {asyncio.get_event_loop()}")
- asyncio.run(test_message_attributes())
- asyncio.run(test_create_new_message())
|