OpenClaw 做“联网检索”时,很多人第一反应是直接用内置 web_search。但需要先明确一个前提:OpenClaw 默认的 web_search 走 Brave Search API,如果你没有配置 Brave 的 API Key(例如没有设置 BRAVE_API_KEY),那它默认是不能用来检索网页的

如果你更希望“开箱可用、面向 LLM 的结构化搜索结果”,一个很实用的做法是:用 Tavily 代替 Brave——通过自定义 Skill 调用 Tavily Search API,把搜索能力接入到 OpenClaw 的工具链里。


1. 为什么“默认 Brave”不配置就没法搜

OpenClaw 的 web_search 设计目标是“轻量搜索工具”,默认对接 Brave。它不会替你“自动申请/内置 Key”,也不会在没有 Key 的情况下提供可用的免费兜底。

所以你在以下场景会卡住:

  • 你装好了 OpenClaw,也能正常对话

  • 但一让它“帮我搜索某某信息”,就会返回搜索失败/鉴权失败/无结果

解决思路只有两条:

  1. 把 Brave Key 配齐(让 web_search 按默认路线工作)

  2. 换一个可用的搜索 Provider(本文选择 Tavily)


2. 选择 Tavily 的理由(以及它更适合 Skill 形态)

Tavily 的定位更接近“给 Agent/LLM 用的 Search API”,特点是:

  • 返回结构化结果(标题、URL、摘要、可选原文片段等),更利于模型继续推理/总结

  • 接入成本低:拿到 API Key 后即可用

  • 与 Skill 非常匹配:Skill 本质是“给模型的一份可执行操作手册”,而 Tavily 正好是一个简单 HTTP API

你可以把它当成:

  • “先搜(Tavily)→再抓(OpenClaw 的网页抓取工具/浏览器工具)→再总结(模型)” 的第一步。


3. 总体方案:用 Skill 把 Tavily 变成你的默认搜索入口

思路如下:

  • 不强行改 OpenClaw 的内置 web_search

  • 在你的 workspace skills 目录里新增一个自定义 Skill(例如“tavily-search”)

  • 该 Skill 的内容是:教模型如何用命令行(curl)调用 Tavily Search API,并要求输出带引用的结果

这样做的好处:

  • 对 OpenClaw 版本升级更友好(几乎零侵入)

  • 你可以按自己的需求固化“搜索深度、返回条数、输出格式、引用规范”


4. 准备:获取并配置 Tavily API Key

  1. 在 Tavily 控制台获取 API Key。

  2. 把 Key 放到环境变量里(示例):

export TAVILY_API_KEY="..."

关键提醒(非常常见的坑):

  • 如果你的 OpenClaw 是以 daemon/systemd/launchd 方式运行,它读取到的环境变量不一定等于你当前终端的环境变量

  • 你需要确保运行 OpenClaw 的那个服务环境里同样有 TAVILY_API_KEY


5. 实战:写一个 Tavily 搜索 Skill(核心内容)

Skill 的核心就是一段“可复用的操作说明”,让模型在需要检索时按步骤调用。

下面给一个可直接照抄的 Skill 逻辑(你可以按自己的习惯改名字/输出格式):

5.1 Skill 约束与输出目标

建议你在 Skill 里明确:

  • 只做“搜索”这一步,不把网页全文都塞进来

  • 输出固定结构:查询词、Top N 结果列表(title、url、snippet/summary)、下一步建议

  • 强制引用:最终回答里必须包含 URL

5.2 Tavily Search API 调用示例(curl)

Tavily 的搜索接口通常是一个 HTTPS POST 请求。示例:

curl -sS https://api.tavily.com/search \
  -H 'Content-Type: application/json' \
  -d "$(jq -n \
    --arg key \"$TAVILY_API_KEY\" \
    --arg q \"你的查询词\" \
    '{
      api_key: $key,
      query: $q,
      search_depth: "advanced",
      max_results: 5,
      include_answer: false,
      include_raw_content: false
    }')"

说明:

  • search_depth:你可以按成本/质量选择(例如 basic/advanced)

  • max_results:建议 3~8,太多会让模型后处理成本变高

  • include_raw_content:通常先关掉,避免一次把 payload 打爆;需要时再对特定链接做抓取

如果你不想依赖 jq,也可以在 Skill 里给出纯 JSON 的 curl 版本(略)。


6. 使用方式:让 OpenClaw“先用 Tavily 搜,再决定抓哪些页面”

你可以在对话里这样驱动:

  • “用 tavily-search 检索:{问题}。给出 5 条结果,每条附上 1~2 句摘要与 URL。然后选最相关的 2 条建议我下一步抓取哪两个页面。”

6.1 例子:用 Tavily 定向检索知乎(site 语法)

如果你已经在本机把 Tavily skill 做成了一个脚本(例如 skills/tavily-search/scripts/search.mjs),那么可以直接用 site:zhihu.com 做定向检索。

示例:检索知乎上与 OpenClaw 相关的文章,并返回前 5 条:

node /Users/xxxxxx/clawd/skills/tavily-search/scripts/search.mjs "site:zhihu.com OpenClaw" -n 5

说明:

  • site:zhihu.com:只返回知乎域名下的结果

  • -n 5:返回 5 条(参数名以你的脚本实现为准)

一个更工程化的模板是:

  1. Tavily 搜索:返回候选来源

  2. 选 2~3 条最可信来源

  3. 用 OpenClaw 的网页抓取/浏览器能力打开并抽取要点

  4. 最终回答:给结论 + 引用

这样能显著降低“搜索阶段就引入大量噪声”的概率。


7. 对比结论:Brave 与 Tavily 怎么选

  • 你已经有 Brave Search API Key:

    • 直接把 Brave 配齐,web_search 用起来最顺滑
  • 你没有 Brave Key,或者不想折腾 Brave 的配置:

    • 别指望默认 web_search 自动可用,改用 Tavily(Skill 方式)更快落地

从可维护性角度:

  • Brave:更像“OpenClaw 内置默认线路”,但前提是你愿意把 Key 配到位

  • Tavily:更像“你自己的可控工具链”,通过 Skill 你可以固定输出结构与流程


8. 安全与工程建议(别跳过)

  • API Key 只放环境变量,不要写进 Skill 文档、不要提交到仓库

  • 如果你把 OpenClaw 暴露在公网(不推荐),请务必做 allowlist / pairing / 鉴权,并尽量不要让它拥有可滥用的网络检索能力

  • 给 Skill 增加“结果可信度规则”:优先官方文档、标准组织、主流媒体/厂商博客;对论坛/二手转载保持谨慎


9. 小结

  • OpenClaw 默认 web_search 基于 Brave Search API:不配置 Brave Key 就无法稳定检索网页

  • 使用 Tavily 的最稳妥方式是:通过自定义 Skill 把 Tavily Search API 接入 OpenClaw,把它当作你的默认搜索入口。

  • 推荐流程:Tavily 先搜 → 选来源 → 再抓取/总结 → 最终回答附引用。