Exa Skill
Exa 的核心是 /search,但最容易踩的坑是 type 参数:早期训练语料里常见的 neural/keyword 已经从枚举里消失,现在合法值是 instant/fast/auto/deep-lite/deep/deep-reasoning,传旧值是报错还是静默回退到 auto 仍未验证。文档自己还留了一处矛盾:resolvedSearchType 字段被标注为「废弃,生产环境可能返回空字符串,不要用它做分支判断」,但同一份规范里 POST /search 的示例响应却写着 "resolvedSearchType": "neural"。这份 skill 是基于官方文档和 OpenAPI 规范整理的文档版,尚未用真实 Key 验证过任何一条结论。
安装
选你用的 Agent,复制命令。
npx -y skills add fxp/skillify --skill exa --agent claude-code --yes装到项目的 .claude/skills/;加 -g 装到全局。装完需要你手动执行 /reload-plugins,这一步 Agent 代劳不了。
npx -y skills add fxp/skillify --skill exa --agent codex --yes装到项目的 .agents/skills/;加 -g 装到全局。
npx -y skills add fxp/skillify --skill exa --agent cursor --yes装到项目的 .agents/skills/;加 -g 装到全局。
npx -y skills add fxp/skillify --skill exa --agent opencode --yes装到项目的 .agents/skills/;加 -g 装到全局。
npx -y skills add fxp/skillify --skill exa --agent gemini-cli --yes装到项目的 .agents/skills/;加 -g 装到全局。
npx -y skills add fxp/skillify --skill exa --agent github-copilot --yes装到项目的 .agents/skills/;加 -g 装到全局。
npx -y skills add fxp/skillify --skill exa --agent trae --yes装到项目的 .trae/skills/;加 -g 装到全局。
npx -y skills add fxp/skillify --skill exa --agent windsurf --yes装到项目的 .windsurf/skills/;加 -g 装到全局。
npx -y skills add fxp/skillify --skill exa --agent qwen-code --yes把 --agent 换成你用的 Agent 标识,可以一次写多个。skills CLI 1.5.25 共支持 79 个,例如 qwen-code、kimi-code-cli、trae-cn、qoder、lingma、cline、roo。
或者让 Agent 自己装
读 https://github.com/fxp/skillify/blob/main/skills/exa/prompt.md 并照它执行装对了的标志:references/ 下有 5 份文档。
装好后,可以这样问你的 Agent
这份 Skill 覆盖的典型任务。点一下复制。
5 类能力
每类能力对应一份 reference,Agent 按任务只打开需要的那份。
语义搜索
自然语言查询网页排序结果,六种 type 搜索模式、内容选项、outputSchema 结构化输出与历史快照
取正文与已废弃的相似链接
已知 URL 批量取正文/高亮/摘要、子页面抓取、URL 级失败处理,以及已废弃的 /findSimilar
问答与引用
一步生成带引用的直接答案,支持结构化输出、流式响应与 OpenAI 兼容的 /chat/completions
研究型代理
异步研究任务:建列表、实体富化、多跳核查、接入 Exa Connect 第三方数据源,轮询/SSE/续接/取消/停止
鉴权、错误码与限流
鉴权头写法、两种错误信封结构、HTTP 状态码与错误 tag、按 QPS 计的限流、定价速查
当前事实
整理自官方文档(抓取于 2026-09-21),还没有用真实凭证验证。
| 项 | 值 |
|---|---|
| Base URL | https://api.exa.ai;Websets(/v0/websets/*,39 个 endpoint)是独立产品面,本 skill 未覆盖 |
| 鉴权 | Authorization: Bearer $EXA_API_KEY;规范里 x-api-key 头也声明等价,但所有文档示例代码只用 Bearer |
| 最容易选错 | /search 的 type 不再是 neural/keyword,合法值是 instant/fast/auto/deep-lite/deep/deep-reasoning |
| 限流 | /search//answer 10 QPS(deep 系列 5 QPS)、/contents 100 QPS、/agent/runs 5 QPS 且并发上限 50,起一个 run 按 2 次请求计 |
| 计费速查 | /search $7/1k 次(deep 系列 $12–$15)、/answer $5/1k 次、/contents $1/1k 页;Agent 固定 effort 从 minimal $0.012 到 xhigh $1.00/次 |
照通用经验写容易错的 7 件事
来自官方文档,还没有用真实凭证验证。
- type 参数已经整体换代。训练语料里常见的
neural/keyword已不在枚举里,当前合法值是instant/fast/auto/deep-lite/deep/deep-reasoning,传旧值是报错还是静默回退到auto未经验证。 - /search 和 /contents 的内容选项嵌套位置不同。照抄一个端点的请求体去拼另一个大概率写错:
/search把highlights/text/summary包在contents: {...}里,/contents把它们直接摊平在请求体顶层,和urls/ids平级。 - resolvedSearchType 字段文档自相矛盾。OpenAPI 规范说它是「废弃字段,生产环境可能返回空字符串,不要用它做分支判断」,但同一份规范里
POST /search的示例响应却写着"resolvedSearchType": "neural",两处口径对不上。 - POST /findSimilar 已废弃。这是 Exa 早期最出名的端点,规范标注
deprecated: true,官方建议改用/search把源页面主题写进自然语言 query,但没给出具体的转换算法或示例代码。 - Agent API 的错误结构和其他三个端点不一样。Search/Contents/Answer 是扁平的
{"requestId", "error", "tag"},Agent(/agent/runs)却是嵌套的{"error": {"type", "code", "message"}},复用同一个错误解析函数会在 Agent 响应上读错字段。 - maxAgeHours 不是发布时间过滤器,是缓存新鲜度阈值。省略=优先用缓存、
0=总是抓新鲜页面、-1=只用缓存绝不抓取,正整数 N=缓存新于 N 小时才用;想按发布时间筛选要用startPublishedDate/endPublishedDate,是完全不同的参数。 - 创建 Agent run 默认立即返回,不是等跑完。
POST /agent/runs默认马上给一个status: "queued"的 run 对象,必须轮询GET /agent/runs/{id}或带Accept: text/event-stream才能拿到output.text/output.structured,当成同步接口用会拿到一个空/未完成的 run。