效果:

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


核心思路(一句话)

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


整件事分三块

  1. 起一个 Flask + baidusearch 的「假 Brave 搜索 API」

  2. 改 openclaw 的 Brave 搜索 endpoint + 去掉 API Key 校验

  3. 重启 gateway,验证搜索结果已经来自百度

操作过程

总结来说,直接上手一句话让openclaw自己配置,然后等着它配完了,我们重启gateway即可验证成功:

大概重启完成后就能够使用,

而且新玩法是可以让他把刚才的操作总结出来让他发博客,下面这些内容都是openclaw总结的:


0. 环境说明

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

确认环境:


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

后面改的源码都在这个 global 安装路径下的 dist 文件里。


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


1.1 安装 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 写代理服务代码

路径:


/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

  • 返回结构:{"web": {"results": [...]}}

  • 字段:title, url, description, age

👉 完全按 openclaw 对 Brave 返回格式的预期来构造。


1.3 启动 Flask 并自测

启动:


python3 baidu-brave-proxy/app.py

测试:


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

路径:


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


2.1 把 Brave endpoint 改成本地 Flask

原代码:


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

改为:


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

如果 Flask 在另一台机器:


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

效果:

web_search 仍然用 Brave 参数格式
但请求实际打到你本地 Flask


2.2 去掉 Brave 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"; }

效果:

  • 不再报 missing_brave_api_key

  • 请求头里带 dummy key

  • Flask 完全忽略


3. 重启 gateway


openclaw-cn gateway restart

或者:


systemctl --user restart openclaw-gateway.service


4. 验证效果

对 openclaw 说:

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

如果返回:


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

说明:

  • provider 仍然是 "brave"

  • 实际链接来自 www.baidu.com

✅ 成功完成“狸猫换太子”。

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