openclaw源码改造对接百度搜索引擎
传送门:
Moltbot(Clawdbot)对接本地大模型完整配置指南(一)
Moltbot(Clawdbot)对接飞书channel(二)
背景
用过OpenClaw的朋友可能注意到了,它默认集成的搜索工具只支持Brave和Perplexity。这两者都是国外的搜索引擎,不仅存在访问门槛,往往还需要注册并获取API密钥才能使用。这给国内开发者和用户带来了一些不便。于是,一个很自然的想法就出现了:能不能把默认的搜索工具换成我们更熟悉、更易用的百度呢?答案是肯定的。本篇就将带你一步步改造代码,用百度搜索引擎来替代原有的Brave搜索。
模拟Brave服务端接口
核心思路其实很清晰:我们需要一个“翻译器”,把OpenClaw发出的、符合Brave格式的搜索请求,“翻译”成对百度搜索的调用,然后再将百度的返回结果“包装”成Brave的格式回传回去。用Python的Flask框架可以轻松实现这个“中间层”服务。
下面这段代码,就是利用 baidusearch 这个库,封装了一个Brave格式的接口:
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__)
# 确保JSON输出中中文正常显示,而不是Unicode编码
app.config['JSON_AS_ASCII'] = False
@app.route('/brave-search', methods=['GET'])
def brave_search():
"""
Brave风格搜索API接口 - 支持TS客户端调用
参数:
query: 搜索关键词 (必填)
count: 返回结果数量 (可选,默认10)
country: 国家代码 (可选)
search_lang: 搜索语言 (可选)
ui_lang: 用户界面语言 (可选)
freshness: 内容新鲜度 (可选)
"""
# 获取请求参数
query = request.args.get('q')
count = request.args.get('count', 10, type=int)
country = request.args.get('country')
search_lang = request.args.get('search_lang')
ui_lang = request.args.get('ui_lang')
freshness = request.args.get('freshness')
# 参数校验
if not query:
return jsonify({
"error": "缺少必要的参数: query",
"code": 400
}), 400
try:
# 执行搜索
results = search(query, num_results=count, debug=0)
# 格式化结果以匹配BraveSearchResponse结构
formatted_results = []
for result in results:
# 清理摘要中的空白字符
abstract = result.get("abstract", "")
if abstract:
abstract = abstract.translate(str.maketrans('', '', ' \r\n'))
formatted_result = {
"title": result.get("title", ""),
"url": result.get("url", ""),
"description": abstract,
"age": result.get("rank", "") # 假设rank字段表示内容的新鲜度
}
formatted_results.append(formatted_result)
# 构建最终返回的JSON结果
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)
从openclaw源码修改brave的接口地址
服务端准备好了,接下来就得告诉OpenClaw:“别去找原来的Brave了,来访问我们本地新建的这个接口吧。”修改的位置非常明确,在OpenClaw源码的 openclaw-2026.2.2\src\agents\tools\web-search.ts 文件中。
具体操作就是注释掉原有的 BRAVE_SEARCH_ENDPOINT 常量定义,将其指向我们本地启动的Flask服务地址:
const SEARCH_PROVIDERS = ["brave", "perplexity"] as const;
const DEFAULT_SEARCH_COUNT = 5;
const MAX_SEARCH_COUNT = 10;
// const BRAVE_SEARCH_ENDPOINT = "https://api.search.brave.com/res/v1/web/search";
const BRAVE_SEARCH_ENDPOINT = "http://localhost:25000/brave-search";
const DEFAULT_PERPLEXITY_BASE_URL = "https://openrouter.ai/api/v1";
const PERPLEXITY_DIRECT_BASE_URL = "https://api.perplexity.ai";
const DEFAULT_PERPLEXITY_MODEL = "perplexity/sonar-pro";
从源码编译安装openclaw
代码修改完成后,需要重新编译安装OpenClaw,才能使改动生效。这一步完全遵循官方流程,参考官方文档 https://docs.openclaw.ai/install 中的源码安装步骤,依次执行以下命令即可:
git clone https://github.com/openclaw/openclaw.git
cd openclaw
pnpm install
pnpm ui:build # auto-installs UI deps on first run
pnpm build
openclaw onboard --install-daemon
演示效果
一切就绪后,真正的考验来了。安装完毕后,我们可以在对话中尝试询问一些最新的、动态的消息,看看它是否真的通过我们搭建的百度搜索接口来获取信息。
从上图可以看到,web_search 工具已经成功调用了baidu进行搜索,并将结果返回给了大模型来组织回答。这证明我们的改造是成功的。
再来看看在飞书群聊中的实际执行效果:
效果符合预期,智能体能够基于百度搜索的结果,给出贴合最新情况的回复。至此,我们就成功地将OpenClaw的默认搜索能力“本土化”了。

