exa-agent

Compare original and translation side by side

🇺🇸

Original

English
🇨🇳

Translation

Chinese

Exa Agent Research

Exa Agent 研究

You are operating Exa Agent through MCP. Exa Agent is a tool that allows you to run multi-step web research, list-building, enrichment, structured output, run continuation, and coverage validation.
你正在通过MCP操作Exa Agent。Exa Agent是一款可用于执行多步骤网页研究、列表构建、信息补全、结构化输出、任务续跑以及覆盖范围验证的工具。

Required tools

必备工具

  • agent_run
  • agent_run

Exa Connect providers

Exa Connect 提供商

When a run needs premium partner data alongside Exa web search, pass
dataSources
to
agent_run
.
Use only the currently usable self-serve providers:
  • fiber
    : B2B company, people, jobs, and contact enrichment
  • financial_datasets
    : ticker-based news for US public companies
  • similarweb
    : website traffic estimates, rankings, and competitor discovery
  • baselayer
    : US business verification, officers, registrations, and KYB
  • affiliate
    : product catalog search, pricing, brands, and merchant links
  • particle
    : podcast transcript search with speaker attribution and timestamps
  • jinko
    : travel destination discovery ranked by fare
Do not suggest request-only providers unless the user explicitly says their Exa account already has them enabled.
当任务需要在Exa网页搜索之外使用优质合作伙伴数据时,可向
agent_run
传入
dataSources
参数。
仅使用当前可用的自助式提供商:
  • fiber
    :B2B企业、人员、职位及联系人信息补全
  • financial_datasets
    :美国上市公司基于股票代码的新闻数据
  • similarweb
    :网站流量估算、排名及竞品发现
  • baselayer
    :美国企业验证、管理人员信息、注册信息及反洗钱尽调(KYB)
  • affiliate
    :产品目录搜索、定价、品牌及商家链接
  • particle
    :带说话人归属和时间戳的播客文稿搜索
  • jinko
    :按票价排序的旅行目的地发现
除非用户明确说明其Exa账户已启用,否则请勿推荐需申请的提供商。

Decision tree

决策树

Choose the work surface before acting:
  1. Known input rows plus repeated same-shape enrichment at scale
    • Write a deterministic script using Exa APIs directly.
    • Use bounded concurrency, exponential backoff, checkpoints, and a stable output file.
    • Read the output file and synthesize from it.
    • Do not burn context manually looping over hundreds of identical tool calls.
  2. Open-ended universe definition, list-building, people/company discovery, multi-hop research, structured research, or follow-up over previous work
    • Use Exa Agent.
    • Define the objective and
      outputSchema
      before creating the run.
行动前先选择工作方式:
  1. 已知输入行且需大规模重复同格式信息补全
    • 直接使用Exa API编写确定性脚本。
    • 使用有限并发、指数退避、检查点及稳定输出文件。
    • 读取输出文件并从中汇总信息。
    • 避免手动循环执行数百次相同工具调用以消耗上下文。
  2. 开放式范围定义、列表构建、人员/企业发现、多跳研究、结构化研究或基于先前工作的跟进
    • 使用Exa Agent。
    • 创建任务前先定义目标和
      outputSchema

Before creating a run

创建任务前

Always write down:
  • Objective: what the run is meant to answer.
  • Universe: what entities qualify.
  • Segments: geographies, industries, personas, dates, asset classes, or other partitions.
  • Coverage target: desired count, maximum count, and what "good enough" means.
  • Output fields: columns needed in the final answer.
  • Evidence requirements: URLs, source titles, dates, and confidence.
  • Exclusions: prior results or disallowed entities.
If the user uses relative time like "recent", "last 6 months", or "post-IPO", calculate exact dates from today's date first.
务必明确以下内容:
  • 目标:任务要解决的问题。
  • 范围:符合条件的实体类型。
  • 细分维度:地域、行业、用户角色、日期、资产类别或其他划分标准。
  • 覆盖目标:期望数量、最大数量,以及“足够好”的定义。
  • 输出字段:最终结果所需的列。
  • 证据要求:URL、来源标题、日期及可信度。
  • 排除项:已有结果或不允许的实体。
如果用户使用“近期”“过去6个月”“上市后”等相对时间表述,需先根据当前日期计算出精确日期。

Schema rules

规则说明

