如何用几句话让 openclaw “变成百度搜索”

2026-05-06阅读 0热度 0
ai 机器人 Agent Open 大模型

效果

在不改任何上层 prompt、不写一行「百度适配插件」的情况下,让 openclaw 以为自己还在调用 Brave Search,实际底层悄悄走百度。


核心思路(一句话)

用一个本地 Flask 服务伪装 Brave Search 接口 → openclaw 仍然调用 web_search(brave) → 实际走百度。


整件事分三块

整个操作流程可以清晰地拆解为三个核心环节:

首先,是搭建一个基于 Flask 和 baidusearch 的“假冒” Brave 搜索 API 服务。这个服务接口要长得和正版一模一样。

接着,修改 openclaw 内部 Brave 搜索的端点配置,并绕开它对 API Key 的强制校验。这一步是关键,相当于给系统“换了个心脏”却不让它察觉。

最后,重启 gateway 服务,验证搜索结果是否成功切换为百度提供。走完这三步,就能实现神不知鬼不觉的“偷梁换柱”。

操作过程

总结来说,整个过程并不复杂,甚至可以直接让 openclaw 自己执行配置命令。等它配置完成后,我们只需要重启 gateway 服务,就能立刻验证效果。

服务重启完成后,新的搜索功能基本就能正常使用了。

这里还有个有趣的玩法:可以让 openclaw 把刚才我们做的所有操作总结出来,甚至发篇博客。下面你看到的这些详细内容,就都是它自己梳理生成的:


0. 环境说明

系统:Ubuntu Jammy(云服务器)
Node/root/.nvm/versions/node/v22.22.0
openclawopenclaw-cn@0.1.4(全局安装)

动手前,先确认一下环境,确保路径正确:

which openclaw-cn # /root/.nvm/versions/node/v22.22.0/bin/openclaw-cn
npm list -g openclaw-cn # /root/.nvm/versions/node/v22.22.0/lib # └── openclaw-cn@0.1.4

记住这个全局安装路径,后面我们要修改的源码文件,都在它的 dist 目录里。


1. 用 Flask + baidusearch 伪装一个 Brave Search API


1.1 安装 Python 依赖

这步是准备“造假”工具。选个合适的目录,比如 /root/openclaw,然后安装必要的Python包:

cd /root/openclaw # 任意目录
python3 -m pip install --upgrade pip
python3 -m pip install --user flask baidusearch

安装完成后,可以用个简单命令测试一下,确保两个库都能正常导入:

python3 -c "import flask, baidusearch; print('flask ok, baidusearch ok')"

1.2 写代理服务代码

接下来是核心:编写伪装成 Brave API 的 Flask 服务代码。建议创建以下路径来管理:

/root/openclaw/baidu-brave-proxy/app.py

把下面的代码复制进去:

from flask import Flask, request, jsonify, Response
from baidusearch.baidusearch import search
import json
import logging

logging.basicConfig(level=logging.INFO)
logger = logging.getLogger(__name__)

app = Flask(__name__)
app.config['JSON_AS_ASCII'] = False

@app.route('/brave-search', methods=['GET'])
def brave_search():
    query = request.args.get('q')
    count = request.args.get('count', 10, type=int)

    if not query:
        return jsonify({"error": "缺少必要的参数: query", "code": 400}), 400

    try:
        results = search(query, num_results=count, debug=0)
        formatted_results = []
        for result in results:
            abstract = result.get("abstract", "")
            if abstract:
                abstract = abstract.translate(str.maketrans('', '', ' \r '))
            formatted_results.append({
                "title": result.get("title", ""),
                "url": result.get("url", ""),
                "description": abstract,
                "age": result.get("rank", ""),
            })

        final_result = {"web": {"results": formatted_results}}
        return Response(
            json.dumps(final_result, ensure_ascii=False),
            mimetype='application/json; charset=utf-8',
        )
    except Exception as e:
        logger.error(f"Brave搜索过程中发生错误: {str(e)}")
        return jsonify({"error": f"Brave搜索过程中发生错误: {str(e)}", "code": 500}), 500

if __name__ == '__main__':
    app.run(host='0.0.0.0', port=25000, debug=True)

关键点

这个伪装服务的精妙之处就在于几个细节:

路由路径:设定为 /brave-search,这是接口的入口。

参数名:完全模仿 Brave 的风格,使用 q 代表查询词,count 控制返回数量。

返回结构:严格按照 openclaw 的预期,构造 {"web": {"results": [...]}} 这样的 JSON 结构。

字段:包含 title, url, description, age,一个都不能少。

