AI Tools
教程9 分钟2026年5月12日作者:AIGCDev更新于: 2026年5月13日

如何用 Strands 和 Exa 构建 Web Search Agent(2026)

先说结论

如果你需要一个能搜索实时网页、但又不想每次都变成混乱浏览器抓取的 AI agent,Strands + Exa 是现在很值得复制的一套实用组合。

重点不是新闻标题本身,而是 AWS 在 2026-05-11 发布的文章里展示的工作流形状:让 Strands 负责 agent loop,让 Exa 负责网页搜索和页面内容提取,再把任务范围收窄到人类仍然能复核的程度。

截至 2026-05-13,这套方案适合研究简报、事实核查、市场扫描和竞品监控。不适合要求来源绝对完整、重度电子表格逻辑,或大规模零成本运行的任务,因为 Exa 仍然是付费 API,而实时网页搜索天然会有噪声。

2026-05-11 这次更新改变了什么

AWS 在 2026-05-11 发布了官方文章,演示如何把 Exa search tools 接入 Strands Agents SDK。这件事有价值,是因为它把“agent 可以浏览网页”这种泛泛说法,变成了一条可以复制的实现路径。

这个模式很简单:

  • Strands 运行 agent loop。
  • Exa 提供语义搜索和内容提取。
  • 模型决定什么时候搜索、什么时候拉取完整页面、什么时候停止。

对正在搭建内部 AI 工作流的团队来说,这比泛泛讲“agents can browse the web”更有用。它给出了一套职责边界清晰的技术栈。

什么时候适合用这套栈

当下面大多数条件都成立时,可以考虑 Strands + Exa:

  • 你需要当前网页信息,而不是只查上传文件;
  • 你希望 agent 至少能返回真实 URL;
  • 任务可以被定义成研究、验证或结构化总结;
  • 最终输出在触发业务动作之前会有人复核;
  • 你想要比普通 snippet-heavy search API 更适合 agent 的搜索输入。

如果真正需求是下面这些,就先不要用它:

  • 你需要金融、法律或合规层面的完整性保证;
  • 你需要每次运行都完全确定、完全一致的输出;
  • 你不想增加一个付费依赖;
  • 团队还没有定义什么叫“好答案”;
  • 你的工作流更适合基于内部文档做普通 RAG。

每个组件实际负责什么

组件 职责 为什么重要
Strands Agents 运行 agent loop 和工具调用 你少写一层 workflow glue,让模型决定何时用工具
Exa exa_search 用语义搜索和过滤器查找相关来源 比普通搜索 snippet 更适合 agent 工作流
Exa exa_get_contents 拉取 agent 找到的 URL 页面文本 让 agent 处理页面内容,而不是只看标题
System prompt 定义范围、来源偏好和输出格式 大部分质量提升仍然来自这里

Exa 官方 search API 文档里有一个关键细节:search API 支持多种 search type,包括 autofastinstantneuraldeep-litedeepdeep-reasoning,也支持 category、domain 等过滤器。这意味着你不必把所有任务都压成同一种搜索策略。

开始前需要准备什么

动手之前,先确认这些前置条件。

项目 要确认什么 为什么重要
Python Python 3.10 或更高版本 AWS 文章和 Strands SDK setup 都按这个前提来写
模型提供方 Bedrock、OpenAI、Anthropic、Gemini 或其他受支持提供方 Strands 本身不绑定模型,但你仍然需要一个真实模型后端
Bedrock access(如果走 AWS 路径) AWS credentials、模型访问权限和可用 region 如果 Bedrock 不能调用选定模型,脚本会在搜索之前失败
Exa API key Exa dashboard 里的可用 key 没有 key,search tools 无法运行
strands-agentsstrands-agents-tools Exa 集成在 tools package 里
窄任务 一个有明确成功标准的研究问题 太宽的 prompt 会让 agent 很快变贵、变散

最快的安全搭建路径

Step 1: 安装包

先创建干净环境,再安装 AWS 示例中使用的两个包。

python3 -m venv .venv
source .venv/bin/activate
pip install strands-agents strands-agents-tools

Step 2: 设置 Exa API key

Exa 官方文档和 AWS 教程都使用 EXA_API_KEY 环境变量。

