openclaw源码改造对接百度搜索引擎

2026-05-05阅读 0热度 0
搜索引擎 人工智能

传送门:

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的默认搜索能力“本土化”了。

免责声明

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

相关阅读

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