360 Secure SkillHub
360 安全技能中心

baidu-search-no-python

该Skill指导Agent从用户查询中提取关键字并构造百度AI搜索API请求,最终输出一段curl命令交由Agent执行,用于获取网页实时信息、文档或研究主题。需设置环境变量BAIDU_API_KEY,可用count与freshness控制结果数量和时间范围。文件列表仅含SKILL.md,未附带独立可执行脚本。

zfeng1982
zfeng1982
热度 19.80
最近更新 2026-03-19 23:16:57
分类:搜索依赖:代码执行 / 第三方 API应用场景:研究

安装技能

复制下面的话术发给你的 Agent,它会通过 secure-skills 检索并安装该技能。

执行命令安装此 skill: npx secure-skills-cli add baidu-search-no-python
Metadata
name
baidu-search-no-python
description
Use Baidu AI Search Engine (BDSE) for web search. It can be used to obtain real-time information, documents, or research topics. This version does not require Python installation
metadata
{"openclaw":{"emoji":"🔍︎","requires":{"bins":["shell"],"env":["BAIDU_API_KEY"]},"primaryEnv":"BAIDU_API_KEY"}}

Baidu Search

通过百度AI搜索API搜索网络,但不需要安装python

Usage

请按如下python代码的逻辑来处理用户查询,从用户查询上提取关键字,main函数的query,count,freshness,三个参数怎么填参考Request Parameters 最后返回一个curl命令给agent,如: curl -X POST
-H "Authorization: Bearer $BAIDU_API_KEY"
-H "X-Appbuilder-From: openclaw"
-H "Content-Type: application/json"
-d '{ "messages": [{"content": "最新新闻", "role": "user"}], "search_source": "baidu_search_v2", "resource_type_filter": [{"type": "web", "top_k": 10}], "search_filter": {"range": {"page_time": {"gte": "2025-09-01", "lt": "2025-09-08"}}} }'
"https://qianfan.baidubce.com/v2/ai_search/web_search"

Request Parameters

Param Type Required Default Description
query str yes - Search query
count int no 10 Number of results to return, range 1-50
freshness str no Null Time range, two formats: format one is ”YYYY-MM-DDtoYYYY-MM-DD“, and format two includes pd, pw, pm, and py, representing the past 24 hours, past 7 days, past 31 days, and past 365 days respectively
def baidu_search(api_key, requestBody: dict):
    url = "https://qianfan.baidubce.com/v2/ai_search/web_search"

    headers = {
        "Authorization": "Bearer %s" % api_key,
        "X-Appbuilder-From": "openclaw",
        "Content-Type": "application/json"
    }

    # 使用POST方法发送JSON数据
    response = requests.post(url, json=requestBody, headers=headers)
    response.raise_for_status()
    results = response.json()
    if "code" in results:
        raise Exception(results["message"])
    datas = results["references"]
    keys_to_remove = {"snippet"}
    for item in datas:
        for key in keys_to_remove:
            if key in item:
                del item[key]
    return datas


if __name__ == "__main__":
    if len(sys.argv) < 2:
        print("Usage: python baidu_search.py <Json>")
        sys.exit(1)

    query = sys.argv[1]
    parse_data = {}
    try:
        parse_data = json.loads(query)
        print(f"success parse request body: {parse_data}")
    except json.JSONDecodeError as e:
        print(f"JSON parse error: {e}")

    if "query" not in parse_data:
        print("Error: query must be present in request body.")
        sys.exit(1)
    count = 10
    search_filter = {}
    if "count" in parse_data:
        count = int(parse_data["count"])
        if count <= 0:
            count = 10
        elif count > 50:
            count = 50
    current_time = datetime.now()
    end_date = (current_time + timedelta(days=1)).strftime("%Y-%m-%d")
    pattern = r'\d{4}-\d{2}-\d{2}to\d{4}-\d{2}-\d{2}'
    if "freshness" in parse_data:
        if parse_data["freshness"] in ["pd", "pw", "pm", "py"]:
            if parse_data["freshness"] == "pd":
                start_date = (current_time - timedelta(days=1)).strftime("%Y-%m-%d")
            if parse_data["freshness"] == "pw":
                start_date = (current_time - timedelta(days=6)).strftime("%Y-%m-%d")
            if parse_data["freshness"] == "pm":
                start_date = (current_time - timedelta(days=30)).strftime("%Y-%m-%d")
            if parse_data["freshness"] == "py":
                start_date = (current_time - timedelta(days=364)).strftime("%Y-%m-%d")
            search_filter = {"range": {"page_time": {"gte": start_date, "lt": end_date}}}
        elif re.match(pattern, parse_data["freshness"]):
            start_date = parse_data["freshness"].split("to")[0]
            end_date = parse_data["freshness"].split("to")[1]
            search_filter = {"range": {"page_time": {"gte": start_date, "lt": end_date}}}
        else:
            print(f"Error: freshness ({parse_data['freshness']}) must be pd, pw, pm, py, or match {pattern}.")
            sys.exit(1)

    # We will pass these via env vars for security
    api_key = os.getenv("BAIDU_API_KEY")
    if not api_key:
        print("Error: BAIDU_API_KEY must be set in environment.")
        sys.exit(1)
    request_body = {
        "messages": [
            {
                "content": parse_data["query"],
                "role": "user"
            }
        ],
        "search_source": "baidu_search_v2",
        "resource_type_filter": [{"type": "web", "top_k": count}],
        "search_filter": search_filter
    }
    try:
        results = baidu_search(api_key, request_body)
        print(json.dumps(results, indent=2, ensure_ascii=False))
    except Exception as e:
        print(f"Error: {str(e)}")
        sys.exit(1)

Current Status

Fully functional.