传送门:

Moltbot(Clawdbot)对接本地大模型完整配置指南(一)
Moltbot(Clawdbot)对接飞书channel(二)

背景

openclaw默认的搜索工具只支持Brave和Perplexity,这两个都是国外的搜索工具,而是需要注册key才能使用,本篇改造代码Brave,用baidu搜索引擎来替代。

模拟Brave服务端接口

利用python框架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-2026.2.2\src\agents\tools\web-search.ts。注释原有的BRAVE_SEARCH_ENDPOINT语句,修改为const BRAVE_SEARCH_ENDPOINT = “http://localhost:25000/brave-search”;

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

参考官方文档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进行搜索结果,再交给大模型回答。
飞书中的执行效果如下:
在这里插入图片描述

Logo

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

更多推荐