baidu_search_agent.py 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131
  1. """
  2. 百度搜索 Agent 示例
  3. 使用 browser-use 工具在百度搜索并返回结果
  4. 依赖:
  5. pip install playwright httpx python-dotenv
  6. playwright install chromium
  7. 使用方法:
  8. python examples/baidu_search_agent.py
  9. """
  10. import os
  11. import sys
  12. import json
  13. import asyncio
  14. from dotenv import load_dotenv
  15. # 添加项目根目录到 Python 路径
  16. sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
  17. # 加载环境变量
  18. load_dotenv()
  19. # 导入框架
  20. from agent.tools import get_tool_registry
  21. from agent.runner import AgentRunner
  22. from agent.llm.providers.gemini import create_gemini_llm_call
  23. # 导入 browser-use 工具(这会自动注册工具)
  24. sys.path.insert(0, os.path.join(os.path.dirname(os.path.dirname(os.path.abspath(__file__))), "tools"))
  25. import browserUseTools
  26. async def main():
  27. print("=" * 60)
  28. print("百度搜索 Agent 示例")
  29. print("=" * 60)
  30. print()
  31. # 获取工具注册表
  32. registry = get_tool_registry()
  33. # 打印可用工具
  34. print("可用的浏览器工具:")
  35. for tool_name in registry.get_tool_names():
  36. if "browser" in tool_name or "baidu" in tool_name:
  37. print(f" - {tool_name}")
  38. print()
  39. # 创建 Gemini LLM 调用函数
  40. gemini_llm_call = create_gemini_llm_call()
  41. # 创建 Agent Runner
  42. runner = AgentRunner(
  43. tool_registry=registry,
  44. llm_call=gemini_llm_call,
  45. )
  46. # 测试任务:多步骤百度搜索
  47. task = """请完成以下任务:
  48. 1. 在百度搜索"瑜伽裤美女"
  49. 2. 返回第2页的搜索结果数据(标题、链接、摘要)
  50. 请使用 baidu_search 工具完成。"""
  51. print(f"任务: {task}")
  52. print("-" * 60)
  53. print()
  54. # 运行 Agent
  55. async for event in runner.run(
  56. task=task,
  57. model="gemini-2.5-pro",
  58. tools=[
  59. "baidu_search"
  60. ],
  61. max_iterations=5,
  62. enable_memory=False,
  63. auto_execute_tools=True,
  64. system_prompt="""你是一个有用的AI助手,可以使用浏览器工具来帮助用户完成网页操作任务。
  65. 可用工具说明:
  66. - baidu_search: 在百度搜索并返回结果,支持 page 参数用于指定页码
  67. 请按照用户的要求,逐步使用这些工具完成任务。"""
  68. ):
  69. event_type = event.type
  70. data = event.data
  71. if event_type == "trace_started":
  72. print(f"✓ Trace 开始: {data['trace_id']}")
  73. print()
  74. elif event_type == "llm_call_completed":
  75. print(f"🤖 LLM 响应:")
  76. if data.get("content"):
  77. print(f" {data['content']}")
  78. if data.get("tool_calls"):
  79. print(f" 工具调用: {len(data['tool_calls'])} 个")
  80. print(f" Tokens: {data.get('tokens', 0)}")
  81. print()
  82. elif event_type == "tool_executing":
  83. print(f"🔧 执行工具: {data['tool_name']}")
  84. print(f" 参数: {json.dumps(data['arguments'], ensure_ascii=False)}")
  85. elif event_type == "tool_result":
  86. result_preview = data['result'][:200] if len(data['result']) > 200 else data['result']
  87. print(f" 结果预览: {result_preview}...")
  88. print()
  89. elif event_type == "conclusion":
  90. print(f"✅ 最终回答:")
  91. print(f" {data['content']}")
  92. print()
  93. elif event_type == "trace_completed":
  94. print(f"✓ Trace 完成")
  95. print(f" 总 Tokens: {data.get('total_tokens', 0)}")
  96. print(f" 总成本: ${data.get('total_cost', 0):.4f}")
  97. print()
  98. elif event_type == "trace_failed":
  99. print(f"❌ Trace 失败: {data.get('error')}")
  100. print()
  101. if __name__ == "__main__":
  102. asyncio.run(main())