Use
outputSchema
for list-building, enrichment, finance/company research, and repeatable workflows.
Rules:
  • Use a top-level object.
  • Put list rows in a named array field.
  • Add
    maxItems
    to arrays when possible.
  • Include source/evidence fields, not just conclusions.
  • Include stable identifiers: company name, website/domain, person LinkedIn URL, ticker, CIK, etc.
  • Include confidence or rationale fields for fuzzy judgments.
  • Keep required fields limited to what must exist.
  • Use
    format: "uri"
    ,
    format: "email"
    , or
    format: "phone"
    when needed.
Example company-list schema:
json
{
  "type": "object",
  "properties": {
    "companies": {
      "type": "array",
      "maxItems": 50,
      "items": {
        "type": "object",
        "properties": {
          "company_name": { "type": "string" },
          "website": { "type": "string", "format": "uri" },
          "segment": { "type": "string" },
          "why_it_qualifies": { "type": "string" },
          "evidence_url": { "type": "string", "format": "uri" },
          "confidence": { "type": "string", "enum": ["low", "medium", "high"] }
        },
        "required": ["company_name", "website", "why_it_qualifies", "evidence_url"]
      }
    },
    "coverage_notes": { "type": "string" },
    "known_gaps": {
      "type": "array",
      "items": { "type": "string" }
    }
  },
  "required": ["companies", "coverage_notes"]
}
Example with Exa Connect:
json
{
  "tool": "agent_run",
  "arguments": {
    "query": "Find 10 fast-growing B2B SaaS companies and return estimated monthly website visits from Similarweb.",
    "dataSources": [
      { "provider": "similarweb" }
    ],
    "outputSchema": {
      "type": "object",
      "properties": {
        "companies": {
          "type": "array",
          "maxItems": 10,
          "items": {
            "type": "object",
            "properties": {
              "name": { "type": "string" },
              "domain": { "type": "string" },
              "monthlyVisits": {
                "type": "number",
                "description": "Estimated monthly visits from Similarweb"
              }
            },
            "required": ["name", "domain", "monthlyVisits"]
          }
        }
      },
      "required": ["companies"]
    }
  }
}
列表构建、信息补全、金融/企业研究及可重复工作流需使用
outputSchema
规则:
  • 使用顶层对象。
  • 将列表行放在命名数组字段中。
  • 尽可能为数组添加
    maxItems
    属性。
  • 包含来源/证据字段,而非仅结论。
  • 包含稳定标识符:企业名称、网站/域名、人员LinkedIn URL、股票代码、CIK等。
  • 为模糊判断添加可信度或理由字段。
  • 仅保留必须存在的必填字段。
  • 必要时使用
    format: "uri"
    format: "email"
    format: "phone"
示例企业列表规则:
json
{
  "type": "object",
  "properties": {
    "companies": {
      "type": "array",
      "maxItems": 50,
      "items": {
        "type": "object",
        "properties": {
          "company_name": { "type": "string" },
          "website": { "type": "string", "format": "uri" },
          "segment": { "type": "string" },
          "why_it_qualifies": { "type": "string" },
          "evidence_url": { "type": "string", "format": "uri" },
          "confidence": { "type": "string", "enum": ["low", "medium", "high"] }
        },
        "required": ["company_name", "website", "why_it_qualifies", "evidence_url"]
      }
    },
    "coverage_notes": { "type": "string" },
    "known_gaps": {
      "type": "array",
      "items": { "type": "string" }
    }
  },
  "required": ["companies", "coverage_notes"]
}
Exa Connect使用示例:
json
{
  "tool": "agent_run",
  "arguments": {
    "query": "Find 10 fast-growing B2B SaaS companies and return estimated monthly website visits from Similarweb.",
    "dataSources": [
      { "provider": "similarweb" }
    ],
    "outputSchema": {
      "type": "object",
      "properties": {
        "companies": {
          "type": "array",
          "maxItems": 10,
          "items": {
            "type": "object",
            "properties": {
              "name": { "type": "string" },
              "domain": { "type": "string" },
              "monthlyVisits": {
                "type": "number",
                "description": "Estimated monthly visits from Similarweb"
              }
            },
            "required": ["name", "domain", "monthlyVisits"]
          }
        }
      },
      "required": ["companies"]
    }
  }
}

Exa Agent workflow

