> ## Documentation Index
> Fetch the complete documentation index at: https://langchain-5e9cc07a-preview-opensw-1783454697-4d4e2b4.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# Exa integrations

> Integrate with Exa using LangChain Python.

> [Exa](https://exa.ai/) is a knowledge API for AI and developers.

## Installation and setup

`Exa` integration exists in its own [partner package](https://pypi.org/project/langchain-exa/). You can install it with:

```python theme={null}
pip install -qU langchain-exa
```

In order to use the package, you will also need to set the `EXA_API_KEY` environment variable to your Exa API key.

## Retriever

You can use the [`ExaSearchRetriever`](/oss/python/integrations/tools/exa_search#using-exasearchretriever) in a standard retrieval pipeline. You can import it as follows.

See a [usage example](/oss/python/integrations/tools/exa_search).

```python theme={null}
from langchain_exa import ExaSearchRetriever
```

## Tools

You can use Exa as an agent tool as described in the [Exa tool calling docs](/oss/python/integrations/tools/exa_search#use-within-an-agent).

See a [usage example](/oss/python/integrations/tools/exa_search).

### ExaFindSimilarResults

A tool that queries the Metaphor Search API and gets back JSON.

```python theme={null}
from langchain_exa.tools import ExaFindSimilarResults
```

### ExaSearchResults

Exa Search tool.

```python theme={null}
from langchain_exa.tools import ExaSearchResults
```

## Exa search retriever

You can retrieve search results as follows

```python theme={null}
from langchain_exa import ExaSearchRetriever

exa_api_key = "YOUR API KEY"

# Create a new instance of the ExaSearchRetriever
exa = ExaSearchRetriever(exa_api_key=exa_api_key)

# Search for a query and save the results
results  = exa.invoke("What is the capital of France?")

# Print the results
print(results)
```

### Advanced features

You can use advanced features like text limits, summaries, and live crawling:

```python theme={null}
from langchain_exa import ExaSearchRetriever, TextContentsOptions

# Create a new instance with advanced options
exa = ExaSearchRetriever(
    exa_api_key="YOUR API KEY",
    k=20,  # Number of results (1-100)
    type="auto",  # Can be "neural", "keyword", or "auto"
    livecrawl="always",  # Can be "always", "fallback", or "never"
    summary=True,  # Get an AI-generated summary of each result
    text_contents_options={"max_characters": 3000}  # Limit text length
)

# Search for a query with custom summary prompt
exa_with_custom_summary = ExaSearchRetriever(
    exa_api_key="YOUR API KEY",
    summary={"query": "generate one line summary in simple words."}  # Custom summary prompt
)
```

## Exa search results

You can run the ExaSearchResults module as follows

```python theme={null}
from langchain_exa import ExaSearchResults

# Initialize the ExaSearchResults tool
search_tool = ExaSearchResults(exa_api_key="YOUR API KEY")

# Perform a search query
search_results = search_tool._run(
    query="When was the last time the New York Knicks won the NBA Championship?",
    num_results=5,
    text_contents_options=True,
    highlights=True
)

print("Search Results:", search_results)
```

## Exa find similar results

You can run the ExaFindSimilarResults module as follows

```python theme={null}
from langchain_exa import ExaFindSimilarResults

# Initialize the ExaFindSimilarResults tool
find_similar_tool = ExaFindSimilarResults(exa_api_key="YOUR API KEY")

# Find similar results based on a URL
similar_results = find_similar_tool._run(
    url="http://espn.com",
    num_results=5,
    text_contents_options=True,
    highlights=True
)

print("Similar Results:", similar_results)
```

## Configuration options

All Exa tools support the following common parameters:

* `num_results` (1-100): Number of search results to return
* `type`: Search type - "neural", "keyword", or "auto"
* `livecrawl`: Live crawling mode - "always", "fallback", or "never"
* `summary`: Get AI-generated summaries (True/False or custom prompt dict)
* `text_contents_options`: Dict to limit text length (e.g. `{"max_characters": 2000}`)
* `highlights`: Include highlighted text snippets (True/False)

***

<div className="source-links">
  <Callout icon="terminal-2">
    [Connect these docs](/use-these-docs) to Claude, VSCode, and more via MCP for real-time answers.
  </Callout>

  <Callout icon="edit">
    [Edit this page on GitHub](https://github.com/langchain-ai/docs/edit/main/src/oss/python/integrations/providers/exa_search.mdx) or [file an issue](https://github.com/langchain-ai/docs/issues/new/choose).
  </Callout>
</div>
