Spaces:
No application file
No application file
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 | |
) | |
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 |