OpenClaw配置Tavily 搜索 Skill 完整指南教程

Written by

in

文章目录
  • 项目 配置 服务器 阿里云 ECS OpenClaw 版本 2026.3.8 AI 模型 dashscope/kimi-k2.5(默认)、custom-api123-icu/claude-sonnet-4-6(备用) 前端渠道 飞书自建 Agent(多多助理) 子 Agent researcher、coder、writer、trader 已有搜索 SearXNG + Jina Reader(主力)、Bocha(替补,600+ 次余额)
  • ⚠️ 关于安装方式的选择:部分文档提到可以用 openclaw mcp add 命令通过 MCP 方式安装,但经实测 OpenClaw 2026.3.8 不支持 mcp 子命令。因此我们使用 Skill 安装方式,这是当前版本完全支持的标准方法。
  • 安装 Tavily 后,需要告诉 Agent 搜索的优先级。
  •  🚨 这是本文最重要的一节。如果你也在国内服务器上用 OpenClaw,很可能会遇到同样的问题。
  • Tavily 免费额度为 1000 次/月,建议定期检查用量: 登录 app.tavily.com 查看 Dashboard 中的用量统计 如果日均搜索 > 30 次,可能月底会用完,届时自动降级到 SearXNG
  • 用户在飞书发消息:“帮我搜一下…” ↓ Agent(kimi-k2.5 / sonnet4.6)分析意图 ↓ 内置 web_search(Brave) ❌ fetch failed(国内被墙) ↓ 自动降级 ┌──────────────┬──────────────┬──────────────┬──────────────┐ │ SearXNG ⭐主力 │ Jina Reader │ TuShare │ Bocha 应急 │ │ 搜索兜底 │ 网页阅读 │ 股票/行情 │ 最后手段 │ │ Docker 本地 │ 云端 API │ Python API │ 600+次余额 │ ├──────────────┼──────────────┼──────────────┼──────────────┤ │ localhost │ r.jina.ai │ api.waditu │ api.bocha │ │ :8080/search │ │ .com │ .ai │ ├──────────────┼──────────────┼──────────────┼──────────────┤ │ 免费无限次 │ Markdown │ 股票数据 │ 有限额度 │ │ 质量良好 │ 需指定 URL │ 需指定代码 │ 仅应急使用 │ └──────────────┴──────────────┴──────────────┴──────────────┘ ↓ Agent 整理信息,回复用户 ⭐ Tavily Skill 已安装且 API Key 已配置,但因内置工具优先级问题未被 Agent 调用 ⭐ 等 OpenClaw 支持 MCP 后可一键升级 定时推送(crontab)独立通道: crontab → a-stock-daily-push.py → Bocha + 财联社 → AI 总结 → 飞书
  • 以下是实际安装过程中遇到的问题及解决方案,供后续参考: 序号 问题 原因 解决方案 1 openclaw mcp add 报错 No such file or directory OpenClaw 2026.3.8 不支持 mcp 子命令,官方文档和第三方教程针对的是更新版本 改用 Skill 安装方式,放弃 MCP 2 npx clawhub@latest install tavily-search 失败:No matching version found for undici@^7.24.0 clawhub@0.8.0 依赖的 undici@^7.24.0 在淘宝等国内 npm 镜像源上未同步,官方源已有 指定官方 registry:npm_config_registry=https://registry.npmjs.org npx clawhub@latest install tavily-search。如仍失败再手动安装 Skill 3 Node.js 版本过低 服务器预装的 Node 版本较老 npm install -g n && n lts 升级到 v24 4 curl 从 GitHub 下载卡住 / 文件为空 国内服务器 raw.githubusercontent.com 被 GFW 屏蔽 手动用 cat << 'EOF' 创建文件内容 5 Tavily API 是否也被墙? 不会——GitHub 是被 GFW 针对性屏蔽,Tavily 是商业 API 服务,不在封锁名单 用 curl -s -o /dev/null -w "%{http_code}" <https://api.tavily.com/search> 验证,返回 401 即网络通 6 Gateway 环境变量中找不到 TAVILY_API_KEY 写入 openclaw.json 后未同步配置 openclaw gateway install –force && openclaw gateway restart 7 Agent 指定用 Tavily 搜索但仍用 SearXNG AGENTS.md 中明确写死了「优先使用 SearXNG」 修改 AGENTS.md 搜索工具段落 + 子 Agent 描述(共 4 处) 8 bash 语法错误:syntax error near unexpected token 'newline' 从指南复制命令时把注释行的 > 当作命令执行了 注释行不要以 > 开头,或分开复制 9 AGENTS.md 中工具名 tavily_search 与 Skill 注册名 tavily 不匹配 SKILL.md 的 name: tavily,但 AGENTS.md 写的是 tavily_search,Agent 找不到对应工具 sed -i 's/tavily_search/tavily/g' ~/.openclaw/workspace/AGENTS.md 统一改为 tavily 10 🔴 根因:Agent 调用内置 web_search 而非 Skill 脚本 Agent 搜索时走的是 OpenClaw 内置 web_search 工具(后端为 Brave Search,国内被墙),不是 Skill 目录下的脚本。日志报错:[tools] web_search failed: fetch failed 详见第七节「核心问题分析」。当前无解,等 MCP 支持后可解决 11 tools.web_search 配置验证报错 尝试在 openclaw.json 的 tools 节加入 "web_search": {"provider": "tavily"},但 OpenClaw 2026.3.8 的 tools 配置不支持 web_search key 报错:tools: Unrecognized key: "web_search"。用 openclaw doctor –fix 或手动删除该 key 恢复 12 ClawHub 搜索 tavily-search 报 Skill not found ClawHub 上没有叫 tavily-search 的 Skill,实际名称是 openclaw-tavily-search 先用 npx clawhub@latest search tavily 搜索,再用实际名称安装 13 gateway install –force && restart 与 stop + start 的区别 改了 openclaw.json 后只 stop + start 不会同步配置到 systemd 改了配置必须用 openclaw gateway install –force && openclaw gateway restart,没改配置可以只 restart
  • 以下是经实测推荐的 Skill,均可通过 npm_config_registry=https://registry.npmjs.org npx clawhub@latest install <skill名> 安装: Skill 功能 安装建议 说明 🔎 find-skills Skill 发现与安装 ⭐ 强烈推荐 让 Agent 能自动搜索和安装新 Skill,相当于“应用商店”入口 🌤️ weather 天气查询 ✅ 推荐 通过 wttr.in 或 Open-Meteo 获取天气,无需 API Key,开箱即用 📝 summarize 内容总结 ✅ 推荐 快速总结网页、文档、PDF、视频字幕等,与 Jina Reader 互补 🛡️ skill-vetter Skill 安全审计 ⚠️ 可选 审查新安装 Skill 的安全性,如果频繁通过 find-skills 自动安装则建议开启 🧠 self-improving-agent 自我优化引擎 ❌ 暂不推荐 会自动修改 AGENTS.md 等配置文件,可能与手动调优的配置冲突。建议等基础稳定后再装 到此这篇关于OpenClaw配置Tavily 搜索 Skill 完整指南教程的文章就介绍到这了,更多相关OpenClaw Tavily 搜索 Skill内容请搜索风君子博客以前的文章或继续浏览下面的相关文章,希望大家以后多多支持风君子博客!
  • 目录
    • 一、环境背景
    • 二、为什么要加 Tavily?
      • 2.1 Tavily vs SearXNG + Jina Reader 对比
      • 2.2 升级后的三层搜索架构
    • 三、获取 Tavily API Key
      • 3.1 注册账号
      • 3.2 获取 API Key
    • 四、安装 Tavily Search Skill
      • 4.1 方式一:ClawHub 安装(推荐)
      • 4.2 方式二:手动安装(备用)
      • 4.2 手动安装步骤
      • 4.3 验证安装
      • 4.4 Skill 提供的能力
    • 五、安全配置 API Key
      • 5.1 写入 openclaw.json
      • 5.2 同步配置并重启 Gateway
      • 5.3 安全检查清单
    • 六、配置搜索优先级
      • 6.1 修改AGENTS.md
      • 6.2 降级效果验证
      • 6.3 子 Agent 搜索配置建议
    • 七、核心问题分析:Tavily 为什么装了还是不能用?
      • 7.1 现象
      • 7.2 排查过程
      • 7.3 根因
      • 7.4 尝试过的修复方案(均失败)
      • 7.5 当前可行方案
      • 7.6 未来升级路径
    • 八、验证测试
      • 7.1 基础搜索测试
      • 7.2 对比测试
      • 7.3 Tavily + Jina 组合测试
    • 八、额度监控
      • 额度优化建议
    • 九、故障排查
      • 常见问题
      • 手动测试 API
    • 十一、实际搜索架构图(反映真实现状)
      • 附录:踩坑记录
        • 附录:推荐安装的 Skill

          💡 本文记录为 OpenClaw 2026.3.8 + 飞书 Agent 添加 Tavily 搜索能力的完整过程,包括安装方式、安全配置、搜索优先级调整,以及踩过的所有坑和最终结论

          ⚠️ 重要结论(先说结果)

          经过完整的安装、配置和调试,最终结论是:Tavily Skill 可以成功安装且 API 完全可用,但 OpenClaw 2026.3.8 的 Agent 不会主动调用 Skill 脚本进行搜索

          根本原因:Agent 搜索时调用的是 OpenClaw 内置的 web_search 工具(后端为 Brave Search,在国内被墙),而不是用户安装的 Skill 脚本。当内置搜索失败后,Agent 会降级到 SearXNG Skill,但不会降级到 Tavily Skill

          当前可行方案:SearXNG 作为搜索主力,效果良好。Tavily API Key 已就位,等 OpenClaw 后续版本支持 MCP(openclaw mcp add)后可一键接入。

          本文的价值:即使 Tavily 暂时无法作为 Agent 搜索工具使用,本文记录的 Skill 安装流程、API Key 配置方法、AGENTS.md 修改策略、npm 国内镜像踩坑解决方案等内容,对 OpenClaw 用户仍有重要参考价值。

          项目 配置
          服务器 阿里云 ECS
          OpenClaw 版本 2026.3.8
          AI 模型 dashscope/kimi-k2.5(默认)、custom-api123-icu/claude-sonnet-4-6(备用)
          前端渠道 飞书自建 Agent(多多助理)
          子 Agent researcher、coder、writer、trader
          已有搜索 SearXNG + Jina Reader(主力)、Bocha(替补,600+ 次余额)

          维度 SearXNG + Jina Reader Tavily
          返回格式 链接列表 → 需 Jina 二次抓取 结构化摘要 + 关键信息,直接可用
          Agent 集成 两个 Skill 配合(搜索 + 阅读) 原生为 AI Agent 设计,一步到位
          信息密度 低,需要多步处理 高,预处理过的结果
          响应速度 SearXNG ~1s + Jina ~15s ≈ 16s 快速(已预处理)
          稳定性 依赖本地 Docker + 第三方引擎 云端 API,稳定性好
          费用 完全免费 免费 1000 次/月
          本地资源 占用 Docker + Redis 内存 零本地资源消耗

          优先级 1:Tavily       → 高质量结构化结果,1000 次/月,日常主力
          优先级 2:SearXNG + Jina → 免费无限次,兜底 / 批量搜索场景
          优先级 3:Bocha         → 600+ 次余额,应急备用

          1. 访问 app.tavily.com
          2. 注册账号(支持 Google / GitHub 登录)
          3. 无需信用卡,免费计划(Researcher)即包含 1000 次/月 额度

          1. 登录后进入 Dashboard
          2. 复制你的 API Key(格式类似 tvly-xxxxxxxxxxxxxxxx
          3. 妥善保存,后面要用

          ⚠️ 关于安装方式的选择:部分文档提到可以用 openclaw mcp add 命令通过 MCP 方式安装,但经实测 OpenClaw 2026.3.8 不支持 mcp 子命令。因此我们使用 Skill 安装方式,这是当前版本完全支持的标准方法。

          ClawHub 是 OpenClaw 的官方 Skill 市场,类似 npm 之于 Node.js。

           ⚠️ 国内服务器踩坑:直接运行 npx clawhub@latest install 会使用国内 npm 镜像源(如淘宝镜像),但 clawhub@0.8.0 依赖的 undici@^7.24.0 在国内镜像上未同步,会报错:

          npm error notarget No matching version found for undici@^7.24.0

          解决方案:在命令前加 npm_config_registry=https://registry.npmjs.org 前缀,强制使用官方 npm 源。这是所有国内 OpenClaw 用户安装 Skill 时都可能遇到的问题。

          第一步:搜索可用的 Tavily Skill

          npm_config_registry=https://registry.npmjs.org npx clawhub@latest search tavily

          搜索结果会显示多个 Skill,排名靠前的几个:

          openclaw-tavily-search  Tavily 搜索  (3.707)
          tavily-tool             Tavily       (3.603)
          liang-tavily-search     Tavily Search (3.522)
          tavily-web-search-for-openclaw  Tavily Web Search Skill for OpenClaw 🦀  (3.505)

          第二步:安装排名第一的 Skill

          npm_config_registry=https://registry.npmjs.org npx clawhub@latest install openclaw-tavily-search

           💡 注意:搜索结果中没有叫 tavily-search 的 Skill(这个名字会报 Skill not found),要用实际搜索到的名字。

          第三步:确认安装成功

          openclaw skills list | grep -i tavily
          # 预期输出:
          # ✓ ready │ 📦 tavily-search │ Web search via Tavily API (alternative to Brave)...

          正式版的描述很关键:"alternative to Brave"——说明它是专门设计来在 Brave 搜索不可用时作为替代方案的。

          如果 ClawHub 安装失败,可以手动创建 Skill——OpenClaw 的 Skill 本质上就是 SKILL.md + 脚本文件,放到正确目录即可。

          第一步:下载 SKILL.md

          mkdir -p ~/.openclaw/skills/tavily-search/scripts
          # 从 GitHub 下载(如果你的服务器能访问 GitHub)
          curl -sL <https://raw.githubusercontent.com/openclaw/skills/main/skills/arun-8687/tavily-search/SKILL.md> \
            -o ~/.openclaw/skills/tavily-search/SKILL.md
          # 确认下载成功
          cat ~/.openclaw/skills/tavily-search/SKILL.md | head -20

          国内服务器注意raw.githubusercontent.com 经常被 GFW 屏蔽。如果 curl 卡住超过 30 秒无响应,按 Ctrl+C 取消,改用下面的手动创建方式。

          如果 GitHub 被墙,手动创建 SKILL.md:

          cat > ~/.openclaw/skills/tavily-search/SKILL.md << 'EOF'
          ---
          name: tavily
          description: AI-optimized web search via Tavily API. Returns concise, relevant results for AI agents.
          homepage: <https://tavily.com>
          metadata: {"clawdbot":{"emoji":"🔍","requires":{"bins":["node"],"env":["TAVILY_API_KEY"]},"primaryEnv":"TAVILY_API_KEY"}}
          ---
          # Tavily Search
          AI-optimized web search using Tavily API. Designed for AI agents - returns clean, relevant content.
          ## Search
          `bash
          node {baseDir}/scripts/search.mjs "query"
          node {baseDir}/scripts/search.mjs "query" -n 10
          node {baseDir}/scripts/search.mjs "query" --deep
          node {baseDir}/scripts/search.mjs "query" --topic news
          `
          EOF

          第二步:创建搜索脚本 search.mjs

          GitHub 被墙时无法下载原版脚本,直接手写一个功能等价的版本:

          cat > ~/.openclaw/skills/tavily-search/scripts/search.mjs << 'EOF'
          #!/usr/bin/env node
          import https from "https";
          const API_KEY = process.env.TAVILY_API_KEY;
          if (!API_KEY) {
            console.error("Error: TAVILY_API_KEY environment variable is not set.");
            process.exit(1);
          }
          const args = process.argv.slice(2);
          let query = "";
          let maxResults = 5;
          let searchDepth = "basic";
          let topic = "general";
          for (let i = 0; i < args.length; i++) {
            if (args[i] === "-n" && args[i + 1]) { maxResults = parseInt(args[i + 1]); i++; }
            else if (args[i] === "--deep") { searchDepth = "advanced"; }
            else if (args[i] === "--topic" && args[i + 1]) { topic = args[i + 1]; i++; }
            else if (!args[i].startsWith("-")) { query = args[i]; }
          }
          if (!query) {
            console.error("Usage: node search.mjs \"query\" [-n count] [--deep] [--topic news|general|finance]");
            process.exit(1);
          }
          const payload = JSON.stringify({
            api_key: API_KEY,
            query,
            max_results: maxResults,
            search_depth: searchDepth,
            topic,
            include_answer: true
          });
          const req = https.request("<https://api.tavily.com/search>", {
            method: "POST",
            headers: { "Content-Type": "application/json", "Content-Length": Buffer.byteLength(payload) }
          }, (res) => {
            let data = "";
            res.on("data", (chunk) => data += chunk);
            res.on("end", () => {
              try {
                const result = JSON.parse(data);
                if (result.answer) {
                  console.log("## Answer\n");
                  console.log(result.answer + "\n");
                }
                if (result.results && result.results.length > 0) {
                  console.log("## Sources\n");
                  result.results.forEach((r, i) => {
                    console.log(`${i + 1}. **${r.title}**`);
                    console.log(`   URL: ${r.url}`);
                    if (r.content) console.log(`   ${r.content.slice(0, 200)}...`);
                    console.log();
                  });
                }
              } catch (e) {
                console.error("Failed to parse response:", data);
              }
            });
          });
          req.on("error", (e) => console.error("Request failed:", e.message));
          req.write(payload);
          req.end();
          EOF

          # 检查目录结构(应有 2 个文件)
          find ~/.openclaw/skills/tavily-search/ -type f
          # 预期输出:
          # /root/.openclaw/skills/tavily-search/SKILL.md
          # /root/.openclaw/skills/tavily-search/scripts/search.mjs
          # 用 openclaw 内置命令确认 Skill 已识别
          openclaw skills list | grep -i tavily
          # 预期输出包含:✓ ready │ 📦 tavily

          安装后 Agent 理论上将获得 Tavily 搜索工具,支持:

          • AI 优化的结构化搜索结果——直接返回摘要和关键信息,Agent 可直接使用
          • 域名过滤——可指定只搜索特定网站
          • 新闻/财经等主题搜索——适合 trader 子 Agent
          • 时间范围过滤——只搜索最近的内容

           🔴 但实际上,Agent 不会主动调用它。 关于这个问题的详细分析,请看下面的「第七节:核心问题分析」。

          💡 网页提取能力怎么办? Tavily 的 extract/crawl/research 等高级功能需要 MCP 方式才能使用,当前版本不支持。不过已经有 Jina Reader 做网页内容提取,继续用它即可。等 OpenClaw 后续版本支持 mcp 命令后,可以再升级到 MCP 方式。

          不要把 Key 放在 .bashrc 里! OpenClaw Gateway 不会读取 .bashrc(你之前踩过这个坑)。

          # 方法一:用 Python 脚本安全写入(推荐)
          python3 << 'PATCH'
          import json, shutil
          API_KEY = "tvly-你的实际Key"  # ← 替换为你的 Tavily API Key
          filepath = "/root/.openclaw/openclaw.json"
          # 备份
          shutil.copy2(filepath, filepath + ".bak.pre-tavily")
          print(f"已备份到 {filepath}.bak.pre-tavily")
          with open(filepath, "r", encoding="utf-8") as f:
              config = json.load(f)
          if "env" not in config:
              config["env"] = {}
          if "TAVILY_API_KEY" in config["env"]:
              print("TAVILY_API_KEY 已存在,跳过")
          else:
              config["env"]["TAVILY_API_KEY"] = API_KEY
              with open(filepath, "w", encoding="utf-8") as f:
                  json.dump(config, f, ensure_ascii=False, indent=2)
              print("✅ 已将 TAVILY_API_KEY 写入 openclaw.json")
          print("\n当前 env 节的 key 列表:")
          for key in config["env"]:
              print(f"  - {key}")
          PATCH

          # 同步到 systemd(必须!否则新配置不生效)
          openclaw gateway install --force
          # 重启 Gateway
          openclaw gateway restart
          # 等待启动后验证
          sleep 5
          cat /proc/$(pgrep -f openclaw-gateway)/environ | tr '\0' '\n' | grep -i tavily | sed 's/=.*/=******/'

          应输出:

          TAVILY_API_KEY=******

          • [ ] API Key 未硬编码在任何脚本中
          • [ ] openclaw.json 权限为 600chmod 600 ~/.openclaw/openclaw.json
          • [ ] .bashrc没有 TAVILY 相关明文 Token
          • [ ] MCP URL 中的 Key 只存在于 OpenClaw 内部配置

          安装 Tavily 后,需要告诉 Agent 搜索的优先级。

          以下 Python 脚本一次性完成所有搜索相关配置的修改:

          修改一:替换「搜索工具」段落为完整降级策略

          python3 << 'PATCH'
          filepath = "/root/.openclaw/workspace/AGENTS.md"
          with open(filepath, "r", encoding="utf-8") as f:
              content = f.read()
          old_block = """## 搜索工具
          - ✅ 优先使用 **SearXNG**(<http://localhost:8080>)进行网络搜索,免费无限额
          - ✅ 网页全文阅读使用 **Jina Reader**(r.jina.ai)
          - ❌ **禁止使用 bocha-web-search**(已弃用,额度有限)
          - 搜索失败时,尝试使用 Jina Reader 直接读取目标网站
          - 搜索结果要标注来源 URL 和时间"""
          new_block = """## 搜索工具与降级策略
          ### 搜索优先级
          - ✅ **首选 Tavily**(tavily_search):AI 优化的结构化搜索结果,每月 1000 次免费额度
          - ✅ **备用 SearXNG**(<http://localhost:8080>):免费无限额,Tavily 不可用时自动切换
          - ✅ 网页全文阅读使用 **Jina Reader**(r.jina.ai)
          - ⚠️ **Bocha**(bocha-web-search):仅在 Tavily 和 SearXNG 都失败时作为最后手段
          - 搜索结果要标注来源 URL 和时间
          ### 自动降级规则(重要!必须严格遵守)
          1. 搜索时**优先调用 tavily_search**
          2. 如果 Tavily 返回错误(429 额度耗尽、超时、网络错误等),**立即改用 SearXNG 重新搜索同一 query**,不要停下来告诉用户搜索失败
          3. 如果 SearXNG 也失败,尝试用 Jina Reader 直接读取目标 URL
          4. 如果 Bocha 可用且前面的都失败了,使用 Bocha 作为最后手段
          5. **只有所有搜索方式都失败时,才告知用户搜索遇到问题**
          6. 降级时在回复末尾简要注明实际使用的搜索工具(如"数据来源:Tavily"或"数据来源:SearXNG(Tavily 暂不可用)")"""
          if old_block in content:
              content = content.replace(old_block, new_block)
              with open(filepath, "w", encoding="utf-8") as f:
                  f.write(content)
              print("✅ 搜索工具段落已替换(含降级策略)")
          else:
              print("❌ 未找到匹配的旧内容,可能已修改过")
          PATCH

          修改二:更新子 Agent 描述和搜索规则(3 处)

          python3 << 'PATCH2'
          filepath = "/root/.openclaw/workspace/AGENTS.md"
          with open(filepath, "r", encoding="utf-8") as f:
              content = f.read()
          changes = 0
          # 修改 researcher 描述
          old = "(使用 SearXNG + Jina Reader)"
          new = "(优先 Tavily,备用 SearXNG + Jina Reader)"
          if old in content:
              content = content.replace(old, new)
              changes += 1
          # 修改 trader 描述
          old = "(使用 TuShare + SearXNG)"
          new = "(使用 TuShare + Tavily,备用 SearXNG)"
          if old in content:
              content = content.replace(old, new)
              changes += 1
          # 修改子 Agent 搜索规则
          old = "- 所有子 Agent 搜索时必须使用 **SearXNG**(<http://localhost:8080>)"
          new = "- 所有子 Agent 搜索时优先使用 **Tavily**(tavily_search),不可用时降级到 **SearXNG**(<http://localhost:8080>)"
          if old in content:
              content = content.replace(old, new)
              changes += 1
          with open(filepath, "w", encoding="utf-8") as f:
              f.write(content)
          print(f"✅ 完成 {changes} 处修改")
          PATCH2

          修改后重启 Gateway 生效:

          openclaw gateway restart

          在飞书中测试,Agent 应表现为:

          • Tavily 正常时:直接返回结构化结果,末尾标注「数据来源:Tavily」
          • Tavily 不可用时:自动切换到 SearXNG,末尾标注「数据来源:SearXNG(Tavily 暂不可用)」
          • 全部失败时:才告知用户搜索遇到问题

          子 Agent 推荐搜索工具 原因
          researcher Tavily(tavily_search)+ Jina Reader Tavily 搜索 + Jina 深度阅读,组合使用
          coder Tavily(tavily_search 技术问题搜索准确度更高
          writer SearXNG + Jina 写作素材可能需要大量搜索,节省 Tavily 额度
          trader Tavily + TuShare 财经新闻用 Tavily,行情数据用 TuShare

           🚨 这是本文最重要的一节。如果你也在国内服务器上用 OpenClaw,很可能会遇到同样的问题。

          安装完成后,所有检查都显示正常:

          • openclaw skills list 显示 Tavily Skill ✓ ready
          • ✅ Tavily API 通过 curl 手动测试完美返回结果
          • search.mjs 脚本在命令行单独运行正常
          • TAVILY_API_KEY 环境变量已正确加载
          • AGENTS.md 已配置 Tavily 优先

          但在飞书实际测试时,Agent 始终不使用 Tavily,而是显示「数据来源:SearXNG(Tavily 暂不可用)」。

          第一步:看 Gateway 日志

          tail -100 /tmp/openclaw/openclaw-2026-03-15.log | grep -i "web_search\|tavily\|error\|failed"

          发现关键错误:

          [tools] web_search failed: fetch failed
          [tools] browser failed: timed out

          第二步:分析调用链路

          通过日志发现,Agent 搜索时调用的是 web_search 而不是 tavily。这是两个完全不同的东西:

          项目 web_search(内置工具) tavily(Skill 脚本)
          类型 OpenClaw 内置的搜索工具 用户安装的 Skill 脚本
          后端 Brave Search API(硬编码) Tavily API(用户配置)
          国内可用性 ❌ 被墙,fetch 失败 ✅ 完全可用
          Agent 调用优先级 ⭐ 最高(内置工具优先) ⚠️ 低(待 Agent 主动选择)
          失败后降级 → SearXNG Skill 不会被调用

          用户说“帮我搜一下...”
              ↓
          Agent 调用内置 web_search 工具(Brave 后端)
              ↓
          Brave Search 在国内被墙 → fetch failed
              ↓
          Agent 降级到 SearXNG Skill  ✅ 成功
              ↓
          返回结果,标注“数据来源:SearXNG(Tavily 暂不可用)”
          ❗ Tavily Skill 在整个过程中从未被调用

          Agent 的搜索逻辑是:

          1. 内置 web_search → 失败(Brave 被墙)
          2. SearXNG Skill → 成功(本地 Docker)
          3. ✅ 返回结果,不再尝试其他 Skill

          Tavily Skill 虽然已安装且 ✓ ready,但 Agent 永远不会走到这一步,因为 SearXNG 已经成功了。

          方案 做法 结果
          配置内置搜索的 provider openclaw.jsontools 节加入 "web_search": {"provider": "tavily"} ❌ 配置验证报错:tools: Unrecognized key: "web_search"。OpenClaw 2026.3.8 的 tools 配置不支持 web_search key
          加 apiKey 和 baseUrl "web_search": {"provider": "tavily", "apiKey": "...", "baseUrl": "..."} ❌ 同样报 Unrecognized key 错误
          AGENTS.md 中强制指定 写明“优先调用 tavily_search” ⚠️ Agent 会读取该指令,但内置 web_search 仍然优先级最高
          安装 ClawHub 正式版 Skill openclaw-tavily-search(描述为 "alternative to Brave") ⚠️ 安装成功且 ✓ ready,但 Agent 仍然优先用内置工具
          使用 MCP 方式安装 openclaw mcp add ❌ OpenClaw 2026.3.8 不支持 mcp 子命令

           ✅ SearXNG 作为搜索主力,实际效果良好。

          虽然没有用上 Tavily,但 SearXNG 的搜索质量已经足够日常使用。降级机制完善,検索能力稳定。

          当前状态:

          • 🔍 实际搜索主力:SearXNG(本地 Docker,免费无限次)
          • 📖 网页阅读:Jina Reader(云端 API)
          • 🔑 Tavily API Key:已配置就位,等待 MCP 支持
          • 📦 Tavily Skill:已安装 ✓ ready,命令行可用,Agent 不会调用

          当前(OpenClaw 2026.3.8)          未来(支持 MCP 后)
          ──────────────────────          ───────────────────────
          内置 web_search (Brave) ❌       openclaw mcp add tavily
          SearXNG Skill ✅ (降级生效)     Tavily 注册为原生搜索工具
          Tavily Skill ✓ ready 但不被调用  Agent 直接调用 tavily_search
                                         + tavily_extract / crawl / research

          升级时只需一条命令:

          openclaw mcp add <https://mcp.tavily.com/mcp?tavilyApiKey=$TAVILY_API_KEY>
          openclaw gateway restart

          API Key 已经配置好了,到时候无缝衔接。

          在飞书中向多多助理发送:

          用 Tavily 搜索一下今天的 A 股市场新闻

          观察返回结果是否为结构化摘要(而非纯链接列表)。

          分别用 Tavily 和 SearXNG 搜索同一内容,对比:

          用 Tavily 搜索:2026年3月A股市场走势分析
          
          用 SearXNG 搜索:2026年3月A股市场走势分析
          

          对比要点:

          • 结果结构化程度
          • 信息时效性
          • 响应速度
          • Agent 理解和总结的质量

          测试 Tavily 搜索 + Jina Reader 阅读的组合效果:

          搜索最近一周的半导体行业动态,找到最相关的文章后阅读全文给我总结
          

          这会先用 tavily_search 找到高质量结果,再用 jina_reader 深度阅读具体文章。

          Tavily 免费额度为 1000 次/月,建议定期检查用量:

          1. 登录 app.tavily.com 查看 Dashboard 中的用量统计
          2. 如果日均搜索 > 30 次,可能月底会用完,届时自动降级到 SearXNG

          • 每日推送脚本a-stock-daily-push.py)继续使用 Bocha,不消耗 Tavily 额度
          • 实时对话搜索Tavily,获得最佳体验
          • 批量信息收集SearXNG,无额度限制

          问题 可能原因 解决方案
          Tavily 搜索无响应 API Key 未正确加载 检查 openclaw.json 的 env 节
          返回空结果 网络问题或 Key 失效 curl -s <https://api.tavily.com/search> -H "Content-Type: application/json" -d '{"api_key":"你的Key","query":"test"}' 手动测试
          MCP 未连接 MCP 配置错误 openclaw mcp list 检查状态
          额度耗尽 超出 1000 次/月 自动降级到 SearXNG,下月恢复
          Gateway 不识别新 Key 未同步配置 openclaw gateway install --force && openclaw gateway restart

          # 直接测试 Tavily API 是否可用
          curl -s <https://api.tavily.com/search> \
            -H "Content-Type: application/json" \
            -d '{
              "api_key": "'$TAVILY_API_KEY'",
              "query": "A股今日行情",
              "max_results": 3
            }' | python3 -m json.tool | head -30

          如果返回 JSON 结果且包含 results 数组,说明 API 正常工作。

          用户在飞书发消息:“帮我搜一下...”
              ↓
          Agent(kimi-k2.5 / sonnet4.6)分析意图
              ↓
          内置 web_search(Brave) ❌ fetch failed(国内被墙)
              ↓ 自动降级
          ┌──────────────┬──────────────┬──────────────┬──────────────┐
          │ SearXNG ⭐主力 │ Jina Reader  │ TuShare      │ Bocha 应急   │
          │ 搜索兜底       │ 网页阅读     │ 股票/行情    │ 最后手段     │
          │ Docker 本地   │ 云端 API     │ Python API   │ 600+次余额  │
          ├──────────────┼──────────────┼──────────────┼──────────────┤
          │ localhost    │ r.jina.ai    │ api.waditu   │ api.bocha    │
          │ :8080/search │              │ .com         │ .ai          │
          ├──────────────┼──────────────┼──────────────┼──────────────┤
          │ 免费无限次   │ Markdown     │ 股票数据      │ 有限额度      │
          │ 质量良好      │ 需指定 URL   │ 需指定代码    │ 仅应急使用    │
          └──────────────┴──────────────┴──────────────┴──────────────┘
              ↓
          Agent 整理信息,回复用户
          ⭐ Tavily Skill 已安装且 API Key 已配置,但因内置工具优先级问题未被 Agent 调用
          ⭐ 等 OpenClaw 支持 MCP 后可一键升级
          定时推送(crontab)独立通道:
          crontab → a-stock-daily-push.py → Bocha + 财联社 → AI 总结 → 飞书

          以下是实际安装过程中遇到的问题及解决方案,供后续参考:

          序号 问题 原因 解决方案
          1 openclaw mcp add 报错 No such file or directory OpenClaw 2026.3.8 不支持 mcp 子命令,官方文档和第三方教程针对的是更新版本 改用 Skill 安装方式,放弃 MCP
          2 npx clawhub@latest install tavily-search 失败:No matching version found for undici@^7.24.0 clawhub@0.8.0 依赖的 undici@^7.24.0 在淘宝等国内 npm 镜像源上未同步,官方源已有 指定官方 registry:npm_config_registry=https://registry.npmjs.org npx clawhub@latest install tavily-search。如仍失败再手动安装 Skill
          3 Node.js 版本过低 服务器预装的 Node 版本较老 npm install -g n && n lts 升级到 v24
          4 curl 从 GitHub 下载卡住 / 文件为空 国内服务器 raw.githubusercontent.com 被 GFW 屏蔽 手动用 cat << 'EOF' 创建文件内容
          5 Tavily API 是否也被墙? 不会——GitHub 是被 GFW 针对性屏蔽,Tavily 是商业 API 服务,不在封锁名单 curl -s -o /dev/null -w "%{http_code}" <https://api.tavily.com/search> 验证,返回 401 即网络通
          6 Gateway 环境变量中找不到 TAVILY_API_KEY 写入 openclaw.json 后未同步配置 openclaw gateway install --force && openclaw gateway restart
          7 Agent 指定用 Tavily 搜索但仍用 SearXNG AGENTS.md 中明确写死了「优先使用 SearXNG」 修改 AGENTS.md 搜索工具段落 + 子 Agent 描述(共 4 处)
          8 bash 语法错误:syntax error near unexpected token 'newline' 从指南复制命令时把注释行的 > 当作命令执行了 注释行不要以 > 开头,或分开复制
          9 AGENTS.md 中工具名 tavily_search 与 Skill 注册名 tavily 不匹配 SKILL.md 的 name: tavily,但 AGENTS.md 写的是 tavily_search,Agent 找不到对应工具 sed -i 's/tavily_search/tavily/g' ~/.openclaw/workspace/AGENTS.md 统一改为 tavily
          10 🔴 根因:Agent 调用内置 web_search 而非 Skill 脚本 Agent 搜索时走的是 OpenClaw 内置 web_search 工具(后端为 Brave Search,国内被墙),不是 Skill 目录下的脚本。日志报错:[tools] web_search failed: fetch failed 详见第七节「核心问题分析」。当前无解,等 MCP 支持后可解决
          11 tools.web_search 配置验证报错 尝试在 openclaw.jsontools 节加入 "web_search": {"provider": "tavily"},但 OpenClaw 2026.3.8 的 tools 配置不支持 web_search key 报错:tools: Unrecognized key: "web_search"。用 openclaw doctor --fix 或手动删除该 key 恢复
          12 ClawHub 搜索 tavily-search 报 Skill not found ClawHub 上没有叫 tavily-search 的 Skill,实际名称是 openclaw-tavily-search 先用 npx clawhub@latest search tavily 搜索,再用实际名称安装
          13 gateway install --force && restartstop + start 的区别 改了 openclaw.json 后只 stop + start 不会同步配置到 systemd 改了配置必须用 openclaw gateway install --force && openclaw gateway restart,没改配置可以只 restart

          以下是经实测推荐的 Skill,均可通过 npm_config_registry=https://registry.npmjs.org npx clawhub@latest install <skill名> 安装:

          Skill 功能 安装建议 说明
          🔎 find-skills Skill 发现与安装 ⭐ 强烈推荐 让 Agent 能自动搜索和安装新 Skill,相当于“应用商店”入口
          🌤️ weather 天气查询 ✅ 推荐 通过 wttr.in 或 Open-Meteo 获取天气,无需 API Key,开箱即用
          📝 summarize 内容总结 ✅ 推荐 快速总结网页、文档、PDF、视频字幕等,与 Jina Reader 互补
          🛡️ skill-vetter Skill 安全审计 ⚠️ 可选 审查新安装 Skill 的安全性,如果频繁通过 find-skills 自动安装则建议开启
          🧠 self-improving-agent 自我优化引擎 ❌ 暂不推荐 会自动修改 AGENTS.md 等配置文件,可能与手动调优的配置冲突。建议等基础稳定后再装

          到此这篇关于OpenClaw配置Tavily 搜索 Skill 完整指南教程的文章就介绍到这了,更多相关OpenClaw Tavily 搜索 Skill内容请搜索风君子博客以前的文章或继续浏览下面的相关文章,希望大家以后多多支持风君子博客!

          站内搜索