Skip to main content
Prerequisites
  • Python 3.10 or higher
  • PraisonAI Agents package installed
  • tavily-python package installed
  • TAVILY_API_KEY environment variable set
Tavily is an AI-powered search API optimized for LLM applications. PraisonAI includes built-in Tavily tools for easy integration.

Installation

pip install praisonaiagents tavily-python

Setup

export TAVILY_API_KEY=your_tavily_api_key
export OPENAI_API_KEY=your_openai_api_key

Built-in Tavily Tool

PraisonAI provides a built-in tavily tool that you can import directly:
from praisonaiagents import Agent
from praisonaiagents.tools import tavily

agent = Agent(
    name="SearchAgent",
    role="Web Researcher",
    goal="Find information on the web",
    tools=[tavily]
)

result = agent.start("What are the latest AI trends in 2025?")
print(result)

Available Functions

FunctionDescription
tavilyWeb search (alias for tavily_search)
tavily_searchSearch with full parameters
tavily_extractExtract content from URLs
tavily_crawlCrawl websites
tavily_mapGet site maps

Basic Usage

from praisonaiagents.tools import tavily

# Simple search
results = tavily("Python programming best practices")
print(results)

Search with Options

from praisonaiagents.tools import tavily_search

results = tavily_search(
    query="AI trends 2025",
    max_results=5,
    search_depth="advanced",  # "basic" or "advanced"
    include_answer=True,      # Get LLM-generated answer
    topic="general"           # "general", "news", or "finance"
)

print(results.get("answer"))  # AI-generated answer
for r in results.get("results", []):
    print(f"- {r['title']}: {r['url']}")

Extract Content from URLs

from praisonaiagents.tools import tavily_extract

content = tavily_extract(
    urls=["https://docs.praison.ai", "https://example.com"],
    extract_depth="basic"  # "basic" or "advanced"
)

for result in content.get("results", []):
    print(f"URL: {result['url']}")
    print(f"Content: {result['raw_content'][:500]}...")

Crawl Websites

from praisonaiagents.tools import tavily_crawl

results = tavily_crawl(
    url="https://docs.praison.ai",
    max_depth=2,
    max_breadth=10,
    limit=20,
    instructions="Find all pages about agents"
)

for page in results.get("results", []):
    print(f"- {page['url']}")

Get Site Map

from praisonaiagents.tools import tavily_map

sitemap = tavily_map(
    url="https://docs.praison.ai",
    max_depth=2,
    limit=50
)

for url in sitemap.get("results", []):
    print(url)

With PraisonAI Agent

from praisonaiagents import Agent
from praisonaiagents.tools import tavily

agent = Agent(
    name="SearchAgent",
    role="Web Researcher",
    goal="Find and analyze information from the web",
    tools=[tavily]
)

result = agent.start("Research the latest developments in quantum computing")
print(result)

Using TavilyTools Class

For more control, use the TavilyTools class directly:
from praisonaiagents.tools import TavilyTools

# Initialize with custom API key (optional)
tools = TavilyTools(api_key="your_api_key")  # or uses TAVILY_API_KEY env var

# Search
results = tools.search("AI news", max_results=5, include_answer=True)

# Extract
content = tools.extract(["https://example.com"])

# Crawl
pages = tools.crawl("https://docs.praison.ai", max_depth=2)

# Map
sitemap = tools.map("https://docs.praison.ai")

Async Usage

import asyncio
from praisonaiagents import Agent, Task, Agents
from praisonaiagents.tools import tavily_search_async

agent = Agent(
    name="AsyncSearchAgent",
    role="Search Specialist",
    tools=[tavily_search_async]
)

task = Task(
    description="Search for AI trends",
    agent=agent,
    async_execution=True
)

agents = Agents(agents=[agent], tasks=[task])
result = asyncio.run(agents.astart())

Search Parameters

ParameterTypeDescription
querystrSearch query
search_depthstr”basic” or “advanced”
topicstr”general”, “news”, or “finance”
max_resultsintMax results (1-20)
include_answerboolInclude LLM-generated answer
include_raw_contentboolInclude full page content
include_imagesboolInclude images
include_domainslistDomains to include
exclude_domainslistDomains to exclude
time_rangestr”day”, “week”, “month”, “year”

Key Points

  • Simple function signature: Tool must accept query: str and return str
  • Environment variable: Set TAVILY_API_KEY before running
  • Agent decides: The LLM decides when to use the tool based on the query
  • Works globally: --query-rewrite works with any PraisonAI command