可以说,整个服务就是照着 openclaw 对 Brave 返回格式的“期望清单”来量身定做的。


1.3 启动 Flask 并自测

代码写好了,现在启动服务看看效果:

python3 baidu-brave-proxy/app.py

服务跑起来后,新开一个终端窗口,用 curl 命令测试一下:

curl -v “http://127.0.0.1:25000/brave-search?q=openclaw&count=1”

如果一切顺利,你会看到类似下面的返回:

{
  “web”: {
    “results”: [
      {
        “title”: “...”,
        “url”: “http://www.baidu.com/link?...”,
        “description”: “...”,
        “age”: 1
      }
    ]
  }
}

看到这个,就说明整条链路已经彻底打通了:

用户查询 → 百度搜索引擎 → baidusearch 库抓取 → Flask 服务转换 → 输出 Brave 风格的 JSON 结果。 伪装工作的前半部分,至此大功告成。


2. 修改 openclaw 的 web_search

光有伪装 API 还不行,得让 openclaw 主动来找它。接下来,我们要修改 openclaw 内部的搜索模块,让它“指鹿为马”。

找到这个关键文件:

/root/.nvm/versions/node/v22.22.0/lib/node_modules/openclaw-cn/dist/agents/tools/web-search.js

2.1 把 Brave endpoint 改成本地 Flask

打开文件,找到定义 Brave 搜索端点的那行代码。原来是这样的:

const BRAVE_SEARCH_ENDPOINT = “https://api.search.brave.com/res/v1/web/search”;

现在,把它指向我们刚刚搭建的本地 Flask 服务:

const BRAVE_SEARCH_ENDPOINT = “http://localhost:25000/brave-search”;

如果你的 Flask 服务跑在另一台机器上,比如内网 IP 是 10.0.0.12,那就改成:

const BRAVE_SEARCH_ENDPOINT = “http://10.0.0.12:25000/brave-search”;

修改后的效果是:

openclaw 的 web_search 工具仍然会按照 Brave 的格式组装参数并发起请求,但这些请求会全部打到你的本地 Flask 服务上,而不是真正的 Brave 官方 API。


2.2 去掉 Brave API Key 强制依赖

Brave 官方 API 是需要密钥的,但我们的假服务不需要。所以还得修改密钥检查逻辑,绕过这个校验。

找到原文件中解析 API Key 的函数,通常是这样的:

function resolveSearchApiKey(search) {
  const fromConfig = search && “apiKey” in search && typeof search.apiKey === “string” ? search.apiKey.trim() : “”;
  const fromEnv = (process.env.BRAVE_API_KEY ?? “”).trim();
  return fromConfig || fromEnv || undefined;
}

把这个函数整个替换掉,直接让它返回一个虚拟的密钥字符串:

function resolveSearchApiKey(search) {
  return “dummy_baidu_proxy_key”;
}

这样一来,就实现了两个关键效果:

首先,系统不会再因为缺少 BRAVE_API_KEY 而抛出 missing_brave_api_key 错误。

其次,虽然请求头里还是会带一个密钥(就是我们设置的 dummy key),但我们的 Flask 服务会完全忽略它,请求照样正常处理。


3. 重启 gateway

代码改完了,必须重启服务才能生效。执行这条命令:

openclaw-cn gateway restart

如果你是用 systemd 管理的服务,也可以用这个命令:

systemctl --user restart openclaw-gateway.service

4. 验证效果

最后一步,验收成果。对 openclaw 发送一个搜索指令试试:

你帮我检索一下今天的前三条新闻

仔细看它的返回。如果看到的结果结构里,provider 字段显示的还是 “brave”,但点开的实际链接却来自 www.baidu.com,类似下面这样:

{
  “provider”: “brave”,
  “results”: [
    {
      “title”: “...”,
      “url”: “http://www.baidu.com/link?...”,
      “siteName”: “www.baidu.com”
    }
  ]
}

那么,恭喜你!

这标志着“狸猫换太子”的计划已经圆满成功。openclaw 依然坚信自己在使用 Brave 搜索,但实际上,背后辛勤工作的,已经是我们熟悉的百度了。

免责声明

本网站新闻资讯均来自公开渠道,力求准确但不保证绝对无误,内容观点仅代表作者本人,与本站无关。若涉及侵权,请联系我们处理。本站保留对声明的修改权,最终解释权归本站所有。

相关阅读

更多
欢迎回来 登录或注册后,可保存提示词和历史记录
登录后可同步收藏、历史记录和常用模板
注册即表示同意服务条款与隐私政策