# my_advanced_search.py import os from typing import Optional, List, Dict, Any from hello_agents import ToolRegistry class MyAdvancedSearchTool: """ 自定义高级搜索工具类 展示多源整合和智能选择的设计模式 """ def __init__(self): self.name = "my_advanced_search" self.description = "智能搜索工具,支持多个搜索源,自动选择最佳结果" self.search_sources = [] self._setup_search_sources() def _setup_search_sources(self): """设置可用的搜索源""" # 检查Tavily可用性 if os.getenv("TAVILY_API_KEY"): try: from tavily import TavilyClient self.tavily_client = TavilyClient(api_key=os.getenv("TAVILY_API_KEY")) self.search_sources.append("tavily") print("✅ Tavily搜索源已启用") except ImportError: print("⚠️ Tavily库未安装") # 检查SerpApi可用性 if os.getenv("SERPAPI_API_KEY"): try: import serpapi self.search_sources.append("serpapi") print("✅ SerpApi搜索源已启用") except ImportError: print("⚠️ SerpApi库未安装") if self.search_sources: print(f"🔧 可用搜索源: {', '.join(self.search_sources)}") else: print("⚠️ 没有可用的搜索源,请配置API密钥") def search(self, query: str) -> str: """执行智能搜索""" if not query.strip(): return "❌ 错误:搜索查询不能为空" # 检查是否有可用的搜索源 if not self.search_sources: return """❌ 没有可用的搜索源,请配置以下API密钥之一: 1. Tavily API: 设置环境变量 TAVILY_API_KEY 获取地址: https://tavily.com/ 2. SerpAPI: 设置环境变量 SERPAPI_API_KEY 获取地址: https://serpapi.com/ 配置后重新运行程序。""" print(f"🔍 开始智能搜索: {query}") # 尝试多个搜索源,返回最佳结果 for source in self.search_sources: try: if source == "tavily": result = self._search_with_tavily(query) if result and "未找到" not in result: return f"📊 Tavily AI搜索结果:\n\n{result}" elif source == "serpapi": result = self._search_with_serpapi(query) if result and "未找到" not in result: return f"🌐 SerpApi Google搜索结果:\n\n{result}" except Exception as e: print(f"⚠️ {source} 搜索失败: {e}") continue return "❌ 所有搜索源都失败了,请检查网络连接和API密钥配置" def _search_with_tavily(self, query: str) -> str: """使用Tavily搜索""" response = self.tavily_client.search(query=query, max_results=3) if response.get('answer'): result = f"💡 AI直接答案:{response['answer']}\n\n" else: result = "" result += "🔗 相关结果:\n" for i, item in enumerate(response.get('results', [])[:3], 1): result += f"[{i}] {item.get('title', '')}\n" result += f" {item.get('content', '')[:150]}...\n\n" return result def _search_with_serpapi(self, query: str) -> str: """使用SerpApi搜索""" import serpapi search = serpapi.GoogleSearch({ "q": query, "api_key": os.getenv("SERPAPI_API_KEY"), "num": 3 }) results = search.get_dict() result = "🔗 Google搜索结果:\n" if "organic_results" in results: for i, res in enumerate(results["organic_results"][:3], 1): result += f"[{i}] {res.get('title', '')}\n" result += f" {res.get('snippet', '')}\n\n" return result def create_advanced_search_registry(): """创建包含高级搜索工具的注册表""" registry = ToolRegistry() # 创建搜索工具实例 search_tool = MyAdvancedSearchTool() # 注册搜索工具的方法作为函数 registry.register_function( name="advanced_search", description="高级搜索工具,整合Tavily和SerpAPI多个搜索源,提供更全面的搜索结果", func=search_tool.search ) return registry