langchain/libs/partners/exa
Mason Daugherty 4d9eefecab
fix: bump lockfiles (#31923)
* bump lockfiles after upgrading ruff
* resolve resulting linting fixes
2025-07-08 13:27:55 -04:00
..
langchain_exa fix: bump lockfiles (#31923) 2025-07-08 13:27:55 -04:00
scripts multiple: pydantic 2 compatibility, v0.3 (#26443) 2024-09-13 14:38:45 -07:00
tests exa[patch]: ruff fixes and rules (#31902) 2025-07-08 02:02:42 +00:00
.gitignore exa: init pkg (#16553) 2024-01-24 20:57:17 -07:00
LICENSE exa: init pkg (#16553) 2024-01-24 20:57:17 -07:00
Makefile fix: automatically fix issues with ruff (#31897) 2025-07-07 14:13:10 -04:00
pyproject.toml fix: bump lockfiles (#31923) 2025-07-08 13:27:55 -04:00
README.md exa docs and python package update (#31307) 2025-05-21 21:33:30 -04:00
uv.lock fix: bump lockfiles (#31923) 2025-07-08 13:27:55 -04:00

langchain-exa

This package contains the LangChain integrations for Exa Cloud generative models.

Installation

pip install -U langchain-exa

Exa Search Retriever

You can retrieve search results as follows

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:

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

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)

Advanced Features

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

from langchain_exa import ExaSearchResults

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

# Perform a search query with advanced options
search_results = search_tool._run(
    query="Latest AI research papers",
    num_results=10,  # 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": 2000}  # Limit text length
)

# With custom summary prompt
search_results_with_custom_summary = search_tool._run(
    query="Latest AI research papers",
    summary={"query": "generate one liner"}  # Custom summary prompt
)

Exa Find Similar Results

You can run the ExaFindSimilarResults module as follows

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)

Advanced Features

from langchain_exa import ExaFindSimilarResults

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

# Find similar results with advanced options
similar_results = find_similar_tool._run(
    url="http://espn.com",
    num_results=10,  # Number of results (1-100)
    livecrawl="fallback",  # Can be "always", "fallback", or "never"
    summary=True,  # Get an AI-generated summary of each result
    text_contents_options={"max_characters": 1500}  # Limit text length
)