本文由來自 Exa 的 Ishan Goswami 和 Nitya Sridhar 共同撰寫。
如果你正在為研究、事實核查或競爭情報構建支援網路搜尋的 AI 智慧體,那麼獲取當前可靠的資訊至關重要。大多數通用搜尋 API 並非為智慧體工作流程設計。它們返回的是針對人類瀏覽最佳化的 HTML 頁面和簡短摘要,而不是智慧體可以直接使用的結構化資料。因此,開發者通常需要構建額外的層——自定義爬蟲、解析器和排序邏輯——來將這些內容轉化為智慧體工作流程中可用的格式。
Exa 與 Strands Agents SDK 的整合透過在工具介面中直接內建 AI 原生搜尋和檢索層來解決這一缺口。Exa 提供乾淨、結構化的內容,這些內容經過格式化可直接用於 LLM 上下文視窗,無需後處理來剝離標記或重新格式化輸出。結合 Strands Agents SDK 的模型驅動架構(模型決定何時呼叫工具以及如何使用其輸出),智慧體可以將即時的網路知識融入其推理迴圈。
在實踐中,你的智慧體透過兩個工具訪問此整合:exa_search,它執行語義搜尋並支援新聞、研究論文和程式碼倉庫等類別;以及 exa_get_contents,它從選定的 URL 中檢索完整內容。本文中,你將學習如何在 Strands Agents 中設定 Exa 整合,瞭解它暴露的兩個核心工具,並逐步瞭解展示智慧體如何使用網路搜尋完成多步驟任務的真實用例。
Strands Agents
Strands Agents SDK 是一個來自 AWS 的開源框架,用於使用模型驅動的方法構建 AI 智慧體。開發者提供模型、系統提示和一個工具列表,而不是編寫硬編碼的工作流程。模型本身決定下一步做什麼:呼叫哪些工具、以什麼順序呼叫以及任務何時完成。Strands Agents 的核心是智慧體迴圈。每次迭代中,模型接收完整的對話歷史,包括之前的每一個工具呼叫及其結果。如果模型需要更多資訊,它會請求一個工具;Strands Agents 執行工具並將結果反饋。迴圈持續直到模型產生最終答案。這種跨迭代的上下文積累使得智慧體能夠處理超出單個 LLM 呼叫範圍的多步驟任務。Strands Agents SDK 附帶超過 40 個預建工具,涵蓋檔案 I/O、shell 執行、網路搜尋、AWS API、記憶體、程式碼執行等。它還支援模型上下文協議(MCP),因此 MCP 伺服器暴露的工具無需額外整合工作即可供智慧體使用。新增新工具(包括 Exa 網路搜尋工具)遵循相同的模式:將它們放入 tools=[] 列表中,模型從其簽名中學習如何使用它們。
Exa
Exa 是一個專門為 LLM 和 AI 智慧體構建的網路規模搜尋引擎。Exa 是一個理解查詢含義而不僅僅是關鍵詞的搜尋引擎。像“構建氣候解決方案的初創公司”這樣的查詢會返回實際的氣候初創公司,即使這些頁面從未使用過這個確切的短語。模型在語義相似性上匹配,而不是字串重疊。結果以乾淨、結構化的內容形式返回,沒有廣告或 SEO 噪聲,可供 LLM 直接消費。
Strands Agents 和 Exa:整合概述
Exa 整合可透過 strands-agents-tools 包獲得。它為你的智慧體提供兩個功能:搜尋網路查詢相關內容,以及從特定 URL 提取全文。下圖視覺化了深度研究助手的示例,我們將在部落格後面部分深入討論。
兩者都針對 AI 消費進行了最佳化,返回結構化內容,智慧體可以直接在之上進行推理。
- exa_search:使用多種模式(包括 auto、fast 和 deep)搜尋網路。你的智慧體可以使用類別、域、日期和文本內容等過濾器細化結果。
- exa_get_contents:從智慧體發現的 URL(無論是來自之前的搜尋還是其自身推理)中檢索完整頁面內容。該工具首先檢查快取結果以加快重複請求速度。如果需要新鮮內容,它可以自動回退到即時爬取以檢索頁面的最新版本。
使用 exa_search 搜尋網路
exa_search 工具為你的智慧體提供了超越基本查詢字串的搜尋控制。該工具支援四種搜尋模式:
- Instant (~200ms) – 專為自動完成、即時建議和語音智慧體等即時應用設計。
- Fast (~450ms) – 為速度最佳化,同時仍訪問 Exa 的高質量索引。適用於智慧體進行數十次搜尋呼叫的工作流程。
- Auto (~1s) [推薦] – 平衡延遲與高質量結果。推薦用於大多數用例。
- Deep (~3-6s) – 跨查詢變體執行並行搜尋以獲得最大覆蓋率。最適合需要完整性的研究任務。
除了搜尋模式,exa_search 還為你的智慧體提供對結果過濾和範圍的精細控制。您可以將搜尋縮小到特定內容類別,如新聞文章、公司網站、GitHub 倉庫、PDF、個人資料或財務報告。當智慧體已經知道需要什麼型別的來源時,類別過濾最為有效。例如,查詢技術性時過濾到研究論文,或者優先考慮時效性時過濾到新聞來源。您還可以在搜尋結果的同一行中請求內容和摘要:
agent.tool.exa_search(
query="recent advances in AI safety research",
num_results=10,
summary={"query": "key research areas and findings"}
)響應包含標題、URL 以及每個結果針對您指定查詢的合成摘要。您的智慧體可以在不閱讀每個完整頁面的情況下建立對主題的基礎理解。
使用 exa_get_contents 提取內容
一旦您的智慧體找到了相關的 URL,無論是來自之前的搜尋還是其自身推理,exa_get_contents 工具就會檢索完整頁面內容。您向其傳遞一個 URL 列表,它返回提取的文本,供智慧體處理。Exa 維護一個內容快取,對於已經爬取的頁面,可以即時提供結果。對於不在快取中的頁面,或者當您的智慧體需要頁面的最新版本時,該工具支援即時爬取。您可以使用 livecrawl 模式控制此行為。可配置的超時控制等待即時爬取完成的時間。您還可以控制返回的文本量。例如,從頁面檢索最多 5000 個字元的純文本:
agent.tool.exa_get_contents(
urls=["https://example.com/blog-post"],
highlight={"maxCharacters": 5000}
)前提條件
要跟隨本文中的示例,您需要:
- Python 3.10 或更高版本
- 具有 Amazon Bedrock 訪問許可權的 AWS 賬戶
- Exa API 金鑰
- 安裝 strands-agents 和 strands-agents-tools 包:
pip install strands-agents strands-agents-tools設定
Exa 工具遵循與 Strands Agents 框架中每個其他工具相同的模式,因此如果您使用過其他 Strands 工具,體驗是相同的。Strands Agents SDK 包含一個預建工具庫,涵蓋檔案操作、網路搜尋、程式碼執行、AWS 服務、記憶體管理等。Exa 工具是該庫的一部分。匯入它們並透過 tools 引數傳遞給 Agent 建構函式。然後智慧體的底層 LLM 在其推理迴圈中決定何時呼叫每個工具。由於整合直接與 Exa REST API 通訊,因此您無需安裝或管理單獨的 SDK。唯一的新的依賴是 strands-agents-tools 包。
要使用 Exa 結合 Strands Agents,請按照以下步驟操作:
- 設定您的 Exa API 金鑰
Exa 需要 API 金鑰進行身份驗證訪問。在執行您的智慧體之前,使用您的金鑰設定 EXA_API_KEY 環境變數。您可以從 Exa 儀表板獲取金鑰:
```bash export EXA_API_KEY="your_exa_api_key_here" ```
- 匯入並註冊工具
在您的智慧體程式碼中,從 strands_tools.exa 匯入 exa_search 和 exa_get_contents,並將它們包含在智慧體的工具列表中:
```python from strands import Agent from strands_tools.exa import exa_search, exa_get_contents
agent = Agent(tools=[exa_search, exa_get_contents]) ```
- 呼叫您的智慧體
註冊工具後,您的智慧體可以自然地在其推理流程中交錯搜尋和內容提取:
```python response = agent( "Search for the most recent trends in AI agents and provide a concise summary of key developments" ) ```
設定好智慧體後,您就可以開始為不同的搜尋場景使用 Exa 工具了。
示例:使用 Exa 構建深度研究智慧體
為了檢視兩個工具如何協同工作,以下示例構建了一個深度研究助手,在多步驟工作流程中演示了這兩個 Exa 工具。給定一個研究問題,智慧體跨不同源型別執行四個目標搜尋,從最有希望的結果中提取完整內容,並將所有內容綜合成一個結構化的研究簡報。整個工作流程在單個智慧體呼叫中執行,推理迴圈中涉及多個工具呼叫。
關鍵設計見解是,不同的源型別需要不同的搜尋引數,但不需要不同的工具。兩個 Exa 工具在工作流程中重複使用,每個步驟具有不同的引數配置:類別用於定位新聞、PDF 或倉庫;日期過濾器用於時效性;JSON 模式用於結構化提取;以及用於新鮮度的即時爬取。
開始使用
- 在 Exa 儀表板註冊 Exa API 金鑰
- 克隆示例倉庫並執行深度研究助手
- 修改系統提示以針對您的領域:切換類別過濾器、日期範圍和 JSON 模式以匹配您的用例
設定智慧體
設定需要一個模型、一個系統提示和兩個 Exa 工具:
from strands import Agent
from strands.models.bedrock import BedrockModel
from strands_tools.exa import exa_search, exa_get_contents
def create_research_agent() -> Agent:
model = BedrockModel(
model_id="us.anthropic.claude-sonnet-4-6",
region_name="us-west-2",
max_tokens=20000,
)
return Agent(
model=model,
system_prompt=load_system_prompt(),
tools=[exa_search, exa_get_contents],
)系統提示定義了研究工作流程,引導智慧體完成六個步驟:四次針對不同源型別的目標搜尋,一次深入內容提取,以及一次最終綜合傳遞。智慧體決定何時以及如何呼叫每個工具,如何解釋結果,以及何時在其推理迴圈中移動到下一步。
6 步驟研究工作流程
每個步驟指示智慧體使用針對該內容型別調整的不同引數呼叫 Exa 工具。
步驟 1:概覽搜尋 – 使用 auto 模式進行廣泛掃描以建立基礎理解。系統提示指示智慧體使用以下引數呼叫 exa_search:
- type: "auto"
- num_results: 5
- text: {"maxCharacters": 2000}
- highlights: {"maxCharacters": 4000}
- summary: {"query": "What are the key concepts, main points, and important details?"}
- subpages: 2
- subpage_target: ["overview", "about", "introduction"]
- max_age_hours: 168
步驟 2:新聞搜尋 – 重點縮小到 30 天日期視窗內的新聞來源。日期邊界在 Python 中計算並注入到提示中。max_age_hours 設定快取內容的最大可接受年齡(小時數)。
- category: "news"
- num_results: 5
- start_published_date: (計算值)
- text: {"maxCharacters": 1500}
- summary: {"query": "What are the key announcements, developments, and news?"}
- max_age_hours: 24
步驟 3:研究論文 – 繼續執行後續步驟,針對研究論文和其他來源。由於篇幅限制,此處省略詳細配置。
透過這種方式,深度研究智慧體能夠自主完成複雜的研究任務,即時獲取並綜合網路資訊。