Final_Assignment_Template / serpapi_tools.py
Giustino98's picture
first submission
c4b829b
raw
history blame
2.13 kB
import os
from langchain.tools import Tool
from serpapi import GoogleSearch
from dotenv import load_dotenv
# Carica le variabili d'ambiente se hai la chiave API in un file .env
load_dotenv()
SERPAPI_API_KEY = os.getenv("SERPAPI_API_KEY")
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
serpapi_search_tool = Tool(
name="serpapi_web_search",
func=_serpapi_search,
description="Esegue una ricerca sul web utilizzando SerpAPI (Google Search) per trovare informazioni aggiornate. L'input dovrebbe essere la query di ricerca." \
" 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."
)