🎁 Get the FREE AI Skills Starter Guide β€” Subscribe β†’
BytesAgainBytesAgain
πŸ¦€ ClawHub

tavily-search

by @chasehl

Web search using Tavily API - a powerful search engine for AI agents. Use when you need to search the web for current information, news, research, or any top...

Versionv1.0.0
Downloads2,052
Installs3
TERMINAL
clawhub install search-with-tavily

πŸ“– About This Skill


name: tavily-search description: Web search using Tavily API - a powerful search engine for AI agents. Use when you need to search the web for current information, news, research, or any topic that requires up-to-date web data. Supports multiple search modes including basic search, Q&A, and context retrieval for RAG applications. metadata: openclaw: emoji: πŸ” requires: env: - TAVILY_API_KEY

Tavily Search

Web search using Tavily API - optimized for AI agents and RAG applications.

Quick Start

Prerequisites

Set your Tavily API key:

export TAVILY_API_KEY="tvly-your-api-key"

Or use the Python client directly with API key.

Basic Search

from tavily import TavilyClient

client = TavilyClient(api_key="tvly-your-api-key") response = client.search("Latest AI developments")

for result in response['results']: print(f"Title: {result['title']}") print(f"URL: {result['url']}") print(f"Content: {result['content'][:200]}...")

Q&A Search (Get Direct Answers)

answer = client.qna_search(query="Who won the 2024 US Presidential Election?")
print(answer)

Context Search (For RAG Applications)

context = client.get_search_context(
    query="Climate change effects on agriculture",
    max_tokens=4000
)

Use context directly in LLM prompts

Search Parameters

Common Parameters

| Parameter | Type | Description | Default | |-----------|------|-------------|---------| | query | string | Search query (required) | - | | search_depth | string | "basic" or "comprehensive" | "basic" | | max_results | int | Number of results (1-20) | 5 | | include_answer | bool | Include AI-generated answer | False | | include_raw_content | bool | Include full page content | False | | include_images | bool | Include image URLs | False |

Advanced Parameters

| Parameter | Type | Description | |-----------|------|-------------| | topic | string | Search topic: "general" or "news" | | time_range | string | Time filter: "day", "week", "month", "year" | | include_domains | list | Restrict to specific domains | | exclude_domains | list | Exclude specific domains | | exact_match | bool | Require exact phrase matching |

Response Format

Standard Search Response

{
  "query": "search query",
  "results": [
    {
      "title": "Result Title",
      "url": "https://example.com/article",
      "content": "Snippet or full content...",
      "score": 0.95,
      "raw_content": "Full page content (if requested)..."
    }
  ],
  "answer": "AI-generated answer (if requested)",
  "images": ["image_url1", "image_url2"],
  "response_time": 1.23
}

Error Handling

Common Errors

from tavily import TavilyClient
from tavily.exceptions import TavilyError, RateLimitError, InvalidAPIKeyError

client = TavilyClient(api_key="your-api-key")

try: response = client.search("query") except InvalidAPIKeyError: print("Invalid API key. Check your TAVILY_API_KEY.") except RateLimitError: print("Rate limit exceeded. Please wait before retrying.") except TavilyError as e: print(f"Tavily error: {e}")

Best Practices

1. Use Context Search for RAG

For retrieval-augmented generation, use get_search_context() instead of standard search:

context = client.get_search_context(
    query=user_query,
    max_tokens=4000,  # Fit within your LLM's context window
    search_depth="comprehensive"
)

Use in prompt

prompt = f"""Based on the following context: {context}

Answer this question: {user_query}"""

2. Handle Rate Limits

Tavily has rate limits. Implement exponential backoff:

import time
from tavily.exceptions import RateLimitError

def search_with_retry(client, query, max_retries=3): for attempt in range(max_retries): try: return client.search(query) except RateLimitError: if attempt < max_retries - 1: wait_time = 2 ** attempt # Exponential backoff print(f"Rate limited. Waiting {wait_time}s...") time.sleep(wait_time) else: raise

3. Filter Results