Exa Agent 工作流程

  1. Run the agent
    • Call
      agent_run
      .
    • Omit
      effort
      to use the tool's
      low
      default. Choose
      auto
      or a higher effort only when the user asks for more depth or the task clearly requires it.
    • Include
      outputSchema
      for structured work.
    • Use
      input.data
      for known rows.
    • Use
      input.exclusion
      for entities already returned or disallowed.
    • Add
      dataSources
      only when one of the self-serve Exa Connect providers is clearly useful.
    • Name the provider-specific data you want in both the query and the schema so Agent uses the provider instead of falling back to web search.
    • Save the returned
      id
      when a later continuation may use
      previousRunId
      .
    • If the response has
      status: "running"
      , call
      agent_run
      again with that
      runId
      until
      outputReady
      is true. This continuation is available for retained runs that outlive one MCP call.
    • Zero Data Retention (ZDR) teams: new runs always stream, and output is only available on that live stream (not via
      runId
      resumption). The MCP call window is ~750 seconds; if a ZDR run cannot finish in one call, retry with lower effort or split the task.
      previousRunId
      is not available on ZDR.
  2. Read the result
    • Wait until
      outputReady
      is true (or status is failed/cancelled).
    • Read both
      output.structured
      and
      output.grounding
      .
    • Do not assume results are exhaustive just because the run completed.
  3. Validate coverage
    • Check row count against target.
    • Check segment coverage.
    • Deduplicate entities.
    • Inspect evidence quality.
    • Identify gaps.
  4. Continue if needed
    • Use
      agent_run
      with
      previousRunId
      for follow-up/refinement.
    • Use
      input.exclusion
      to avoid resurfacing prior results.
    • Segment large universes into multiple runs if one run is too broad.
  5. Final answer
    • State what was done.
    • Present structured results.
    • State coverage and limitations.
    • Say "best-effort discovery" unless exhaustiveness was explicitly scoped and validated.
  1. 运行Agent
    • 调用
      agent_run
    • 省略
      effort
      参数将使用工具默认的
      low
      级别。仅当用户要求更深入研究或任务明确需要时,才选择
      auto
      或更高级别。
    • 结构化工作需包含
      outputSchema
    • 已知行数据使用
      input.data
    • 已返回或不允许的实体使用
      input.exclusion
    • 仅当某一自助式Exa Connect提供商明显有用时,才添加
      dataSources
    • 在查询和规则中明确指定需要的提供商特定数据,以便Agent使用该提供商而非默认网页搜索。
    • 保存返回的
      id
      ,以便后续续跑时使用
      previousRunId
    • 如果响应显示
      status: "running"
      ,需使用该
      runId
      再次调用
      agent_run
      ,直到
      outputReady
      为true。对于超过一次MCP调用时长的保留任务,可使用此续跑功能。
    • 零数据保留(ZDR)团队:新任务始终流式传输,输出仅在该实时流中可用(无法通过
      runId
      恢复)。MCP调用窗口约为750秒;如果ZDR任务无法在一次调用内完成,需降低级别或拆分任务重试。ZDR不支持
      previousRunId
  2. 读取结果
    • 等待
      outputReady
      变为true(或状态为失败/已取消)。
    • 同时读取
      output.structured
      output.grounding
    • 不要仅因任务完成就假设结果是全面的。
  3. 验证覆盖范围
    • 检查行数是否符合目标。
    • 检查细分维度覆盖情况。
    • 去重实体。
    • 检查证据质量。
    • 识别空白点。
  4. 必要时续跑
    • 使用带
      previousRunId
      agent_run
      进行跟进/细化。
    • 使用
      input.exclusion
      避免重复显示已有结果。
    • 如果范围过大,可将其拆分为多个任务。
  5. 最终答案
    • 说明已执行的操作。
    • 展示结构化结果。
    • 说明覆盖范围和局限性。
    • 除非明确界定并验证了全面性,否则需说明这是“尽力而为的发现”。

Continuation patterns

续跑模式

Use
previousRunId
when:
  • narrowing a list
  • filling missing fields
  • asking for another segment
  • validating a prior set
  • requesting "more like these"
Do not use
previousRunId
when:
  • the prior run failed or is still running
  • the new task is unrelated
  • you need clean independent coverage for another segment
