# test_react_agent.py
from dotenv import load_dotenv
from hello_agents import HelloAgentsLLM, ToolRegistry
from my_react_agent import MyReActAgent

# 加载环境变量
load_dotenv()

def test_react_agent():
    """测试MyReActAgent的功能"""
    
    # 创建LLM实例
    llm = HelloAgentsLLM()
    
    # 创建工具注册表
    tool_registry = ToolRegistry()
    
    # 注册一些基础工具用于测试
    print("🔧 注册测试工具...")
    
    # 注册计算器工具
    try:
        from hello_agents import calculate
        tool_registry.register_tool("calculate", calculate, "执行数学计算，支持基本的四则运算")
        print("✅ 计算器工具注册成功")
    except ImportError:
        print("⚠️ 计算器工具未找到，跳过注册")
    
    # 注册搜索工具（如果可用）
    try:
        from hello_agents import search
        tool_registry.register_tool("search", search, "搜索互联网信息")
        print("✅ 搜索工具注册成功")
    except ImportError:
        print("⚠️ 搜索工具未找到，跳过注册")
    
    # 创建自定义ReActAgent
    agent = MyReActAgent(
        name="我的推理行动助手",
        llm=llm,
        tool_registry=tool_registry,
        max_steps=5
    )
    
    print("\n" + "="*60)
    print("开始测试 MyReActAgent")
    print("="*60)
    
    # 测试1：数学计算问题
    print("\n📊 测试1：数学计算问题")
    math_question = "请帮我计算：(25 + 15) × 3 - 8 的结果是多少？"
    
    try:
        result1 = agent.run(math_question)
        print(f"\n🎯 测试1结果: {result1}")
    except Exception as e:
        print(f"❌ 测试1失败: {e}")
    
    # 测试2：需要搜索的问题
    print("\n🔍 测试2：信息搜索问题")
    search_question = "Python编程语言是什么时候发布的？请告诉我具体的年份。"
    
    try:
        result2 = agent.run(search_question)
        print(f"\n🎯 测试2结果: {result2}")
    except Exception as e:
        print(f"❌ 测试2失败: {e}")
    
    # 测试3：复合问题（需要多步推理）
    print("\n🧠 测试3：复合推理问题")
    complex_question = "如果一个班级有30个学生，其中60%是女生，那么男生有多少人？请先计算女生人数，再计算男生人数。"
    
    try:
        result3 = agent.run(complex_question)
        print(f"\n🎯 测试3结果: {result3}")
    except Exception as e:
        print(f"❌ 测试3失败: {e}")
    
    # 查看对话历史
    print(f"\n📝 对话历史记录: {len(agent.get_history())} 条消息")
    
    # 显示工具使用统计
    print(f"\n🛠️ 可用工具数量: {len(tool_registry.tools)}")
    print("已注册的工具:")
    for tool_name in tool_registry.tools.keys():
        print(f"  - {tool_name}")
    
    print("\n🎉 测试完成！")

def test_custom_prompt():
    """测试自定义提示词的ReActAgent"""
    
    print("\n" + "="*60)
    print("测试自定义提示词的 MyReActAgent")
    print("="*60)
    
    # 创建LLM和工具注册表
    llm = HelloAgentsLLM()
    tool_registry = ToolRegistry()
    
    # 注册计算器工具
    try:
        from hello_agents import calculate
        tool_registry.register_tool("calculate", calculate, "数学计算工具")
    except ImportError:
        pass
    
    # 自定义提示词（更简洁的版本）
    custom_prompt = """你是一个数学专家AI助手。

可用工具：{tools}

请按以下格式回应：
Thought: [你的思考]
Action: [tool_name[input] 或 Finish[答案]]

问题：{question}
历史：{history}

开始："""
    
    # 创建使用自定义提示词的Agent
    custom_agent = MyReActAgent(
        name="数学专家助手",
        llm=llm,
        tool_registry=tool_registry,
        max_steps=3,
        custom_prompt=custom_prompt
    )
    
    # 测试数学问题
    math_question = "计算 15 × 8 + 32 ÷ 4 的结果"
    
    try:
        result = custom_agent.run(math_question)
        print(f"\n🎯 自定义提示词测试结果: {result}")
    except Exception as e:
        print(f"❌ 自定义提示词测试失败: {e}")

if __name__ == "__main__":
    # 运行基础测试
    test_react_agent()
    
    # 运行自定义提示词测试
    test_custom_prompt()
    
    print("\n✨ 所有测试完成！")