Use domain filters to improve result quality:

# Only search trusted news sources
response = client.search(
    query="breaking news",
    include_domains=["bbc.com", "reuters.com", "apnews.com"],
    time_range="day"  # Only recent news
)

4. Use Q&A Mode for Facts

For factual questions, use Q&A mode for direct answers:

# Good for: "Who won the 2024 election?"
answer = client.qna_search("Who won the 2024 US Presidential Election?")

Good for: "What is the capital of France?"

answer = client.qna_search("Capital of France")

Additional Resources

  • Tavily Documentation: https://docs.tavily.com
  • Python SDK: https://github.com/tavily-ai/tavily-python
  • JavaScript SDK: https://github.com/tavily-ai/tavily-js
  • API Reference: https://docs.tavily.com/documentation/api-reference
  • Skill Maintenance

    This skill requires:

  • TAVILY_API_KEY environment variable set
  • tavily-python package installed (pip install tavily-python)
  • For issues or updates, refer to the Tavily documentation or GitHub repository.

    πŸ’‘ Examples

    Prerequisites

    Set your Tavily API key:

    export TAVILY_API_KEY="tvly-your-api-key"
    

    Or use the Python client directly with API key.

    Basic Search

    from tavily import TavilyClient

    client = TavilyClient(api_key="tvly-your-api-key") response = client.search("Latest AI developments")

    for result in response['results']: print(f"Title: {result['title']}") print(f"URL: {result['url']}") print(f"Content: {result['content'][:200]}...")

    Q&A Search (Get Direct Answers)

    answer = client.qna_search(query="Who won the 2024 US Presidential Election?")
    print(answer)
    

    Context Search (For RAG Applications)

    context = client.get_search_context(
        query="Climate change effects on agriculture",
        max_tokens=4000
    )
    

    Use context directly in LLM prompts

    βš™οΈ Configuration

    Set your Tavily API key:

    export TAVILY_API_KEY="tvly-your-api-key"
    

    Or use the Python client directly with API key.

    Basic Search

    from tavily import TavilyClient

    client = TavilyClient(api_key="tvly-your-api-key") response = client.search("Latest AI developments")

    for result in response['results']: print(f"Title: {result['title']}") print(f"URL: {result['url']}") print(f"Content: {result['content'][:200]}...")

    Q&A Search (Get Direct Answers)

    answer = client.qna_search(query="Who won the 2024 US Presidential Election?")
    print(answer)
    

    Context Search (For RAG Applications)

    context = client.get_search_context(
        query="Climate change effects on agriculture",
        max_tokens=4000
    )
    

    Use context directly in LLM prompts

    πŸ“‹ Tips & Best Practices

    1. Use Context Search for RAG

    For retrieval-augmented generation, use get_search_context() instead of standard search:

    context = client.get_search_context(
        query=user_query,
        max_tokens=4000,  # Fit within your LLM's context window
        search_depth="comprehensive"
    )

    Use in prompt

    prompt = f"""Based on the following context: {context}

    Answer this question: {user_query}"""

    2. Handle Rate Limits

    Tavily has rate limits. Implement exponential backoff:

    import time
    from tavily.exceptions import RateLimitError

    def search_with_retry(client, query, max_retries=3): for attempt in range(max_retries): try: return client.search(query) except RateLimitError: if attempt < max_retries - 1: wait_time = 2 ** attempt # Exponential backoff print(f"Rate limited. Waiting {wait_time}s...") time.sleep(wait_time) else: raise

    3. Filter Results

    Use domain filters to improve result quality:

    # Only search trusted news sources
    response = client.search(
        query="breaking news",
        include_domains=["bbc.com", "reuters.com", "apnews.com"],
        time_range="day"  # Only recent news
    )
    

    4. Use Q&A Mode for Facts

    For factual questions, use Q&A mode for direct answers:

    # Good for: "Who won the 2024 election?"
    answer = client.qna_search("Who won the 2024 US Presidential Election?")

    Good for: "What is the capital of France?"

    answer = client.qna_search("Capital of France")