export EXA_API_KEY="your_exa_api_key_here"

如果团队使用 secrets manager 或 CI runner,把 key 放在那里,不要硬编码进脚本。

Step 3: 从一个有边界的研究任务开始

不要从“research anything about AI”开始。

先选一个有明显终点的任务。例如:

  • 对比三个竞品最新产品公告;
  • 找到某个 API 变更的最新官方文档;
  • 总结一个窄分类里最近的 vendor 动作;
  • 为产品 brief 收集有来源支持的 notes。

不好的第一条任务:

  • monitor the entire market and tell me what matters

这种 prompt 往往会烧 token、过度搜索,最后仍然给出模糊答案。

Step 4: 注册 Exa tools

官方示例里的最小设置很短。

from strands import Agent
from strands_tools.exa import exa_search, exa_get_contents

agent = Agent(tools=[exa_search, exa_get_contents])

它能工作,是因为 Strands 会读取工具签名,并在 loop 中决定什么时候调用每个工具。

Step 5: 用 prompt 限定范围

可用的第一版 prompt 应该定义来源偏好、时间窗口和输出结构。

You are a research assistant for product and strategy work.

Task:
- Find official or primary sources about recent changes in AI coding agents.
- Prefer official company blogs, docs, release notes, and GitHub repositories.
- Focus on changes published in the last 14 days.
- Avoid duplicate reporting of the same announcement.

Return format:
1. Key updates
2. Why each update matters
3. Source list with URLs
4. Open questions or gaps

这已经比“search the web and summarize trends”这种泛化请求好得多。

可复制的 starter script

AWS 文章展示的是基于 Bedrock 的例子;Strands 官方 repo 也说明,如果你已有 AWS credentials,Bedrock 是默认 provider。下面的脚本贴近这条路径,同时保留实际任务边界。

运行之前,先确认你的 AWS profile 能在选定 region 调用选定的 Bedrock model。如果账号没有启用这个模型,请先替换 model_idregion_name,再去排查 Exa tools。

from strands import Agent
from strands.models.bedrock import BedrockModel
from strands_tools.exa import exa_search, exa_get_contents

model = BedrockModel(
    model_id="us.anthropic.claude-sonnet-4-6",
    region_name="us-west-2",
    max_tokens=8000,
)

agent = Agent(
    model=model,
    tools=[exa_search, exa_get_contents],
    system_prompt="""
You are a research agent.
Prefer official sources, product docs, release notes, and GitHub repos.
Use web search only when needed.
When multiple articles repeat the same announcement, keep the primary source.
End with a concise brief and a source list.
""",
)

question = "Find the most important official updates in AI coding agents from the last 14 days and summarize what changed for technical teams."

response = agent(question)
print(response)

如果你的技术栈更适合其他 Strands 支持的模型提供方,可以把 Bedrock 换掉。关键不在 Bedrock 本身,而在搜索和页面提取保持为两个独立工具,而不是被藏进一个不透明 prompt 里。

Exa search mode 怎么选

这个选择会影响成本和输出质量。Exa 当前 docs 暴露的模式比 AWS 示例里的简化说法更多,所以第一版部署要保守。

Mode 适合什么 取舍
instant 语音或实时建议流程 延迟最低,深度最弱
fast 一个 workflow 里重复触发的 agent tool call 速度好,但覆盖度不如更深模式
auto 大多数第一次部署 让 Exa 选择搜索路径,因此要检查返回成本和来源质量
neural 需要语义检索、重视来源而不是综合推理的普通任务 深度低于 deep 系列
deep-lite 较难问题上的轻量综合 比简单检索更慢、更贵
deep 更难的研究或竞品扫描 通常比 neural 更慢、更贵
deep-reasoning 漏掉上下文代价很高的高风险研究 最深的选项,只适合有人复核的 workflow

不知道怎么选时,从 auto 开始。只有当漏掉来源的风险高于额外延迟和 API 成本时,再切到 deepdeep-reasoning。生产环境要控制成本,就记录 Exa 返回的 cost fields,不要只凭 mode 名称猜。

一个好的第一场景:竞品更新 brief

这正是这套栈真正有用的地方。

假设产品团队每周需要追踪 AI coding tools。你的 agent 可以:

  1. 搜索近期官方公告;
  2. 拉取最相关页面;
  3. 去掉重复报道;
  4. 返回带 URL 和 open questions 的短 brief。

