OpenClaw配置Tavily 搜索 Skill 完整指南教程
tommychian
💡 本文记录为 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+ 次余额) |
二、为什么要加 Tavily?
2.1 Tavily vs SearXNG + Jina Reader 对比
| 维度 | SearXNG + Jina Reader | Tavily |
|---|---|---|
| 返回格式 | 链接列表 → 需 Jina 二次抓取 | 结构化摘要 + 关键信息,直接可用 |
| Agent 集成 | 两个 Skill 配合(搜索 + 阅读) | 原生为 AI Agent 设计,一步到位 |
| 信息密度 | 低,需要多步处理 | 高,预处理过的结果 |
| 响应速度 | SearXNG ~1s + Jina ~15s ≈ 16s | 快速(已预处理) |
| 稳定性 | 依赖本地 Docker + 第三方引擎 | 云端 API,稳定性好 |
| 费用 | 完全免费 | 免费 1000 次/月 |
| 本地资源 | 占用 Docker + Redis 内存 | 零本地资源消耗 |
2.2 升级后的三层搜索架构
优先级 1:Tavily → 高质量结构化结果,1000 次/月,日常主力 优先级 2:SearXNG + Jina → 免费无限次,兜底 / 批量搜索场景 优先级 3:Bocha → 600+ 次余额,应急备用
三、获取 Tavily API Key
3.1 注册账号
- 访问 app.tavily.com
- 注册账号(支持 Google / GitHub 登录)
- 无需信用卡,免费计划(Researcher)即包含 1000 次/月 额度
3.2 获取 API Key
- 登录后进入 Dashboard
- 复制你的 API Key(格式类似
tvly-xxxxxxxxxxxxxxxx) - 妥善保存,后面要用
四、安装 Tavily Search Skill
⚠️ 关于安装方式的选择:部分文档提到可以用
openclaw mcp add命令通过 MCP 方式安装,但经实测 OpenClaw 2026.3.8 不支持mcp子命令。因此我们使用 Skill 安装方式,这是当前版本完全支持的标准方法。
4.1 方式一:ClawHub 安装(推荐)
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 搜索不可用时作为替代方案的。
4.2 方式二:手动安装(备用)
如果 ClawHub 安装失败,可以手动创建 Skill——OpenClaw 的 Skill 本质上就是 SKILL.md + 脚本文件,放到正确目录即可。
4.2 手动安装步骤
第一步:下载 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();
EOF4.3 验证安装
# 检查目录结构(应有 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
4.4 Skill 提供的能力
安装后 Agent 理论上将获得 Tavily 搜索工具,支持:
- AI 优化的结构化搜索结果——直接返回摘要和关键信息,Agent 可直接使用
- 域名过滤——可指定只搜索特定网站
- 新闻/财经等主题搜索——适合 trader 子 Agent
- 时间范围过滤——只搜索最近的内容
🔴 但实际上,Agent 不会主动调用它。 关于这个问题的详细分析,请看下面的「第七节:核心问题分析」。
💡 网页提取能力怎么办? Tavily 的 extract/crawl/research 等高级功能需要 MCP 方式才能使用,当前版本不支持。不过已经有 Jina Reader 做网页内容提取,继续用它即可。等 OpenClaw 后续版本支持 mcp 命令后,可以再升级到 MCP 方式。
五、安全配置 API Key
5.1 写入 openclaw.json
不要把 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}")
PATCH5.2 同步配置并重启 Gateway
# 同步到 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=******
5.3 安全检查清单
- [ ] API Key 未硬编码在任何脚本中
- [ ]
openclaw.json权限为 600(chmod 600 ~/.openclaw/openclaw.json) - [ ]
.bashrc中没有 TAVILY 相关明文 Token - [ ] MCP URL 中的 Key 只存在于 OpenClaw 内部配置
六、配置搜索优先级
安装 Tavily 后,需要告诉 Agent 搜索的优先级。
6.1 修改AGENTS.md
以下 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
6.2 降级效果验证
在飞书中测试,Agent 应表现为:
- Tavily 正常时:直接返回结构化结果,末尾标注「数据来源:Tavily」
- Tavily 不可用时:自动切换到 SearXNG,末尾标注「数据来源:SearXNG(Tavily 暂不可用)」
- 全部失败时:才告知用户搜索遇到问题
6.3 子 Agent 搜索配置建议
| 子 Agent | 推荐搜索工具 | 原因 |
|---|---|---|
| researcher | Tavily(tavily_search)+ Jina Reader | Tavily 搜索 + Jina 深度阅读,组合使用 |
| coder | Tavily(tavily_search) | 技术问题搜索准确度更高 |
| writer | SearXNG + Jina | 写作素材可能需要大量搜索,节省 Tavily 额度 |
| trader | Tavily + TuShare | 财经新闻用 Tavily,行情数据用 TuShare |
七、核心问题分析:Tavily 为什么装了还是不能用?
🚨 这是本文最重要的一节。如果你也在国内服务器上用 OpenClaw,很可能会遇到同样的问题。
7.1 现象
安装完成后,所有检查都显示正常:
- ✅
openclaw skills list显示 Tavily Skill✓ ready - ✅ Tavily API 通过
curl手动测试完美返回结果 - ✅
search.mjs脚本在命令行单独运行正常 - ✅
TAVILY_API_KEY环境变量已正确加载 - ✅
AGENTS.md已配置 Tavily 优先
但在飞书实际测试时,Agent 始终不使用 Tavily,而是显示「数据来源:SearXNG(Tavily 暂不可用)」。
7.2 排查过程
第一步:看 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 | 不会被调用 |
7.3 根因
用户说“帮我搜一下...”
↓
Agent 调用内置 web_search 工具(Brave 后端)
↓
Brave Search 在国内被墙 → fetch failed
↓
Agent 降级到 SearXNG Skill ✅ 成功
↓
返回结果,标注“数据来源:SearXNG(Tavily 暂不可用)”
❗ Tavily Skill 在整个过程中从未被调用Agent 的搜索逻辑是:
- 内置
web_search→ 失败(Brave 被墙) - SearXNG Skill → 成功(本地 Docker)
- ✅ 返回结果,不再尝试其他 Skill
Tavily Skill 虽然已安装且 ✓ ready,但 Agent 永远不会走到这一步,因为 SearXNG 已经成功了。
7.4 尝试过的修复方案(均失败)
| 方案 | 做法 | 结果 |
|---|---|---|
| 配置内置搜索的 provider | 在 openclaw.json 的 tools 节加入 "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 子命令 |
7.5 当前可行方案
✅ SearXNG 作为搜索主力,实际效果良好。
虽然没有用上 Tavily,但 SearXNG 的搜索质量已经足够日常使用。降级机制完善,検索能力稳定。
当前状态:
- 🔍 实际搜索主力:SearXNG(本地 Docker,免费无限次)
- 📖 网页阅读:Jina Reader(云端 API)
- 🔑 Tavily API Key:已配置就位,等待 MCP 支持
- 📦 Tavily Skill:已安装
✓ ready,命令行可用,Agent 不会调用
7.6 未来升级路径
当前(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 已经配置好了,到时候无缝衔接。
八、验证测试
7.1 基础搜索测试
在飞书中向多多助理发送:
用 Tavily 搜索一下今天的 A 股市场新闻
观察返回结果是否为结构化摘要(而非纯链接列表)。
7.2 对比测试
分别用 Tavily 和 SearXNG 搜索同一内容,对比:
用 Tavily 搜索:2026年3月A股市场走势分析
用 SearXNG 搜索:2026年3月A股市场走势分析
对比要点:
- 结果结构化程度
- 信息时效性
- 响应速度
- Agent 理解和总结的质量
7.3 Tavily + Jina 组合测试
测试 Tavily 搜索 + Jina Reader 阅读的组合效果:
搜索最近一周的半导体行业动态,找到最相关的文章后阅读全文给我总结
这会先用 tavily_search 找到高质量结果,再用 jina_reader 深度阅读具体文章。
八、额度监控
Tavily 免费额度为 1000 次/月,建议定期检查用量:
- 登录 app.tavily.com 查看 Dashboard 中的用量统计
- 如果日均搜索 > 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 |
手动测试 API
# 直接测试 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.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
以下是经实测推荐的 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内容请搜索脚本之家以前的文章或继续浏览下面的相关文章,希望大家以后多多支持脚本之家!
