Agent Reach 搜索工具实战指南:用 Exa AI 语义搜索为 Agent 一键接入高质量网页与代码检索
【免费下载链接】Agent-Reach给你的 AI Agent 一键装上互联网能力。13 个平台(网页/GitHub/YouTube/小红书/B站/Twitter/Reddit 等)多后端路由,当下最稳的接入方式替你选好、装好、体检好。GitHub 主仓库同步镜像。项目地址: https://gitcode.com/Panniantong/Agent-Reach
本指南聚焦 Agent Reach 项目中的搜索通道(search channel),系统讲解如何通过 Exa AI 搜索引擎为 AI Agent 补齐「全网语义搜索」能力。你将在本文中掌握 Exa MCP 的零配置接入方式、
mcporter call exa.web_search_exa的完整用法与参数含义、如何用agent-reach doctor体检搜索通道,以及 Exa 与 GitHub 搜索、中文搜索的分工与组合调研策略,并深入理解其底层实现原理(源码与测试佐证)。
一、搜索通道在 Agent Reach 中的定位
Agent Reach 是一套「互联网能力路由器」:16 个平台、多后端路由,为 AI Agent 提供网页、GitHub、YouTube、小红书、B 站、Twitter、Reddit 等平台的只读访问能力。在 skill/SKILL.md 的路由表中,搜索类任务被归为search分类,由 references/search.md 详细说明——它是全网调研类任务的起点通道:
| 用户意图 | 分类 | 详细文档 |
|---|---|---|
| 网页搜索/代码搜索 | search | references/search.md |
| 小红书/推特/B站/V2EX/Reddit/Facebook/Instagram | social | references/social.md |
| 招聘/职位/LinkedIn/Boss直聘 | career | references/career.md |
| GitHub/代码 | dev | references/dev.md |
| 网页/文章/RSS | web | references/web.md |
| YouTube/B站/播客字幕 | video | references/video.md |
| 雪球/股票行情 | finance | references/finance.md |
在源码层面,搜索通道对应agent_reach/channels/exa_search.py中的ExaSearchChannel类,其定义为:
class ExaSearchChannel(Channel): name = "exa_search" description = "全网语义搜索" backends = ["Exa via mcporter"] tier = 0其中tier = 0表示这是零配置通道(zero-config),即安装后无需 API Key 即可使用。按 base.py 的约定,backends[0]是首选后端,ExaSearchChannel的唯一后端就是「Exa via mcporter」。
二、快速开始:一条命令完成语义搜索
Exa 是一个高质量 AI 语义搜索引擎,特别擅长英文内容与技术文档,能通过自然语言查询词直接定位官方文档和代码示例。Agent Reach 通过 mcporter(MCP 协议的命令行桥接工具)调用 Exa 官方的 MCP Server,核心命令只有一条:
mcporter call exa.web_search_exa query="query" numResults=5典型用法示例:
# 常规网页搜索 mcporter call exa.web_search_exa query="query" numResults=5 # 技术/代码资料检索:搜索库的 API 用法与官方示例 mcporter call exa.web_search_exa query="library API code example" numResults=5参数说明
| 参数 | 含义 | 建议取值 |
|---|---|---|
query | 语义搜索查询词,支持自然语言 | 直接用完整需求描述,如"Kafka consumer group rebalance 原理" |
numResults | 返回结果条数 | 默认 5;需要更多候选时可适当调大 |
使用场景速查表(继承自 references/search.md)
| 场景 | 参数 |
|---|---|
| 网页搜索 | web_search_exa(query: "...", numResults: 5) |
| 技术/代码资料 | web_search_exa(query: "框架名 API 示例", numResults: 5) |
弃用说明:不要使用 get_code_context_exa
Exa MCP 的
get_code_context_exa已弃用且默认不注册。代码问题也使用web_search_exa;需要精确搜索仓库内容时,改用 dev.md 中的 GitHub 搜索。
这一点有测试用例专门守护:tests/test_skill_command.py 中明确断言搜索参考文档包含web_search_exa、且不包含exa.get_code_context_exa与get_code_context_exa(,确保 Skill 文档不会引导 Agent 使用已弃用的工具。
三、零配置接入:从安装到体检
Exa 通过 MCP 接入,免费、无需注册、无需 API Key。完整配置流程记录在 guides/setup-exa.md,共三步。
第 1 步:安装 mcporter
npm install -g mcportermcporter 是 MCP 协议的命令行桥接工具,用来调用 MCP Server。Agent Reach 用它连接 Exa 和小红书两个通道。
第 2 步:注册 Exa MCP
mcporter config add exa https://mcp.exa.ai/mcp --scope home该命令将名为exa的 MCP Server 写入 mcporter 的 home 级配置。仓库中 config/mcporter.json 展示了项目级配置的等价形态:
{ "mcpServers": { "exa": { "baseUrl": "https://mcp.exa.ai/mcp" }, "xiaohongshu": { "baseUrl": "http://localhost:18060/mcp" } }, "imports": [] }第 3 步:验证
agent-reach doctor | grep "Search" mcporter call exa.web_search_exa query="test" numResults=1第一条命令体检搜索通道是否激活,第二条命令真实调用一次 Exa 搜索确认链路通畅。
需要用户手动做的步骤
无。Exa 通过 MCP 接入,免费、无需注册、无需 API Key。如果agent-reach install --system因为网络问题没有配置 Exa,手动运行上面两条命令即可。
另外,根据 install.md 的说明,agent-reach install的默认命令只做只读检查(检查 gh CLI、Node.js、mcporter、Exa 搜索、yt-dlp 配置等基础设施);只有显式加上--system授权后,才会真正安装/配置缺失组件并激活包括 Exa Search 在内的零配置通道:
默认命令检查核心基础设施(gh CLI、Node.js、mcporter、Exa search、yt-dlp 配置),不修改宿主。四、源码级原理:Doctor 如何体检 Exa 通道
4.1 通道检查逻辑
ExaSearchChannel.check()(exa_search.py)完整实现了体检逻辑,返回(status, message),状态取值为ok/warn/off/error:
- mcporter 未安装→ 返回
off,并给出安装处方:npm install -g mcporter+mcporter config add exa https://mcp.exa.ai/mcp --scope home; - mcporter 已装、配置中能找到
exaserver→ 返回warn,提示「Exa 已写入 mcporter 配置,但 Doctor 未启动远端服务做连通验证,不能仅凭配置宣称可用」; - 配置中无
exa,且启用了 editor imports→ 返回warn,说明 Doctor 为避免扩大凭据读取范围没有展开 imports,当前未验证; - mcporter 已装但 Exa 未配置→ 返回
off,提示注册命令。
关键设计:check()全程只做「配置层面」的静态检查,绝不执行 mcporter、绝不启动远端 MCP 服务。这一点由 tests/test_channels.py 的TestExaSearchChannel系列用例锁定:
test_mcporter_is_never_executed:monkeypatch 掉subprocess.run使其一旦被调用即pytest.fail,验证 Doctor 不会执行 mcporter;test_configured_exa_is_not_false_positive_active:配置中已有exa时返回warn(而非ok),且active_backend保持None,避免「配置存在」被误报为「通道可用」;test_config_metadata_containing_exa_is_not_a_backend:即使某个 server 的 URL 含exa-project字样,也不视为 Exa 后端,返回off;test_invalid_mcporter_json_is_reported_as_error_not_unconfigured:mcporter 配置是非法 JSON 时报error,而不是静默降级为「未配置」。
4.2 mcporter 配置如何被读取
通道体检的底层依赖是 channels/mcporter.py 中的inspect_mcporter_config()。其配置层选择规则为(对应 mcporter 0.7.3 的行为):
- 若显式设置了环境变量
MCPORTER_CONFIG,则只读该单层配置; - 否则先读 home 级配置
~/.mcporter/mcporter.json(或mcporter.jsonc,取先存在的); - 再叠加项目级配置
<cwd>/config/mcporter.json,项目条目覆盖 home 级同名 server。
读取时仅返回mcpServers中精确的 server 名称(统一小写比对),imports字段涉及编辑器配置的导入,Doctor 出于凭据边界考虑故意不展开。若配置缺失mcpServers对象、server 名称为空或定义非对象、顶层非 JSON,均会抛出McporterConfigError并上报为error状态。
这套「只读、不执行、不扩大凭据读取范围」的约束,也是 SKILL.md 中「动手前先体检」规则的实现基础:active_backend有值时按它选命令组;active_backend: null只代表 Doctor 没做实时验证,不代表后端不存在。
五、组合调研:Exa 与其他搜索工具的分工
references/search.md 给出了三类搜索工具的定位对比,这是 Agent 执行「全网调研」类任务时的选型依据:
| 工具 | 来源 | 适用场景 |
|---|---|---|
| Exa | agent-reach | 英文/技术/代码搜索 |
| 智谱搜索 | my-mcp-tools | 中文搜索 |
| GitHub 搜索 | agent-reach (dev.md) | 仓库/代码搜索 |
组合策略(源自 SKILL.md 常驻规则):全网调研类任务应组合多平台——Exa 搜索 + Twitter/Reddit 看讨论 + 小红书/B站看中文场景,并行收集再汇总。
5.1 用 site: 限定符搜特定平台内容
Exa 支持site:限定符,可复用为其他平台的搜索通道:
- Reddit 搜索(setup-reddit.md):
mcporter call exa.web_search_exa query="site:reddit.com python best practices" numResults=5 - Twitter/X 搜索(troubleshooting.md,twitter-cli 不可用时的替代方案):
mcporter call exa.web_search_exa query="site:x.com 搜索词" numResults=5
这也是 setup-exa.md 中「配置后解锁」的三项能力:全网语义搜索、Reddit 搜索(site:reddit.com)、Twitter 搜索(site:x.com)。
六、常见问题
Q: 有搜索次数限制吗?A: MCP 端点由 Exa 官方提供(mcp.exa.ai),当前免费无限制。如果未来有变化,会在 agent-reach 更新中适配。
Q: mcporter 是什么?A: MCP 协议的命令行桥接工具,用来调用 MCP Server。Agent Reach 用它来连接 Exa 和小红书。
Q: 通道体检返回warn(「Exa 已写入 mcporter 配置,但未做连通验证」)算可用吗?A: 这是设计使然。按 exa_search.py 与测试用例(test_channels.py),Doctor 只做配置级检查、不启动远端服务,因此不能仅凭配置宣称可用。判断实际可用性的方式是直接跑一次mcporter call exa.web_search_exa query="test" numResults=1,以真实调用结果验收。
Q: 代码检索需求应该用哪个工具?A: 优先web_search_exa(如query="框架名 API 示例");需要精确搜索仓库内部内容时改用 dev.md 中的 GitHub 搜索(gh search repos "query" --sort stars --limit 10)。get_code_context_exa已弃用,不要使用。
七、小结
- Exa 搜索通道是 Agent Reach 的零配置通道(
tier = 0),通过 mcporter + 官方 MCP 端点接入,免费且无需 API Key; - 核心命令
mcporter call exa.web_search_exa query="..." numResults=5覆盖网页搜索与技术/代码资料检索,配合site:reddit.com、site:x.com限定符可扩展为 Reddit/Twitter 的备选搜索通道; agent-reach doctor提供配置级体检,其「不执行 mcporter、不扩大凭据读取范围」的边界由 channels/mcporter.py 实现并经 tests/test_channels.py 的多组用例锁定;- 全网调研任务中,Exa(英文/技术/代码)、智谱搜索(中文)、GitHub 搜索(仓库/代码)三者分工互补,组合使用才能覆盖完整的信息面。
【免费下载链接】Agent-Reach给你的 AI Agent 一键装上互联网能力。13 个平台(网页/GitHub/YouTube/小红书/B站/Twitter/Reddit 等)多后端路由,当下最稳的接入方式替你选好、装好、体检好。GitHub 主仓库同步镜像。项目地址: https://gitcode.com/Panniantong/Agent-Reach
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考