Tavily 搜索配置:3 步登录鉴权,避开密钥硬编码与额度坑

Tavily 搜索是给 AI Agent 接入实时网页检索的 API,可通过 JavaScript、Python 或命令行调用。2026 年 10 月 23 日发布的 Tavily CLI 文档补充了鉴权优先级和退出码说明;现在配置时,应先决定使用账户密钥还是免密钥模式,再把凭据放到正确的位置。

开始前先准备:账户、运行环境和密钥

  1. 注册或登录 Tavily:访问 Tavily 官网,点击右上角 Log in;没有账户时先创建账户。登录后进入 Dashboard,复制一个 API Key。
  2. 准备 Node.js 或 Python 环境:JavaScript 项目安装 @tavily/core,Python 项目安装 tavily-python。官方 Quickstart 给出的安装命令如下;命令执行后没有报错即表示安装完成:
pip install tavily-python
npm i @tavily/core
  1. 确认是否需要付费额度:只想验证调用链路,可以先用 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- 不应找到真实密钥,程序日志也不应打印完整密钥。能完成最小搜索、密钥没有泄露、正式任务不再依赖共享额度,才算配置完成。

官方入口与后续文档

评论区

0 条评论

登录后可评论。

猫仔 14 阅读