import os from langchain.tools import Tool from serpapi import GoogleSearch from dotenv import load_dotenv from langchain_community.tools.tavily_search import TavilySearchResults from langchain_core.tools import tool # Carica le variabili d'ambiente se hai la chiave API in un file .env load_dotenv() SERPAPI_API_KEY = os.getenv("SERPAPI_API_KEY") search_tool = TavilySearchResults( name="tavily_web_search", # Puoi personalizzare il nome se vuoi description="Esegue una ricerca web avanzata utilizzando Tavily per informazioni aggiornate e complete. Utile per domande complesse o che richiedono dati recenti. Può essere utile fare più ricerche modificando la query per ottenere risultati migliori.", # Descrizione per l'LLM max_results=5 ) @tool("serpapi_search_tool", parse_docstring=True) def serpapi_search(query: str, num_results: int = 5, gl: str = "it", hl: str = "it") -> str: """ Esegue una ricerca sul web utilizzando SerpAPI con Google Search e restituisce i risultati formattati. Questo tool ha un costo elevato, pertanto sono da preferire altri tool se disponibili. Richiamare questo tool soltanto in caso gli altri tool non siano stati soddisfacenti. Args: query: La query di ricerca. num_results: Il numero di risultati da restituire. gl: Codice del paese per la geolocalizzazione dei risultati (es. "it" per Italia). hl: Codice della lingua per i risultati della ricerca (es. "it" per Italiano). Returns: Una stringa formattata con i risultati della ricerca o un messaggio di errore. """ if not SERPAPI_API_KEY: return "Errore: La variabile d'ambiente SERPAPI_API_KEY non è impostata." params = { "engine": "google", "q": query, "api_key": SERPAPI_API_KEY, "num": num_results, "gl": gl, "hl": hl } search = GoogleSearch(params) results = search.get_dict() organic_results = results.get("organic_results", []) if not organic_results: return f"Nessun risultato trovato per '{query}'." formatted_results = "\n\n".join([f"Title: {res.get('title')}\nLink: {res.get('link')}\nSnippet: {res.get('snippet')}" for res in organic_results]) return formatted_results