Skip to main content

Overview

Exa is a neural search engine that uses embeddings to find semantically similar content. It’s particularly good at finding content that matches the meaning of your query.

Installation

pip install "praisonai[tools]"

Environment Variables

export EXA_API_KEY=your_api_key_here
Get your API key from Exa.

Quick Start

from praisonai_tools import ExaTool

# Initialize
exa = ExaTool()

# Search
results = exa.search("best practices for Python development")
print(results)

Usage with Agent

from praisonaiagents import Agent
from praisonai_tools import ExaTool

agent = Agent(
    name="Researcher",
    instructions="You are a research assistant. Use Exa to find relevant content.",
    tools=[ExaTool()]
)

response = agent.chat("Find articles about machine learning best practices")
print(response)

Available Methods

search(query, num_results=10)

Search for content using neural search.
from praisonai_tools import ExaTool

exa = ExaTool()
results = exa.search("transformer architecture explained", num_results=5)

# Returns:
# [
#     {"title": "...", "url": "...", "snippet": "...", "score": 0.95},
#     ...
# ]

find_similar(url, num_results=10)

Find content similar to a given URL.
similar = exa.find_similar("https://example.com/article", num_results=5)

get_contents(urls)

Get full content from URLs.
contents = exa.get_contents(["https://example.com/article1", "https://example.com/article2"])

Configuration Options

exa = ExaTool(
    api_key="your_key",           # Optional: defaults to EXA_API_KEY
    use_autoprompt=True,          # Auto-optimize queries
    type="neural"                 # "neural" or "keyword"
)

Function-Based Usage

from praisonai_tools import exa_search

# Quick search without instantiating class
results = exa_search("AI safety research", num_results=5)

CLI Usage

# Set API key
export EXA_API_KEY=your_key

# Use with praisonai
praisonai --tools ExaTool "Find articles about reinforcement learning"

Error Handling

from praisonai_tools import ExaTool

exa = ExaTool()
results = exa.search("my query")

if results and "error" in results[0]:
    print(f"Error: {results[0]['error']}")
else:
    for r in results:
        print(f"- {r['title']}: {r['url']}")

Common Errors

ErrorCauseSolution
EXA_API_KEY not configuredMissing API keySet environment variable
exa not installedMissing dependencyRun pip install exa-py
Rate limitedToo many requestsAdd delays between requests