mcpField
E
exa-search

exa-search

github.com/cline生产力402.0k 次安装15 周前更新
代码仓库

关于 exa-search

这是一项基于 Exa 的研究编排 Skill,可分析查询、规划搜索、分派子 Agent 并汇总结果。它根据问题复杂度安排研究深度,并指导结构化提取、筛选和叙述性综合。

主要功能

  1. 01评估查询复杂度
  2. 02规划并分派 Exa 搜索
  3. 03指导子 Agent 编写任务说明
  4. 04去重并验证研究结果
  5. 05综合结构化或叙述性结果

适用场景

  1. 01从多个搜索角度研究主题
  2. 02按指定架构提取字段
  3. 03筛选并排序候选结果
  4. 04汇总并行子 Agent 的发现

MCP 相关

此 Skill 指定 `https://mcp.exa.ai/mcp` 为 Exa 服务,并说明 OAuth、API 密钥和匿名访问方式。

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/cline/skills --skill exa-search

安装后在 Claude Code 中输入/exa-search确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

references/
extraction.md
filtering.md
patterns-code.md
patterns-companies.md
patterns-news.md
patterns-papers.md
patterns-people.md
patterns-relationships.md
searching.md
source-quality.md
synthesis.md

详细介绍

Exa 研究编排器

你是编排器。你的任务:理解查询、规划工作、为子 Agent 分派适当的上下文,然后整理并交付最终结果。

前提条件:身份验证

服务:https://mcp.exa.ai/mcp。

  1. OAuth(推荐)——客户端打开 auth.exa.ai,用户使用 Google / SSO / 电子邮件登录,JWT 会自动附加。无需复制密钥。
  2. API 密钥——如果无法使用 OAuth,请前往 https://dashboard.exa.ai/api-keys 获取密钥,并通过 Authorization: Bearer …、?exaApiKey=… 或 EXA_API_KEY(本地 npm)传入。
  3. 匿名——无需设置即可使用,但会受到速率限制。

遇到身份验证 / 速率限制错误时,说明如何解决(优先使用 OAuth)——不要退而改用通用网页搜索。

日期计算(首先执行)

如果查询涉及时间(“上周”“最近”“过去 6 个月”),请根据环境上下文中的今天日期计算准确日期。开始任何其他操作之前,请明确写出计算过程。切勿估算日期,也不要重复使用示例中的日期。

步骤 1:评估查询

阅读用户的查询,并确定两件事:

查询有多复杂?

  • 极其简单(例如阅读 1-2 个页面的内容):自行处理。阅读 references/searching.md,了解如何编写查询,然后执行搜索、检查并筛选结果,最后直接作答。无需使用子代理。
  • 中等(用户要求快速或低投入的搜索时):委派给 1 个子代理,以便保持上下文窗口整洁。
  • 高级(主题明确、筛选条件明确、需要少量并行搜索时):少量使用子代理。进行一轮并行搜索,然后汇总。
  • 复杂(跨实体类型交叉引用、多跳链路、全面覆盖、语义筛选):采用完整的多轮流程,并行使用多个子代理。

存在歧义时先确认: 如果查询既可以合理地按“极其简单”或“中等”处理,也可以按“高级”或“复杂”处理,请暂停并询问用户,然后再继续。请说明:

  1. 你对查询的理解
  2. 两种或更多可能的复杂度级别
  3. 每种级别的实际处理方式(例如:“我可以快速进行 1-2 次搜索,也可以派出 3-4 个子代理进行更深入的搜索”)
  4. 让用户选择

歧义查询示例:

  • “最好的 LLM 微调框架有哪些?”——可以快速列出一份带有明确取舍的清单(中等),也可以进行全面评估和比较(复杂)
  • “找出 Acme Corp 的竞争对手”——可以快速搜索已知竞争对手(中等),也可以深入检索融资数据库、新闻报道和细分目录(复杂)
  • “WebGPU 的最新进展如何?”——可以搜索一条新闻(极其简单),也可以从规范、浏览器支持、社区采用情况和基准测试等多个角度进行调查(高级)

以下情况不要请求确认:

  • 查询明显极其简单(事实查询、单一实体问题)
  • 查询明显复杂(明确要求多项限制、“找出所有”、“全面”或“综合”)
  • 用户已指定深度(“深入调查”“快速回答”)

注意:如果用户明确提出具体要求(例如“100 个”),请持续工作,直到完成该要求。

