跳到主要内容
Exa 是一个完全为大型语言模型(LLM)设计的搜索引擎。它允许用户使用自然语言查询在互联网上搜索文档,然后检索所需文档的干净 HTML 内容 与基于关键词的搜索(如 Google)不同,Exa 的神经网络搜索能力使其能够语义理解查询并返回相关文档。例如,我们可以搜索“关于猫的精彩文章”,并比较 GoogleExa 的搜索结果。Google 会根据关键词“精彩”给出 SEO 优化的列表文章。Exa 则直接返回相关结果。 本笔记本将介绍如何在 LangChain 中使用 Exa Search。

设置

安装

安装 LangChain Exa 集成包
pip install -qU langchain-exa

# and some deps for this notebook
pip install -qU langchain langchain-openai langchain-community

凭据

您需要一个 Exa API 密钥才能使用此集成。通过在此处注册可获得 10 美元免费积分(完成首次搜索等操作可获得更多积分)。
import getpass
import os

if not os.environ.get("EXA_API_KEY"):
    os.environ["EXA_API_KEY"] = getpass.getpass("Exa API key:\n")

使用 ExaSearchResults 工具

ExaSearchResults 是一个可与 LangChain 代理一起使用以执行 Exa 搜索的工具。它为搜索操作提供了更结构化的接口
from langchain_exa import ExaSearchResults

# Initialize the ExaSearchResults tool
search_tool = ExaSearchResults(exa_api_key=os.environ["EXA_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)

ExaSearchResults 的高级功能

您可以使用高级搜索选项,例如控制搜索类型、实时抓取和内容过滤
# 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"
    text_contents_options={"max_characters": 2000},  # Limit text length
    summary={"query": "generate one liner"},  # Custom summary prompt
)

print("Advanced Search Results:")
print(search_results)

使用 ExaFindSimilarResults 工具

ExaFindSimilarResults 允许您查找与给定 URL 相似的网页。这对于查找相关内容或进行竞品分析很有用
from langchain_exa import ExaFindSimilarResults

# Initialize the ExaFindSimilarResults tool
find_similar_tool = ExaFindSimilarResults(exa_api_key=os.environ["EXA_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)

在 Agent 中使用

我们可以将 ExaSearchResults 和 ExaFindSimilarResults 工具与 LangGraph 代理一起使用。这使得代理能够根据用户的查询动态搜索信息并查找相似内容。 首先,让我们设置语言模型。您需要提供您的 OpenAI API 密钥:
import getpass

if not os.environ.get("OPENAI_API_KEY"):
    os.environ["OPENAI_API_KEY"] = getpass.getpass("OpenAI API key:\n")
我们需要安装 langgraph
pip install -qU langgraph
from langchain.chat_models import init_chat_model
from langchain_exa import ExaFindSimilarResults, ExaSearchResults
from langchain.agents import create_agent


# Initialize the language model
model = init_chat_model(model="gpt-4o", model_provider="openai", temperature=0)

# Initialize Exa Tools
exa_search = ExaSearchResults(
    exa_api_key=os.environ["EXA_API_KEY"],
    max_results=5,
)

exa_find_similar = ExaFindSimilarResults(
    exa_api_key=os.environ["EXA_API_KEY"],
    max_results=5,
)

# Create agent with both tools
agent = create_agent(model, [exa_search, exa_find_similar])

# Example 1: Basic search
user_input = "What are the latest developments in quantum computing?"

for step in agent.stream(
    {"messages": user_input},
    stream_mode="values",
):
    step["messages"][-1].pretty_print()

使用 ExaSearchRetriever

ExaSearchRetriever 是一个使用 Exa Search 检索相关文档的检索器。
TextContentsOptionsmax_characters 参数以前称为 max_length,现已弃用。请务必改用 max_characters

基本用法

以下是使用 ExaSearchRetriever 的一个简单示例
from langchain_exa import ExaSearchRetriever

# Create a new instance of the ExaSearchRetriever
exa = ExaSearchRetriever(exa_api_key=os.environ["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)

高级功能

您可以使用高级功能,例如控制结果数量、搜索类型、实时抓取、摘要和文本内容选项
from langchain_exa import ExaSearchRetriever

# Create a new instance with advanced options
exa = ExaSearchRetriever(
    exa_api_key=os.environ["EXA_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"
    text_contents_options={"max_characters": 3000},  # Limit text length
    # Custom prompt for an LLM generated summary of page content
    summary={"query": "generate one line summary in simple words."},
)

# Search with advanced options
results = exa.invoke("Latest developments in quantum computing")
print(f"Found {len(results)} results")
for result in results[:3]:  # Print first 3 results
    print(f"Title: {result.metadata.get('title', 'N/A')}")
    print(f"URL: {result.metadata.get('url', 'N/A')}")
    print(f"Summary: {result.metadata.get('summary', 'N/A')}")
    print("-" * 80)

API 参考

有关所有 Exa API 功能和配置的详细文档,请访问 Exa API 文档
以编程方式连接这些文档到 Claude、VSCode 等,通过 MCP 获取实时答案。
© . This site is unofficial and not affiliated with LangChain, Inc.