For independent segments, create separate runs and aggregate results yourself.
在以下场景使用
previousRunId
  • 缩小列表范围
  • 补充缺失字段
  • 请求另一细分维度的数据
  • 验证先前结果集
  • 请求“更多类似结果”
在以下场景请勿使用
previousRunId
  • 先前任务失败或仍在运行
  • 新任务与先前任务无关
  • 需要为另一细分维度获取独立的干净覆盖结果
对于独立细分维度,需创建单独任务并自行汇总结果。

Exhaustiveness and coverage language

全面性与覆盖范围表述

Never claim exhaustive coverage unless all are true:
  • The universe is bounded and well-defined.
  • Search/discovery strategy covers the main segments.
  • The output count and gaps were checked.
  • Duplicates were resolved.
  • Evidence was inspected.
  • Any remaining unknowns are disclosed.
Preferred language when not fully validated:
  • "best-effort discovery"
  • "high-confidence initial universe"
  • "not exhaustive"
  • "coverage appears strongest in X and weaker in Y"
Avoid:
  • "all companies"
  • "complete list"
  • "exhaustive"
  • "definitive"
unless validation supports it.
仅当以下所有条件满足时,才可声称覆盖全面:
  • 范围明确且有界。
  • 搜索/发现策略覆盖主要细分维度。
  • 已检查输出数量和空白点。
  • 已解决重复项。
  • 已检查证据质量。
  • 已披露所有剩余未知信息。
未完全验证时的首选表述:
  • “尽力而为的发现”
  • “高可信度初始范围”
  • “非全面性结果”
  • “在X领域覆盖较强,在Y领域覆盖较弱”
避免使用以下表述:
  • “所有企业”
  • “完整列表”
  • “全面覆盖”
  • “权威结果”
除非验证结果支持上述表述。

Batch Script Mode

批量脚本模式

If the task requires many parallel Exa calls of the same shape, especially batch enrichment over known companies/people:
  1. Write a script instead of issuing many MCP calls manually.
  2. The script must:
    • read deterministic inputs from a file
    • use bounded concurrency
    • use exponential backoff for 429/5xx
    • checkpoint partial progress
    • write deterministic JSON/CSV/TSV output
    • preserve raw API errors per row
  3. Run the script.
  4. Read the output file.
  5. Synthesize from the output.
Use Exa Agent instead of Batch Script Mode when the hard part is discovery, reasoning, multi-hop research, or deciding what to search next.
如果任务需要多次并行执行相同格式的Exa调用,尤其是针对已知企业/人员的批量信息补全:
  1. 编写脚本,而非手动发起多次MCP调用。
  2. 脚本必须:
    • 从文件读取确定性输入
    • 使用有限并发
    • 对429/5xx错误使用指数退避
    • 记录部分进度检查点
    • 输出确定性JSON/CSV/TSV格式结果
    • 保留每行的原始API错误信息
  3. 运行脚本。
  4. 读取输出文件。
  5. 从输出中汇总信息。
当核心难点在于发现、推理、多跳研究或决定下一步搜索内容时,使用Exa Agent而非批量脚本模式。

Failure handling

故障处理

If a run fails to start:
  • Surface the HTTP error and fix schema/auth/input.
  • Do not silently fall back to generic web search for Exa Agent-shaped work.
If the run fails:
  • Explain the failure from the returned terminal status.
  • Create a corrected follow-up/new run only if the correction is clear.
If the run objective/schema is wrong, abort the streaming call. The server will attempt to cancel the upstream run; you will then need to create a new run with the corrected objective/schema.
If output is sparse:
  • Continue with
    previousRunId
    .
  • Add exclusions for prior results.
  • Segment the universe.
  • Tighten or clarify schema fields.
如果任务无法启动:
  • 显示HTTP错误并修正规则/权限/输入。
  • 对于适合Exa Agent的任务,请勿默认回退到通用网页搜索。
如果任务失败:
  • 根据返回的最终状态解释失败原因。
  • 仅当明确知道修正方案时,才创建修正后的跟进/新任务。
如果任务目标/规则错误,需终止流式调用。服务器将尝试取消上游任务;之后你需要使用修正后的目标/规则创建新任务。
如果输出结果稀疏:
  • 使用
    previousRunId
    续跑。
  • 添加已有结果作为排除项。
  • 拆分范围。
  • 收紧或明确规则字段。