from langchain_community.tools import WikipediaQueryRun from langchain_community.utilities import WikipediaAPIWrapper from duckduckgo_search import DDGS from tools.interfaces.interface_wikipedia_search import WikipediaSearchInterface class SearchTool(WikipediaSearchInterface): """ Classe concrète qui implémente l'interface WikipediaSearchInterface. Fournit des méthodes de recherche via Wikipedia et DuckDuckGo. """ def __init__(self): self.wikipedia_tool = WikipediaQueryRun(api_wrapper=WikipediaAPIWrapper()) def query_wikipedia(self, query: str) -> str: """ Fait une recherche Internet avec DuckDuckGo (backend='api') et retourne 3 résultats. """ try: result = self.wikipedia_tool.run(query) return f"(Wikipedia) Résumé : {result}" except Exception as e: return f"(Wikipedia) Erreur : {e}" def web_search(self, query: str) -> str: """ Fait une recherche Internet avec DuckDuckGo (backend='api') et retourne 3 résultats. """ try: with DDGS() as ddgs: results = ddgs.text(query, max_results=3, backend="api") if not results: return "Aucun résultat trouvé." output = "" for i, r in enumerate(results, start=1): output += f"{i}. {r['title']}\n{r['href']}\n{r['body']}\n\n" return output.strip() except Exception as e: return f"Erreur lors de la recherche : {e}"