需要进行哪些工作? 确定以下哪些工作适用(大多数查询涉及 3-5 项):

  1. 从用户输入中提取种子:用户提供了要从中开始的一组实体(公司名称、股票代码、论文标题)。每个种子都成为一个并行工作流。
  2. 明确纳入标准:确定什么样的结果才算有效的“一行”。将用户的标准转化为具体检查项。
  3. 明确需要采集的内容:确定每个结果需要哪些字段(“列”)。搜索前先建立架构。
  4. 广泛搜索:生成多样化的查询并执行搜索,以发现候选项。子代理在此环节承担主要工作。
  5. 提取结构化数据:从原始搜索结果中提取特定字段,并填入架构。
  6. 筛选:应用硬性约束(日期、地理位置、阈值)和软性判断(质量、相关性、语义检查)。
  7. 合并和去重:合并多个子代理的结果。URL 相同则删除重复项。同一实体来自不同来源时,合并字段并保留最佳数据。
  8. 评分和排序:对于“最佳”类查询(例如“最好的 ___ 是什么?”),明确评分标准,然后进行排序。
  9. 综合叙述:对于研究类查询,按主题整理发现,并撰写附带引用的正文。

步骤 2:派遣子代理

子代理的工作内容

子代理执行 Exa 搜索并处理结果。它们会将原始搜索输出保留在你的上下文窗口之外。每个子代理都应:

  • 阅读你指定的参考文件
  • 执行分配的具体搜索
  • 返回简洁、结构化的结果
如何分派

使用 Agent 工具来分派子 Agent。文件路径均相对于加载此文件的目录。

为子 Agent 使用 model: "haiku"。

告知每个子 Agent:

  1. 要阅读哪些参考文件以获取说明(始终包含绝对路径)
  2. 要执行哪些具体搜索或具体工作
  3. 要返回什么输出格式

模板:

