Tavily 搜索配置:3 步登录鉴权,避开密钥硬编码与额度坑
Tavily 搜索是给 AI Agent 接入实时网页检索的 API,可通过 JavaScript、Python 或命令行调用。2026 年 10 月 23 日发布的 Tavily CLI 文档补充了鉴权优先级和退出码说明;现在配置时,应先决定使用账户密钥还是免密钥模式,再把凭据放到正确的位置。
开始前先准备:账户、运行环境和密钥
- 注册或登录 Tavily:访问 Tavily 官网,点击右上角 Log in;没有账户时先创建账户。登录后进入 Dashboard,复制一个 API Key。
- 准备 Node.js 或 Python 环境:JavaScript 项目安装
@tavily/core,Python 项目安装tavily-python。官方 Quickstart 给出的安装命令如下;命令执行后没有报错即表示安装完成:
pip install tavily-python
npm i @tavily/core
- 确认是否需要付费额度:只想验证调用链路,可以先用 SDK 的免密钥模式;它有共享速率限制。正式运行前,应在账户页面查看当前额度,不能把“能调用一次”理解为拥有无限搜索额度。
密钥通常以 tvly- 开头。不要把真实密钥提交到 GitHub,也不要写进前端代码、聊天记录或公开日志。
3 步完成登录鉴权和首次搜索
第 1 步:登录后复制 API Key
进入 Tavily 官网并点击 Log in,登录后从 Dashboard 复制一个 API Key。保存时先确认开头是 tvly-,再进行下一步。
Tavily 官方仓库的 JavaScript 示例要求客户端收到 API Key:
const { tavily } = require("@tavily/core");
// Step 1. Instantiating your Tavily client
const tvly = tavily({ apiKey: "tvly-YOUR_API_KEY" });
把 tvly-YOUR_API_KEY 换成刚才复制的真实值。这是开发阶段最直观的填法,但硬编码密钥不适合长期运行。
第 2 步:按运行环境填入密钥
不同运行位置的选择如下:
| 使用方式 | 密钥放在哪里 | 适合场景 | 需要注意 |
|---|---|---|---|
| JavaScript SDK | tavily({ apiKey: "..." }) |
脚本、Node.js Agent | 不要提交真实密钥到仓库 |
| Python SDK | TavilyClient(api_key="...") |
Python Agent、数据处理 | 同样要避免硬编码 |
| 环境变量 | TAVILY_API_KEY |
服务、CI、定时任务 | CLI 文档明确写明:环境变量优先于已保存凭据 |
| Tavily CLI | 登录后保存的账户凭据 | 本地命令行检索 | 可用环境变量覆盖已保存凭据 |
| SDK 免密钥模式 | 不填写 API Key | 临时验证 | search 和 extract 可用,但共享速率有限制 |
这是配置时最容易漏掉的一层:同一台机器上可能同时存在环境变量和 CLI 已保存凭据。根据 Tavily CLI 文档,TAVILY_API_KEY 的优先级更高,因此排查鉴权问题时,应先确认当前进程实际读取到了哪个值。
第 3 步:发出搜索请求并检查结果
JavaScript 项目可直接运行官方仓库给出的调用方式:
const { tavily } = require("@tavily/core");
const tvly = tavily({ apiKey: "tvly-YOUR_API_KEY" });
const response = await tvly.search("Who is Leo Messi?");
console.log(response);
Python 项目的官方写法是:
from tavily import TavilyClient
tavily_client = TavilyClient(api_key="tvly-YOUR_API_KEY")
response = tavily_client.search("Who is Leo Messi?")
print(response)
不想安装 SDK,也可以直接调用 HTTP 接口:
curl -X POST https://api.tavily.com/search
-H "Content-Type: application/json"
-H "Authorization: Bearer tvly-YOUR_API_KEY"
-d '{"query": "Who is Leo Messi?"}'
第一次建议使用普通搜索,不要立即加入复杂参数。先确认鉴权、请求格式和网络链路都正常,再增加 max_results、search_depth 等选项。各参数的准确说明见 Search API Reference。
免密钥模式:能跑通,不代表适合生产
官方 tavily-js 仓库明确说明:当没有传入 apiKey,并且没有设置 TAVILY_API_KEY 时,客户端会进入 keyless mode。此时 search 和 extract 可以使用,但共享同一个速率限制;其他方法会提示需要提供密钥。
免密钥模式的官方示例如下:
const { tavily, TavilyKeylessLimitError } = require("@tavily/core");
// No apiKey — keyless mode
const tvly = tavily();
try {
const response = await tvly.search("Who is Leo Messi?");
console.log(response);
} catch (err) {
if (err instanceof TavilyKeylessLimitError) {
console.log("cap:", err.capType);
console.log("retry after:", err.retryAfter);
console.log("bonus eligible:", err.bonusEligible);
console.log("continuation options:", err.continuationPaths);
} else {
throw err;
}
}
这是教程里最值得单独记住的边界:免密钥模式适合首次体验、教程演示和低频临时查询;一旦进入 Agent 主链路、批处理或定时任务,应改用账户 API Key,否则共享速率限制可能让搜索在运行中断掉。仓库还给出了 search、extract、crawl、map、research 等能力的 JavaScript 接口入口,可继续查看 tavily-js 官方仓库。
常见鉴权卡点:按报错处理
报 TavilyKeylessLimitError
这表示免密钥模式碰到了共享速率上限,不是 API Key 填错。处理方式是读取异常中的 retryAfter,在允许的时间后重试;需要持续或高频调用时,创建账户并复制 Dashboard 中的 API Key。
CLI 退出码为 3
Tavily CLI 文档 对退出码的定义是:2 表示输入或用法错误,例如缺少必填参数;3 表示鉴权错误,包括没有找到 API Key 或登录失败;4 表示 API 错误,例如触发速率限制、请求无效或服务器错误。
因此,遇到退出码 3 时,不要先改搜索关键词。重新登录 Tavily,确认账户可用,再检查 TAVILY_API_KEY 是否存在以及是否拼写完整。若使用 CLI 已保存凭据,也要确认没有把无效的环境变量覆盖到正确凭据上——这是因为环境变量优先级更高。
SDK 能初始化,但请求返回鉴权失败
先核对三处:传入 SDK 的 apiKey 或 api_key 是否是同一个账户生成的完整密钥;密钥前后是否带有空格、换行或引号;当前环境变量是否覆盖了原本正确的配置。修正后重新执行同一个最小请求,不要同时修改 SDK 版本、请求参数和搜索内容,否则无法判断是哪一步恢复了调用。
接口能返回内容,但 Agent 仍引用旧信息
这不是登录失败,而是搜索结果已经返回,但模型没有使用返回内容。检查 Agent 的工具配置是否真的把 Tavily 结果接入上下文,并在提示词中要求引用检索结果。官方 Extract API 文档 还可用于从指定网页提取干净内容,但接入顺序应先保证 search 鉴权正常。
怎么算配置成功
用最小请求验收,不要只看控制台有没有报错:
- JavaScript:运行
console.log(response)后,应输出响应对象,而不是TavilyKeylessLimitError或鉴权异常。 - Python:运行
print(response)后,应输出响应对象。 - HTTP:用
curl请求后,应收到搜索接口的 JSON 响应,而不是 HTTP 鉴权错误。 - CLI:命令结束后不应返回退出码
3;如果是限流或请求问题,则应落在文档定义的4类错误。
随后再检查一项安全结果:源码仓库中搜索 tvly- 不应找到真实密钥,程序日志也不应打印完整密钥。能完成最小搜索、密钥没有泄露、正式任务不再依赖共享额度,才算配置完成。
官方入口与后续文档
- Tavily 官网:登录、创建账户和获取 Dashboard API Key。
- Quickstart:Python、JavaScript 与 HTTP 的首次调用示例。
- tavily-js 官方仓库:SDK 完整示例、免密钥模式及异常处理。
- Tavily CLI 文档:凭据优先级、环境变量和退出码说明。
- API 文档首页:继续配置 Search、Extract、Crawl、Map 和 Research。
评论区
登录后可评论。