让 OpenClaw 自己去网上查资料

OpenClaw 除了操作计算机、调用本地工具、利用模型内置的"记忆",从网上查资源其实是 agent 非常核心的一项工作能力。很多时候,问题不是"会不会推理",而是"能不能找到最新、准确、可用的资料"。

OpenClaw 安装完成后,理论上已经具备联网能力,但如果你真想让它"上网干活",还需要额外做一些配置。不然它更多只是一个会思考、但信息来源受限的本地劳动力。

本文就围绕这一点,梳理一下在当前阶段,OpenClaw 想要访问互联网的几种可行方式,以及各自的配置方法和坑点。不讨论哪种最优,只尽量把路讲清楚,方便你按自己的环境和偏好来选。

1 自带的上网功能

在 OpenClaw 里,"上网"其实并不是一个单一的问题,大致可以分成以下几个场景:一类是已知目标的接口调用。比如查天气、查汇率、查某个服务的状态,这类场景往往已经知道具体的网站或 API,只需要把参数(位置、时间、代码等)通过 curl 或 SDK 传进去,就能直接拿到结果。这种更像是调用一个远程函数,很多 skill 本身就已经封装好了,基本不需要额外配置,上来就能用。

更常见、也更麻烦的,是不确定目标的信息获取。比如"搜一下某个问题""找一篇最近的文档""看看别人是怎么配置的",本质上接近人类用百度 / Google 搜索;再往下一步,则是需要在网页之间跳转、点击、输入内容,完成多步操作,这时就已经非常接近"让 agent 像人一样用浏览器"。

OpenClaw 自带的联网能力,主要覆盖的是前一种复杂度较低的搜索与抓取场景:通过搜索引擎拿链接,再把页面内容读下来。更偏向"读资料",而不是"操作网页"。下面先从这套内置能力说起。

联网搜索是通过内置工具 web_search 找链接 → web_fetch 读内容 来完成的。

openclaw 默认的联网功能使用 web_search实现, 具体来说,它并非百度或 Google,而是 Brave 的搜索服务(Brave 本身也是一个搜索引擎,有 Web 界面,同时支持 API)。它支持地区定向和语言过滤,返回标题、URL 和片段。需要设置 API Key。

Brave Search 有免费 tier:每月 2000 次查询免费,注册地址:brave.com/search/api,需要银行卡,我的国内招行信用卡不行(我不确定别人有没有这个问题),有能用的可以试试。获取 API Key 之后:

bash 复制代码
openclaw configure --section web

然后输入 API Key。

另一个相关工具 web_fetch 则是直接请求目标 URL,把 HTML 转成 markdown/text------不经过搜索引擎,是直接抓取页面内容。

2 使用浏览器

因为我无法使用 Brave,所以直接让 OpenClaw 控制浏览器搜索。具体参数见官方文档的 browser 部分,例如显示当前状态:

bash 复制代码
node dist/index.js browser status

下面介绍了两种方法,一种更简单,一种更合理,先别着急安装,看完两种方法之后,选择更适合你的方法。

2.1 方法一

使用 GitHub Docker 官方文档中最简单的方法,直接在 Gateway image 里安装 headless 的 browser。

bash 复制代码
docker exec -u root -it $CONTAINER_ID bash  # 以 root 身份登录
node /app/node_modules/playwright-core/cli.js install chromium
node /app/node_modules/playwright-core/cli.js install-deps chromium
find /app -name "chromium"  # 查看安装在哪儿了,试一下能否正常运行

这样下载后安装的数据大部分在 /home/node/.cache/ms-playwright 下,约 600MB+,这部分可以在镜像之外持久化,install-deps 相关的内容很多需要安装到系统目录,想要保存则需要 commit Docker 镜像,后面再升级也比较麻烦。

然后,通过 Web 界面配置,指向本地已安装的浏览器。

