关于 build-with-exa
build-with-exa 是指导如何使用 Exa 检索 API 与 SDK 的开发技能,适用于构建网页搜索、内容提取和研究流程。它涵盖从即时检索到异步多步骤研究的接口选择。
主要功能
- 01搜索、内容提取与答案 API 指南
- 02Agent API 多步骤研究流程
- 03Monitors 定期搜索与 Webhook
- 04Exa Snapshot 历史内容检索
- 05Python 与 TypeScript SDK 指南
适用场景
- 01为 Agent 添加网页检索与内容提取
- 02根据页面内容生成结构化结果
- 03异步构建和丰富研究列表
- 04按计划执行搜索并通过 Webhook 接收结果
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ exa-labs/ agent-skills --skill build-with-exa安装后在 Claude Code 中输入/build-with-exa确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
references/agent.mdanswer.mdcommon-mistakes.mdcontents.mdhttp-requests.mdmigrate-websets-to-agent.mdmodels-and-modes.mdmonitors.mdopenai-compat.mdprompting-and-patterns.mdsdks.mdsearch.mdsnapshot.md详细介绍
使用 Exa 构建
范围
默认包含:
- 核心检索 API:搜索端点、内容端点、答案端点
- 长时间运行的研究工作流:Agent API(
/agent) - 异步和定期工作流:Monitors API
- 旧版功能:Websets API(仅用于现有集成;新的集合构建工作使用 Agent API)
- 历史内容:Exa Snapshot(搜索和内容端点上的
snapshotAsOf) - SDK 指南:Python
exa-py、TypeScriptexa-js
数据保留说明:
/search、/contents、/answer和/agent支持零数据保留(ZDR)。Websets 和 Monitors API(/monitors)不支持 ZDR。如果用例要求 ZDR,请使用支持 ZDR 的功能,或联系 Exa。
安装
# Python
pip install exa-py
# TypeScript / JavaScript
npm install exa-js
使用包管理器安装最新 SDK 版本,以确保解析到最新版本并使用所有 SDK 功能。
身份验证
export EXA_API_KEY="your_api_key_here"
Exa 接受 x-api-key 标头或 Authorization: Bearer <key>。
推荐的 Exa 搜索请求只包含查询和令牌高效的内容提取,不包含其他内容。内容提取是一项建议,而非服务器默认行为:省略 contents 时,结果仅包含元数据(标题、URL、日期),不包含页面内容。
{
"query": "latest developments in LLMs",
"type": "auto",
"contents": { "highlights": true }
}
其他每个请求字段都需要按需启用:只有当用户的任务明确要求时,才添加该字段。 不要重复声明服务器默认值,也不要因为某些控制项看起来可能有用就添加它们。具体来说:
type默认为auto;可以显式指定type: "auto",但除非任务有要求(例如对延迟敏感的 UX 或深度综合),否则不要发送其他模式。numResults默认为 10;除非任务要求不同的结果数量,否则省略numResults。只有在明确的产品决策下才设置该字段,不要将其作为样板配置。- 省略
category。只有当用户明确要求按类别限制检索时才使用它。 - 只有当用户明确要求设置硬性允许列表或阻止列表,并提供或批准其内容时,才设置
includeDomains和excludeDomains。应通过查询措辞或systemPrompt表达来源偏好。 - 只有当提取的页面内容必须是最新内容时,才设置
maxAgeHours。它会在实时抓取前限制缓存时长;它不是发布日期过滤器。 - 对于“近期新闻”任务,应在查询中注明时效要求(“最新”“近期”)。
startPublishedDate/endPublishedDate是硬性过滤条件,会排除未标注日期和日期不准确的页面;只有当任务要求强制限定时间范围(“过去七天内”“于 2026 年发布”)时才添加。不要随意使用maxAgeHours。 - 除非另有说明,所有任务默认都应将
highlights设为true。除非任务明确要求限制预算,否则不要添加maxCharacters或其他摘要选项。
API 工作流选择
选择端点前,先确定适合的工作流形式:
- 为自己的大模型或 Agent 获取原始网页内容:使用
/search,并采用上面的推荐请求 - 需要特定输出格式,或需要从页面中提取或综合字段:使用
/search并添加outputSchema(如果需要行为指导,也添加systemPrompt)。用户不必明确说“JSON”或“schema”;“每篇文章报道的融资金额”、“每个人的姓名、头衔和公司”,或结果必须包含但元数据有时才会提供的字段(例如必需的作者)都属于结构化输出请求。每条结果本来就包含的字段(标题、URL、发布日期)则不属于:“10 篇包含标题和 URL 的文章”是使用numResults的推荐请求。紧凑的 schema(每篇文章的作者和 URL)使用auto;如果 schema 较宽,或其字段需要多次搜索才能填充,则使用type: "deep",因为它会运行多次搜索。参见references/search.md中的结构化输出。 - 需要长时间运行的多步骤研究、列表构建或结构化输出的丰富处理:使用 Agent API(
/agent),其字段遵循相同的outputSchema规则
默认使用搜索端点。 对于大多数新的集成,请使用搜索端点(/search),只有当任务形式明显需要时,才改用更专业的 Exa 接口。
- 需要通用语义网页检索、综合输出或从搜索结果中提取内容:使用搜索端点(
/search) - 已知 URL,需要提取清晰的页面内容或控制内容时效性:使用内容端点(
/contents) - 需要查找与已知种子 URL 相关的页面:使用搜索端点(
/search),并根据页面内容构造查询(例如标题、主题或/contents中的文本) - 需要带引用的可靠答案,且不使用自己的大模型生成内容:使用答案端点(
/answer)。如果产品已有聊天大模型,则将/search作为工具提供给它。 - 需要从代码仓库、文档和 Stack Overflow 中进行代码检索:使用搜索端点(
/search) - 需要与 OpenAI SDK 即插即用地兼容聊天或响应客户端:使用 OpenAI 兼容端点(
/chat/completions、/responses) - 需要异步多步骤研究、列表构建、丰富处理,或针对先前研究进行后续提问:使用 Agent API(
/agent) - 需要通过 webhook 定时执行重复搜索:使用 Monitors API(
/monitors) - 维护现有的 Websets 集成:参见迁移指南(
references/migrate-websets-to-agent.md),并迁移至 Agent API(references/agent.md)。新项目不要使用 Websets;请改用 Agent API。 - 需要获取某个过去时间点的页面内容(用于回测 Agent、可复现评估、比较文档、定价页面、政策或申报文件的早期版本):使用 Exa Snapshot,即
/contents(顶层)或/search(在contents内)中的snapshotAsOf字段。参见references/snapshot.md。
快速开始
更多示例请参见下表中的相关参考文件。
Python(/search):
from exa_py import Exa
exa = Exa(api_key="YOUR_EXA_API_KEY")
result = exa.search(
"latest developments in LLMs",
type="auto",
contents={"highlights": True}
)
for item in result.results:
print(item.title, item.url)
TypeScript(/search):
import Exa from "exa-js";
const exa = new Exa();
const result = await exa.search("latest developments in LLMs", {
type: "auto",
contents: { highlights: true }
});
for (const item of result.results) {
console.log(item.title, item.url);
}
原始 HTTP(/search):
curl -X POST "https://api.exa.ai/search" \
-H "Content-Type: application/json" \
-H "x-api-key: $EXA_API_KEY" \
-d '{
"query": "latest developments in LLMs",
"type": "auto",
"contents": {
"highlights": true
}
}'
关键注意事项
- 不要无故修饰推荐请求。添加
category、域名筛选条件、模板化的numResults或时效性控制,是最常见的集成错误。 - 不要用单纯搜索来回答信息提取请求。必须从页面中提取的字段,或用户要求每条结果都包含的元数据字段,应放在
outputSchema中;保留或剔除规则应放在systemPrompt中;query仅表示检索意图。如果查询中的某个条款包含only、include、exclude、drop或return,说明它放错了字段。对于每条结果都已包含的字段(标题、URL、发布日期),不要添加outputSchema。 - 在搜索端点中,
text、highlights和summary应放在contents内,而不是顶层。 - 在内容端点中,
text、highlights和summary是顶层字段,不应嵌套在contents内。 - 在
highlights、text或summary中任选一个,不要叠加使用。summary仅适用于用户明确要求由 Exa 对每条结果进行综合摘要的情况。 - 几乎所有任务都应使用简单的
highlights: true。numSentences和highlightsPerUrl已弃用;只有在明确要求字符数预算时,才使用maxCharacters。 - 构建列表和信息补充工作流应使用 Agent API(
/agent),而不是在/search中使用category: "people"或category: "company"。这些类别仅用于检索原始人物或公司文档。 maxAgeHours控制抓取/缓存的新鲜度(提取的页面内容在实时抓取前可以有多旧),不控制发布日期的新近程度。不要将它用作“近期结果”控制项;新近程度应通过查询措辞表达。startPublishedDate/endPublishedDate用于任务明确规定且必须强制执行的时间范围(如“过去七天”“在 2026 年”),而不是单独用于“近期”或“最新”。- 切勿臆造
github、documentation、qa或pdf等类别值。如果用户确实要求按类别限制检索,请先查看搜索参考:people和company等专用类别会限制哪些筛选条件有效。 - OpenAI 兼容端点适用于优先考虑兼容性的用例。对于希望请求语义更清晰的新集成,优先使用 Exa 原生端点。
- 不要将
/agent视为/search的直接替代品。它的延迟更高且采用异步模式,因此只有当工作流形态确实适合时才使用,并参阅专门的 Agent 文档。对于新的集合构建工作,优先使用它而非 Websets。 - Agent 请求应始终显式设置
effort;通过轮询或 SSE 等待终止状态,并在读取output前检查运行结果;在产品中适用时,应展示output.grounding。 - 将
/findSimilar视为已弃用。对于相关页面发现,优先使用/search(可选在种子 URL 上先调用/contents)。
参考文件
| 文件 | 主题 |
|---|---|
| references/search.md | 搜索端点的请求/响应结构、搜索类型、筛选条件、嵌套内容、结构化输出 |
| references/contents.md | Contents 端点的提取、时效性、状态、顶层内容字段 |
| references/snapshot.md | Exa Snapshot:snapshotAsOf 在 /contents 和 /search 上用于获取历史页面版本、限制、快照与时效性 |
| references/answer.md | 带引用和结构化输出的有依据回答生成 |
| references/agent.md | 用于异步多步骤研究、信息补充、结构化输出、轮询和事件的 Agent API |
| references/openai-compat.md | 兼容 OpenAI 的端点、模型路由、extra_body 用法 |
| references/monitors.md | 用于定期计划搜索的独立 Monitors API |
| references/migrate-websets-to-agent.md | 将 Websets 迁移到 Agent API:调用点分类、请求映射、交付重写、验证 |
| references/sdks.md | Python 和 TypeScript SDK 的命名、方法及结构差异 |
| references/http-requests.md | Exa 主要功能的最简原始 HTTP 示例 |
| references/models-and-modes.md | 搜索类型选择、回答/研究模型路由、延迟权衡 |
| references/prompting-and-patterns.md | 经久适用的查询、提示词、时效性和输出模式 |
| references/common-mistakes.md | 过度指定和参数结构修正 |
权威文档
- 文档主页:
https://exa.ai/docs - 文档索引:
https://exa.ai/docs/llms.txt - 搜索参考:
https://exa.ai/docs/reference/search - Agent API 指南:
https://exa.ai/docs/agent/quickstart - Exa Snapshot:
https://exa.ai/docs/search/snapshot - Exa Connect 概览:
https://exa.ai/docs/agent/connect/quickstart - Python SDK 规范:
https://exa.ai/docs/sdks/quickstart - TypeScript SDK 规范:
https://exa.ai/docs/sdks/quickstart
评论
支持 Markdown