--- title: BraveSearchTool description: A tool for performing web searches using the Brave Search API icon: search --- ## BraveSearchTool The BraveSearchTool enables web searches using the Brave Search API, providing customizable result counts, country-specific searches, and rate-limited operations. It formats search results with titles, URLs, and snippets for easy consumption. ## Installation ```bash pip install 'crewai[tools]' ``` ## Authentication Set up your Brave Search API key: ```bash export BRAVE_API_KEY='your-brave-api-key' ``` ## Usage Example ```python from crewai import Agent from crewai_tools import BraveSearchTool # Basic initialization search_tool = BraveSearchTool() # Advanced initialization with custom parameters search_tool = BraveSearchTool( country="US", # Country-specific search n_results=5, # Number of results to return save_file=True # Save results to file ) # Create an agent with the tool researcher = Agent( role='Web Researcher', goal='Search and analyze web content', backstory='Expert at finding relevant information online.', tools=[search_tool], verbose=True ) ``` ## Input Schema ```python class BraveSearchToolSchema(BaseModel): search_query: str = Field( description="Mandatory search query you want to use to search the internet" ) ``` ## Function Signature ```python def __init__( self, country: Optional[str] = "", n_results: int = 10, save_file: bool = False, *args, **kwargs ): """ Initialize the Brave search tool. Args: country (Optional[str]): Country code for region-specific search n_results (int): Number of results to return (default: 10) save_file (bool): Whether to save results to file (default: False) """ def _run( self, **kwargs: Any ) -> str: """ Execute web search using Brave Search API. Args: search_query (str): Query to search save_file (bool, optional): Override save_file setting n_results (int, optional): Override n_results setting Returns: str: Formatted search results with titles, URLs, and snippets """ ``` ## Best Practices 1. API Authentication: - Securely store BRAVE_API_KEY - Keep API key confidential - Handle authentication errors 2. Rate Limiting: - Tool automatically handles rate limiting - Minimum 1-second interval between requests - Consider implementing additional rate limits 3. Search Optimization: - Use specific search queries - Adjust result count based on needs - Consider regional search requirements 4. Error Handling: - Handle API request failures - Manage parsing errors - Monitor rate limit errors ## Integration Example ```python from crewai import Agent, Task, Crew from crewai_tools import BraveSearchTool # Initialize tool with custom configuration search_tool = BraveSearchTool( country="GB", # UK-specific search n_results=3, # Limit to 3 results save_file=True # Save results to file ) # Create agent researcher = Agent( role='Web Researcher', goal='Research latest AI developments', backstory='Expert at finding and analyzing tech news.', tools=[search_tool] ) # Define task research_task = Task( description="""Find the latest news about artificial intelligence developments in quantum computing.""", agent=researcher ) # The tool will use: # { # "search_query": "latest quantum computing AI developments" # } # Create crew crew = Crew( agents=[researcher], tasks=[research_task] ) # Execute result = crew.kickoff() ``` ## Advanced Usage ### Country-Specific Search ```python # Initialize tools for different regions us_search = BraveSearchTool(country="US") uk_search = BraveSearchTool(country="GB") jp_search = BraveSearchTool(country="JP") # Compare results across regions us_results = us_search.run( search_query="local news" ) uk_results = uk_search.run( search_query="local news" ) jp_results = jp_search.run( search_query="local news" ) ``` ### Result Management ```python # Save results to file archival_search = BraveSearchTool( save_file=True, n_results=20 ) # Search and save results = archival_search.run( search_query="historical events 2023" ) # Results saved to search_results_YYYY-MM-DD_HH-MM-SS.txt ``` ### Error Handling Example ```python try: search_tool = BraveSearchTool() results = search_tool.run( search_query="important topic" ) print(results) except ValueError as e: # API key missing print(f"Authentication error: {str(e)}") except Exception as e: print(f"Search error: {str(e)}") ``` ## Notes - Requires Brave Search API key - Implements automatic rate limiting - Supports country-specific searches - Customizable result count - Optional file saving feature - Thread-safe operations - Efficient result formatting - Handles API errors gracefully - Supports parallel searches - Maintains search context