在 WebUI 中:Setting->Config->Browser->Executable Path,把上面找到的可执行程序路径填入。设置之后,openclaw.json 中的 browser 部分会被自动填充为:

bash 复制代码
"browser": {
  "executablePath": "/home/node/.cache/ms-playwright/chromium_headless_shell-1208/chrome-headless-shell-linux64/chrome-headless-shell"
},

2.2 方法二

在 Linux+Docker 环境下为 OpenClaw 配置浏览器,标准的实现架构是运行两个独立的 Docker 容器,让它们互联。

具体说明在 Docker 文档中的 Sandbox browser image:https://github.com/openclaw/openclaw/blob/main/docs/install/docker.md

构建沙盒浏览器镜像:

bash 复制代码
. scripts/sandbox-browser-setup.sh
docker run --rm -d -p 9222:9222 openclaw-sandbox-browser:bookworm-slim  # 运行
curl http://localhost:9222/json/version  # 测试一下

镜像构建完成后约 1.02GB。

然后在 openclaw.json 中手动修改(目前 Web UI 尚不支持修改这些详细配置):

bash 复制代码
{
  "browser": {
    "enabled": true,
    "attachOnly": true,
    "defaultProfile": "remote",
    "profiles": {
      "remote": {
        "cdpUrl": "http://你的IP:9222",
        "color": "#FF4500"
      }
    }
  }
}

3 问题与解决

3.1 总提示 token 不匹配

查看配置文件 .envopenclaw.json,以及登录 Web UI 时在浏览器中输入的 token 是否一致。

3.2 cdpHost: 127.0.0.1

Gateway 容器连接浏览器容器时,浏览器返回的 cdpHost 为其 Docker 内部的 IP:127.0.0.1;而对于 Gateway 来说 127.0.0.1 为其内部 IP。因此 CDP 无法连接成功。这可能是作者基于安全因素考试------不允许非本地的程序使用浏览器工具,但在双docker模型下确实没法用。

主要原因是浏览器的镜像 openclaw-sandbox-browser:bookworm-slim,它启动的程序是 openclaw-sandbox-browser,其中写死了 --remote-debugging-address=127.0.0.1,使得在别的 Docker 内部无法调用 CDP。

修改方法有两种,一种是修改源码中的文件 scripts/sandbox-browser-entrypoint.sh,将 127.0.0.1 改为 0.0.0.0,然后重新构建镜像。另一种是修改 docker-compose.yml,将端口映射的 port 部分改为:network_mode: host,使 Gateway 容器与宿主机使用同一网络。

相关推荐
量子炒饭大师1 天前
【C++入门】Cyber骇客构造器的核心六元组 —— 【类的默认成员函数】明明没写构造函数也能跑?保姆级带你掌握六大类的默认成员函数(下:运算符重载)
java·c++·dubbo·面向对象编程·构造函数·运算符重载·默认成员函数
匠心网络科技2 天前
计算机找工作必看:面试被问HTTP请求头?(二)
前端·学习·http·面试·性能优化·dubbo
Demon_Hao3 天前
Spring Cloud微服务之间调用Dubbo
spring cloud·微服务·dubbo
顾北125 天前
MCP服务端开发:图片搜索助力旅游计划
java·spring boot·dubbo
珹洺7 天前
Bootstrap-HTML(二)深入探索容器,网格系统和排版
前端·css·bootstrap·html·dubbo
量子炒饭大师9 天前
【C++入门】—— 【什么时候需要用到深拷贝】C++的类中何时需要用到深拷贝?保姆级别带你罗列所有可能!
java·c++·dubbo·深拷贝
橘颂TA11 天前
【测试】自动化测试函数介绍——web 测试
python·功能测试·selenium·测试工具·dubbo
wc8811 天前
dubbo本地直连一个程序既当提供者又当消费者问题
dubbo
小信丶13 天前
@Activate 注解详解:应用场景与实战示例
java·spring boot·后端·spring·spring cloud·微服务·dubbo