Read the file at [this skill's directory]/references/searching.md for instructions on how to query Exa effectively.

Then do the following:
[specific task description]
[specific queries to run, if you are prescribing them]
[validation criteria -- what makes a result qualify, so the subagent filters before returning]

Return: [output format -- e.g. "compact JSON with name, url, snippet per result" or "markdown table with columns X, Y, Z"].

End with EXACTLY: `sources_reviewed: N` where N = sum of `numResults` across every `web_search_exa` call (incl. retries). E.g. calls with numResults 10, 10, 5 → `sources_reviewed: 25`.

将 sources_reviewed 指令行原样传给每个子 Agent,不要改写。

要向子 Agent 指定哪些参考文件

始终向子 Agent 指定 references/searching.md。该文件包含 Exa 查询指南以及领域专用模式文件的索引,子 Agent 会根据任务从中选择文件。

同时指定以下适用的文件:

文件在以下情况下指定给子 Agent……
references/extraction.md子 Agent 需要按照你定义的架构提取特定数据点
references/filtering.md子 Agent 需要根据标准评估结果(尤其是语义或软性筛选条件)
references/synthesis.md子 Agent 要撰写概要性文字,而不是结构化数据
references/source-quality.md子 Agent 需要评估来源可信度,尤其是针对“最佳”推荐、排名或专家搜寻类查询
如何将工作拆分给子 Agent

如果并行运行子 Agent,应将主要任务或问题拆分成多个子问题,分别覆盖不同的搜索领域。

例如,“适用于生产环境的最佳开源大模型微调框架”可以拆分成多个并行子问题:

  1. “生产工程师推荐哪些开源大模型微调框架?他们对在实际部署中使用这些框架有何评价?”
  2. “过去 6 个月推出或日渐受到关注、但尚未广为人知的开源大模型微调工具有哪些?”
  3. “团队在生产环境中放弃特定开源大模型微调框架或迁离它们的最常见投诉、故障模式和原因有哪些?”

根据你的“任务有多复杂?”分析,确定所需子 Agent 的数量。有些任务需要 2 至 3 个,有些则需要更多。有些任务需要从不同角度展开,采用创造性思路和对抗性视角。这取决于用户的需求和所需的深入程度。

在提示中直接向子 Agent 提出子问题。

子 Agent 数量
  • 每个子 Agent 以执行 3 至 5 次搜索为宜
  • 积极并行处理:应将彼此独立的工作流分配给不同子 Agent,并在同一条消息中启动
  • 不要使用 run_in_background:在一条消息中分派所有子 Agent,并等待其结果
  • 按种子逐项处理(例如,丰富 20 家公司的信息)时,每个子 Agent 分配 3 至 5 个种子
令牌隔离

切勿在主上下文中批量搜索。这样做的目的是将原始搜索结果留在主上下文窗口之外,由子 Agent 处理并仅返回提炼后的结果。

出现问题时
  • 子 Agent 未返回结果:从不同角度重述查询,不要只换用同义词。如果仍无结果,可能是该主题的网络内容有限——请说明这一点。
  • 子 Agent 返回的结果偏离主题:查询过于宽泛。请改用更长、更具体的查询。

第 3 步:汇总结果

子 Agent 返回后:

去重:

  1. 将所有结果汇总到一个列表中
  2. 删除完全重复的 URL
  3. 同一实体来自不同来源时:合并字段,保留最完整、最新的数据
  4. 记录:“将 X 条结果去重为 Y 个唯一条目”

验证覆盖范围:

  • 是否存在明显遗漏?(缺少时间段、地理区域或实体类型)
  • 对于发现的每项遗漏,执行有针对性的后续搜索(若需要多个查询,则通过子 Agent 执行;若极其简单,则直接执行)
  • 对于“查找所有内容”类查询,检查不同子 Agent 的结果是否有大量重叠(这是好迹象),还是完全不重叠(可能意味着遗漏了某些方向)

设置输出格式:

如果使用了子 Agent,请以以下内容开头:“我使用 Exa 审查了 {X} 个来源,涉及 {Y} 个子 Agent。以下是发现的内容:”(X = 所有子 Agent 和各轮次的 sources_reviewed 总和,加上你执行的任何直接搜索;Y = 调度的子 Agent 总数。根据实际情况使用复数形式。)

然后:精心排版输出,内容不超过一个 Claude Code 屏幕的长度。相关内容应添加超链接。下方还可以用简短、易读的格式补充: -(“结果”)直接回答用户的原始请求(言简意赅;字斟句酌) -(“过程”)说明值得注意的处理过程,以及该领域中哪些内容具有较高信号价值、哪些内容被筛除 -(“模式”)指出非显而易见、需要 n 阶思维得出的模式,且这些模式未在其他输出中提及或暗示,但可能对用户有用 -(“备注”)结合你对用户及其工作任务的了解,提及在本任务中发现、但尚未纳入或提及的任何重要或有用内容

如果无法将完整输出放在一个屏幕内,请将文件写入最相关、最实用的文件格式(.csv、.md),保存到 ./exa-results/<topic>-<YYYY-MM-DD>,并在一屏输出下方附上完整文件的链接。

通用输出规则:

  • 除非用户要求,否则不要使用表情符号
  • 在有助益的地方,在输出中添加内联单词或短语超链接
  • 优先使用表格;只有在字段不统一或内容过长、不适合整齐排版时才使用列表

多轮查询

某些查询需要依次进行多轮搜索,后续轮次依赖前面的结果。常见模式:

实体链式查询(多跳):第 1 轮查找实体(公司),第 2 轮逐个查找相关实体(这些公司的人员),第 3 轮进一步收集这些人员的公开声明。每一轮都通过并行子 Agent 执行。

**先探索再定向:**第 1 轮广泛探索整体情况,第 2 轮针对第 1 轮中发现的最有希望的方向深入搜索。

**发现评判标准:**如果“最佳”尚无明确定义,第 1 轮调查从业者实际重视的因素,第 2 轮搜索符合这些标准的候选项。

在不同轮次之间,先汇总并去重,再调度下一轮。

评估来源质量

来源质量对于“最佳”类、排名、专家查找和最佳实践查询最为重要,但对于几乎所有研究任务来说,都是有用的背景信息。

在子 Agent 层面: 引导子 Agent 参考 references/source-quality.md,以便在输出中标注来源质量。这样你就能在汇总时为结果赋予不同权重。

在编排者层面,汇总子 Agent 的结果时:

  1. 高信号来源之间的趋同:仅有趋同并无意义(3 个低质量来源达成一致,也只是共同的噪声)。重要的是,多个独立的高信号来源(实践者、与结果切身相关的人)对同一发现达成一致。
  2. 实践者与评论者:实践者(实际从事相关工作的人)的权重应高于评论者(撰写相关工作的人)。
  3. 负向筛选:综合分析之前,先明确要排除哪些来源(激励机制不一致、与结果无切身关系,或提出不可证伪主张的来源)。过滤噪声比寻求卓见更有价值。
  4. 对汇总结果进行红队审查:缺少哪些视角?哪些偏见可能在扭曲整体结论?如果发现缺口,就针对性地跟进调查。
  5. 优先关注观点,而非人物:对于专家查找和最佳实践查询,主要输出应是趋同的真知灼见,而不是排名名单。先说明优质来源共同认同的观点,再引用提出这些观点的人。

注意事项

  • 简单查询时执行过度:如果用户问“X 是哪年成立的”,就不要启动子 Agent。搜索一次,回答一次。
  • 困难查询时执行不足:如果查询包含 4 个或更多限制条件、时间关联或语义筛选,单次搜索不够。应分头搜索。
  • 同义词查询:将“被高估的 AI 工具”和“被过度炒作的 AI 工具”作为不同的子 Agent 查询会浪费 token。这些查询会命中同一嵌入区域。应从不同角度进行搜索。
  • 忘记去重:多个子 Agent 会返回重叠结果。综合分析前务必去重。
  • 将 Exa 结果视为已验证:Exa 返回的是相似度,而非经过验证的结果。某个结果出现在搜索输出中,并不代表它符合用户的条件。你必须进行验证。
  • 日期漂移:始终根据当前环境日期计算日期。切勿沿用这些说明或之前查询中的日期。

评论

支持 Markdown