| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131 |
- """
- 百度搜索 Agent 示例
- 使用 browser-use 工具在百度搜索并返回结果
- 依赖:
- pip install playwright httpx python-dotenv
- playwright install chromium
- 使用方法:
- python examples/baidu_search_agent.py
- """
- import os
- import sys
- import json
- import asyncio
- from dotenv import load_dotenv
- # 添加项目根目录到 Python 路径
- sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
- # 加载环境变量
- load_dotenv()
- # 导入框架
- from agent.tools import get_tool_registry
- from agent.runner import AgentRunner
- from agent.llm.providers.gemini import create_gemini_llm_call
- # 导入 browser-use 工具(这会自动注册工具)
- sys.path.insert(0, os.path.join(os.path.dirname(os.path.dirname(os.path.abspath(__file__))), "tools"))
- import browserUseTools
- async def main():
- print("=" * 60)
- print("百度搜索 Agent 示例")
- print("=" * 60)
- print()
- # 获取工具注册表
- registry = get_tool_registry()
- # 打印可用工具
- print("可用的浏览器工具:")
- for tool_name in registry.get_tool_names():
- if "browser" in tool_name or "baidu" in tool_name:
- print(f" - {tool_name}")
- print()
- # 创建 Gemini LLM 调用函数
- gemini_llm_call = create_gemini_llm_call()
- # 创建 Agent Runner
- runner = AgentRunner(
- tool_registry=registry,
- llm_call=gemini_llm_call,
- )
- # 测试任务:多步骤百度搜索
- task = """请完成以下任务:
- 1. 在百度搜索"瑜伽裤美女"
- 2. 返回第2页的搜索结果数据(标题、链接、摘要)
- 请使用 baidu_search 工具完成。"""
- print(f"任务: {task}")
- print("-" * 60)
- print()
- # 运行 Agent
- async for event in runner.run(
- task=task,
- model="gemini-2.5-pro",
- tools=[
- "baidu_search"
- ],
- max_iterations=5,
- enable_memory=False,
- auto_execute_tools=True,
- system_prompt="""你是一个有用的AI助手,可以使用浏览器工具来帮助用户完成网页操作任务。
- 可用工具说明:
- - baidu_search: 在百度搜索并返回结果,支持 page 参数用于指定页码
- 请按照用户的要求,逐步使用这些工具完成任务。"""
- ):
- event_type = event.type
- data = event.data
- if event_type == "trace_started":
- print(f"✓ Trace 开始: {data['trace_id']}")
- print()
- elif event_type == "llm_call_completed":
- print(f"🤖 LLM 响应:")
- if data.get("content"):
- print(f" {data['content']}")
- if data.get("tool_calls"):
- print(f" 工具调用: {len(data['tool_calls'])} 个")
- print(f" Tokens: {data.get('tokens', 0)}")
- print()
- elif event_type == "tool_executing":
- print(f"🔧 执行工具: {data['tool_name']}")
- print(f" 参数: {json.dumps(data['arguments'], ensure_ascii=False)}")
- elif event_type == "tool_result":
- result_preview = data['result'][:200] if len(data['result']) > 200 else data['result']
- print(f" 结果预览: {result_preview}...")
- print()
- elif event_type == "conclusion":
- print(f"✅ 最终回答:")
- print(f" {data['content']}")
- print()
- elif event_type == "trace_completed":
- print(f"✓ Trace 完成")
- print(f" 总 Tokens: {data.get('total_tokens', 0)}")
- print(f" 总成本: ${data.get('total_cost', 0):.4f}")
- print()
- elif event_type == "trace_failed":
- print(f"❌ Trace 失败: {data.get('error')}")
- print()
- if __name__ == "__main__":
- asyncio.run(main())
|