如何用几句话让 openclaw “变成百度搜索”
效果:
在不改任何上层 prompt、不写一行「百度适配插件」的情况下,让 openclaw 以为自己还在调用 Brave Search,实际底层悄悄走百度。
核心思路(一句话)
用一个本地 Flask 服务伪装 Brave Search 接口 → openclaw 仍然调用
web_search(brave)→ 实际走百度。
整件事分三块
-
起一个 Flask + baidusearch 的「假 Brave 搜索 API」
-
改 openclaw 的 Brave 搜索 endpoint + 去掉 API Key 校验
-
重启 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
✅ 成功完成“狸猫换太子”。
更多推荐
所有评论(0)