比开放式研究 prompt 更好的写法:

You are preparing a weekly competitor brief.

Focus:
- AI coding agents
- official product announcements only when possible
- changes published in the last 7 days

For each item, return:
- company or product name
- what changed
- who should care
- one practical implication for a dev tools team
- source URL

Do not include rumors, fundraising news, or commentary unless it changes product availability.

这个场景适合,是因为:

  • 时间窗口清楚;
  • 来源偏好清楚;
  • 重复报道很常见,Exa 的 retrieval step 有帮助;
  • 输出在任何人行动之前都可以先复核。

怎么避免 agent 变散

带网页搜索能力的 agent,只有在被约束住时才有用。

从第一天就用这些 guardrails:

  • 在 prompt 中优先要求官方域名;
  • 设置真实时间窗口,比如 7、14 或 30 天;
  • 每次都要求输出 URL;
  • 要求模型区分事实和 open questions;
  • 输出格式短到你真的会复核。

一个简单验收清单也有帮助:

  • 答案是否包含 primary URLs?
  • 是否合并了重复报道?
  • 是否拉取了当前页面,而不是旧解释文章?
  • 是否出现需要人工复核的 unsupported claims?

这套栈仍然会失败的地方

很多新闻型文章会跳过这一段。

Live search 仍然有噪声

即使用了更好的搜索层,也可能返回质量参差不齐的页面、过期评论,或只是提到主题但并非真正来源的页面。

好奇心会推高成本

agent 搜索、抓取、复查页面越频繁,token 和 API 成本就越高。懒散的 prompt 可能把一份小 brief 变成一长串 tool calls。

Search 不是合规记录

有来源支持的答案比没有引用的答案好,但它仍然不是法律、财务或审计级流程。

全页提取不等于完整理解

exa_get_contents 会给模型更多上下文,但模型仍然可能误读页面、过度压缩细节,或漏掉相比旧版本真正变化的地方。

什么时候该用别的方案

Strands + Exa 不是所有研究工作流的最佳答案。

需求 更好的起点 原因
只从内部文档回答 基于内部语料的 RAG 实时网页搜索会增加不必要噪声
面向人的研究聊天和手动浏览 Perplexity 或普通浏览器流程 设置更少,非开发者更容易用
深度电子表格分析 Python notebook 加人工来源 agent loop 不是难点
低成本高频监控 Feed processing 加规则 常驻 agent search 很快变贵

FAQ

使用 Strands + Exa 一定需要 Amazon Bedrock 吗?

不需要。Bedrock 是 AWS 示例强调的路径,Strands SDK 在一些 quickstart 中默认走 Bedrock,但 Strands 官方 repo 也记录了对 OpenAI、Anthropic、Gemini 等多个模型提供方的支持。

Exa 会替代模型吗?

不会。Exa 是搜索和 retrieval 层。你仍然需要一个模型提供方来理解结果并写最终答案。

应该一开始就用 deep search mode 吗?

通常不需要。除非任务明确需要最大覆盖度,而且可以接受更高延迟,否则先用 auto。只有在有人复核、有成本预算,并且简单 retrieval 明显漏掉重要来源时,才考虑 deep-reasoning

这适合做 autonomous production agents 吗?

可以,但只适合有明确边界的 workflow。它更适合有人复核的研究任务,而不是会执行不可逆动作的 agent。

核验说明

核验日期:2026-05-13。

  • AWS 官方文章:核验 2026-05-11 公告、Exa 两工具集成形态、前置条件和 sample Bedrock model path:https://aws.amazon.com/blogs/machine-learning/building-web-search-enabled-agents-with-strands-and-exa/
  • Strands Agents 官方站点和 GitHub repo:核验 Python 3.10+、package 名称、Bedrock default guidance 和多 provider 支持:https://strandsagents.com/https://github.com/strands-agents/sdk-python
  • Exa 官方 API docs:核验 search endpoint、支持的 search types(autofastinstantneuraldeep-litedeepdeep-reasoning)、categories、返回 cost fields 和 API key 用法:https://exa.ai/docs/reference/search
ai-agentsai-searchai-codingcloudamazon