Omnitopia's picture
add tavily_search
1819218 verified
raw
history blame
2.06 kB
from smolagents import DuckDuckGoSearchTool, Tool,tool
import wikipediaapi
class WikipediaSearchTool(Tool):
name = "wikipedia_search"
description = "查找英文维基百科的页面简介,输入应为一个词或短词组"
inputs = {
"query": {"type": "string", "description": "维基百科搜索关键词,例如人名/专名"}
}
output_type = "string"
def __init__(self, lang="en"):
super().__init__()
self.wiki = wikipediaapi.Wikipedia(language=lang, user_agent="celum")
def forward(self, query: str):
page = self.wiki.page(query)
if not page.exists():
return "No Wikipedia page found."
return page.summary[:1000]
@tool
def tavily_search(query: str) -> str:
"""
Search the web using Tavily API
Args:
query: The search query
Returns:
Search results as formatted text
"""
api_key = os.getenv("TAVILY_API_KEY")
if not api_key:
return "Tavily API key not found"
url = "https://api.tavily.com/search"
payload = {
"api_key": api_key,
"query": query,
"search_depth": "basic",
"include_answer": True,
"include_domains": [],
"exclude_domains": [],
"max_results": 5
}
try:
response = requests.post(url, json=payload, timeout=10)
response.raise_for_status()
data = response.json()
results = []
if data.get("answer"):
results.append(f"Quick Answer: {data['answer']}")
for result in data.get("results", [])[:3]:
results.append(f"Title: {result.get('title', 'N/A')}")
results.append(f"URL: {result.get('url', 'N/A')}")
results.append(f"Content: {result.get('content', 'N/A')[:200]}...")
results.append("---")
return "\n".join(results)
except Exception as e:
return f"Tavily search error: {str(e)}"
my_tool_list = [
WikipediaSearchTool(),
DuckDuckGoSearchTool()
tavily_search,
]