剪藏#剪藏#蛰伏突破

养“马”系列:一行命令搞定全网搜索!Hermes 从此告别 API 依赖

2026 年 5 月 8 日1 分钟
分享Twitter / XTelegram微博
养“马”系列:一行命令搞定全网搜索!Hermes 从此告别 API 依赖 封面

一、为什么我们需要自己做搜索?

上一篇文章我们实现了在纯 Linux 字符界面跑通 OpenCLI,让 Hermes 摆脱了桌面环境的束缚。但很多朋友反馈,Hermes 自带的搜索功能依然有很多痛点:

要么需要付费 API,token 成本高;要么不稳定,经常被反爬拦截;要么返回结果不完整,无法获取深层内容。

真正的 AI 信息获取,应该是浏览器能看到什么,AI 就能拿到什么。

而 OpenCLI 的 browser 功能,给了我们一个完美的解决方案。它可以完全模拟人类的浏览器行为,打开网页、输入文字、点击按钮、提取内容,不需要任何第三方 API,所有数据都在你的掌控之中。

今天我们就用 OpenCLI 打造一个纯原生的 Bing 搜索技能,让 Hermes 从此拥有自主可控的全网搜索能力。

二、前置准备:OpenCLI 环境

如果你还没有部署 OpenCLI 纯终端环境,请先参考上一篇文章:

养 “马” 系列:无需桌面!Linux 字符界面跑通 OpenCLI,Hermes 自由上网

部署完成后,我们先看一下 opencli browser 的核心命令:

JAVASCRIPT
hyl@hyl:~$ opencli browser -h
Usage: opencli browser [options] [command]
Browser control — navigate, click, type, extract, wait (no LLM needed)
Commands:
  open [options]                 Open URL in automation window
  click [options]             Click element
  type [options]        Click element, then type text
  wait [options]  [value]       Wait for selector, text, time
  eval [options]                  Execute JS in page context
  extract [options]                   Extract page content as markdown
  close                               Close the automation window

这些命令就是我们实现自动化搜索的全部武器。

三、从零打造 Bing 自动化搜索脚本

我们的目标是:一行命令,自动完成 Bing 搜索、翻页、提取所有结果链接、下载网页内容并保存到本地。

经过多次踩坑和优化,最终的脚本解决了所有常见问题:

  • ✅ 模拟人工操作,规避反爬检测

  • ✅ 自动修复带前缀的非法链接

  • ✅ 按日期归档结果,方便清理

  • ✅ 自动去重,不重复下载

  • ✅ 当天多次搜索自动追加索引

3.1 最终可运行脚本

JAVASCRIPT
#!/bin/bash
# ==============================================
# OpenCLI Skill: Bing 搜索(智能追加·自动去重·终极完美版)
# 调用: ./bing_search_skill.sh "关键词" 页数
# 示例: ./bing_search_skill.sh "恒瑞医药" 10
# 新增:当天多次搜索自动追加索引,自动去重,不覆盖
# ==============================================
# ===================== 【暴力修复】awk 分割提取纯 URL =====================
clean_url() {
    local raw="$1"
    # 核心:用 awk -F 'http' 暴力分割,只取 http 以后的部分
    echo "$raw" | awk -F 'http' '{if (NF>1) print "http" $2}' | head -n 1
}
# ===================== 参数校验 =====================
if [ $# -ne 2 ]; then
    echo "❌ 用法: $0 \"搜索关键词\" 翻页数量"
    exit 1
fi
SEARCH_KEY="$1"
TOTAL_PAGES="$2"
# 获取当前日期
CURRENT_DATE=$(date +%Y-%m-%d)
RESULT_DIR="./bing_search_result/${CURRENT_DATE}"
if ! [[ "$TOTAL_PAGES" =~ ^[0-9]+$ ]]; then
    echo "❌ 页数必须是数字"
    exit 1
fi
# 初始化
mkdir -"${RESULT_DIR}/pages"
INDEX_FILE="${RESULT_DIR}/00_搜索索引.txt"
# ✅ 核心修改:如果索引文件不存在才创建,存在则追加
[ ! -"$INDEX_FILE" ] && > "$INDEX_FILE"
# ✅ 核心新增:读取已下载的 URL 列表,用于去重
declare -A DOWNLOADED_URLS
if [ -"$INDEX_FILE" ]; then
    while IFS= read -r line; do
        if [[ "$line" == "链接: "* ]]; then
            url="${line
#链接
: }"
            DOWNLOADED_URLS["$url"]=1
        fi
    done < "$INDEX_FILE"
fi
RESULT_LIST=()
PAGE_ID=1
echo "================================================"
echo "✅ 启动 Bing 搜索"
echo "🔍 关键词: $SEARCH_KEY"
echo "📄 翻页: $TOTAL_PAGES 页"
echo "📅 日期目录: $CURRENT_DATE"
echo "📋 已下载: ${
#DOWNLOADED
_URLS[@]} 个链接"
echo "================================================"
# 1. 打开首
echo -"
[1/3] 打开 Bing"
opencli browser open "https://www.bing.com"
opencli browser wait selector "
#sb
_form_q"
sleep 2
# 2. 搜索
echo -"
[2/3] 执行搜索"
opencli browser type "
#sb
_form_q" "$SEARCH_KEY"
sleep 1
opencli browser click "
#search
_icon"
sleep 3
# 3. 翻页抓取
echo -"
[3/3] 抓取链接"
for ((page=1; page<=TOTAL_PAGES; page++)); do
    echo -"
===== 第 $page 页 ====="
    opencli browser wait selector ".b_algo"
    sleep 2
    PAGE_DATA=$(opencli browser eval "JSON.stringify(Arra
JAVASCRIPT
y.from(document.querySelectorAll('.b_algo h2 a')).map(a => ({title: a.innerText.trim(), url: a.href.trim()})));")
    while IFS= read -r line; do
        title=$(echo "$line" | jq -'.title')
        raw_url=$(echo "$line" | jq -'.url')
        # 核心:awk 暴力分割提取
        url=$(clean_url "$raw_url")
        # 严格校验 + 去重
        if [[ "$url" == http* ]] && [ -"${DOWNLOADED_URLS["$url"]}" ]; then
            # ✅ 制表符分隔
            RESULT_LIST+=("${title}"$'\t'"${url}")
            [ "$raw_url" != "$url" ] && echo "🔧 已修复: $url"
            [ "$raw_url" == "$url" ] && echo "✅ 正常: $title"
        elif [ -"${DOWNLOADED_URLS["$url"]}" ]; then
            echo "⏭️  已下载,跳过: $url"
        else
            echo "⚠️  跳过: $raw_url"
        fi
    done < <(echo "$PAGE_DATA" | jq -'.[]' 2>/dev/null)
    # 翻页
    [ $page -lt $TOTAL_PAGES ] && {
        opencli browser click ".sb_pagN"
        sleep 3
    }
done
# 4. 批量保存(使用原生 opencli web read)
echo -e "
================================================"
echo "开始保存(新增:${
#RESULT
_LIST[@]})"
echo "================================================"
for item in "${RESULT_LIST[@]}"; do
    # ✅ 制表符分割
    title="${item%%$'\t'*}"
    url="${item#*$'\t'}"
    echo -e "
----------------------------------------"
    echo "序号: $PAGE_ID"
    echo "标题: $title"
    echo "✅ 纯链接: $url"
    # ✅ 核心:使用原生 opencli web read 保存网页
    opencli web read \
        --url "$url" \
        --output "$RESULT_DIR/pages" \
        --wait 3 \
        --download-images false
    # ✅ 核心修改:追加索引,不覆盖
    echo "【$PAGE_ID】$title" >> "$INDEX_FILE"
    echo "链接: $url" >> "$INDEX_FILE"
    echo "----------------------------------------" >> "$INDEX_FILE"
    echo >> "$INDEX_FILE"
    PAGE_ID=$((PAGE_ID+1))
done
echo -e "
🎉 全部完成!无任何异常!"
echo "✅ 结果目录: $RESULT_DIR"
echo "📅 日期归档: $CURRENT_DATE"
echo "📋 本次新增: ${
#RESULT
_LIST[@]} 个"
echo "💡 提示:可直接删除旧日期目录进行清理"

3.2 脚本使用方法

  1. 保存脚本为 bing_search_skill.sh

  2. 赋予执行权限:

JAVASCRIPT
chmod +x bing_search_skill.sh
  1. 运行搜索(关键词+页数):
JAVASCRIPT
./bing_search_skill.sh "股票分析skill" 10

3.3 运行结果

脚本会自动生成按日期归档的目录:

JAVASCRIPT
bing_search_result/
└─ 2026-05-03/
   ├─ 00_搜索索引.txt    
# 所有结果的标题+链接索引
   └─ pages/             
# 所有网页的 Markdown 内容
      ├─ 1_股票分析 - 技能市场.md
      ├─ 2_TradingAgents-CN-Skill 股票分析.md
      └─ ...

四、封装为 Hermes Skill,让 AI 自动调用

现在我们把这个脚本封装成 Hermes 技能,以后只需要对 Hermes 说一句话,它就会自动完成搜索并总结结果。

把重复的工作做成 Skill,让 AI 成为你的执行手,而不是你的指挥官。

4.1 创建 SKILL.md 文件

~/.hermes/skills/research/bing-search/ 目录下创建 SKILL.md

JAVASCRIPT
---
name: bing-search
description: 使用 OpenCLI 进行 Bing 自动化搜索,保存网页内容到本地
version: 1.0.0
author: 养马系列
license: MIT
platforms: [linux, macos]
metadata:
  hermes:
    tags: [research, search, opencli, bing]
    category: research
    requires_toolsets: [terminal]
---
# Bing 自动化搜索技能
使用 OpenCLI 模拟人工操作进行 Bing 搜索,自动翻页并保存所有网页内容到本地。
## 何时使用
- 需要获取全网公开信息时
- 需要批量下载搜索结果时
- 其他搜索工具不可用或不稳定时
## 操作步骤
1. 运行脚本:`/path/to/bing_search_skill.sh "关键词" 页数`
2. 脚本会自动完成搜索、翻页、下载
3. 结果保存在 `./bing_search_result/日期/` 目录下
4. 读取 `00_搜索索引.txt` 和 pages 目录下的内容进行总结
## 常见陷阱
- 页数不要设置太大,避免被反爬
- 确保 OpenCLI 环境已正确部署
- 脚本会自动去重,当天多次搜索不会重复下载
## 验证
运行后检查是否生成了日期目录和索引文件

4.2 让 Hermes 使用技能

现在你可以直接对 Hermes 说:

JAVASCRIPT
使用 bing-search 技能搜索"恒瑞医药",翻10页,然后总结核心内容

Hermes 会自动调用脚本完成搜索,然后读取本地保存的所有网页内容,为你生成结构化的总结报告。

五、价值升华:省钱省token才是硬道理

很多人问我,为什么要花这么多功夫自己做搜索?直接用现成的 API 不香吗?

答案其实很朴素:省钱,省token,顺便实现自主可控

现在不管是GPT的联网搜索,还是各种第三方搜索API,全都是按次/按token收费。批量搜10页内容,光搜索API就要花几块钱,再加上大模型总结的token,一次完整的调研可能要十几块。如果每天搜几次,一个月下来就是几百块的成本,这对个人用户来说太不友好了。

个人玩AI,先算成本账。一分钱不花能搞定的事,绝不用付费API。

而用OpenCLI自己做搜索,没有任何API费用,浏览器能看到的内容全免费。更重要的是,所有内容先下载到本地,再让大模型只处理你真正需要的部分,不用把整个网页的广告、导航、无关内容都传给大模型,token消耗直接砍90%。

比如一个网页有1万token,你只需要其中1000字的核心信息,本地先过滤再喂给大模型,一次就能省几千token。积少成多,一个月下来能省出大几百的API费用。

当然,自主可控依然是我们的底线。不用怕API突然涨价、关停,不用怕数据泄露,所有内容都保存在你的本地硬盘,想怎么处理就怎么处理。

拒绝黑盒,拒绝溢价,用最低的成本,实现最可控的效果。

这只是一个开始。接下来我们可以基于这个基础,实现更多省钱玩法:定时监控特定关键词、自动跟踪新闻更新、批量分析竞品信息等等。所有功能都在本地跑,一分钱不花。

如果你在部署过程中遇到了任何问题,或者有更好的优化方案,欢迎在评论区留言交流。我们一起把"养马"这件事做得更好。

© 2026 养马系列技术专栏 | 专注于个人 AI 助手的自主可控与生产力提升

关注我,获取更多 Hermes Agent 实战技巧

原文地址: https://mp.weixin.qq.com/s?__biz=MzI5NDAwOTE1Mw==&mid=2460256710&idx=1&sn=2d9bf05fb96a1afdd844d6a99a79ce1f&chksm=fa343cce0bd79ae81225a10a84475a6a9676ab2d390e29078b3ff3ce1a7094ccaf3af938741e&mpshare=1&scene=1&srcid=050804FSwlivnwru9pOaJGyT&sharer_shareinfo=eeb8ebea091d5b4168680f378ad9aba0&sharer_shareinfo_first=eeb8ebea091d5b4168680f378ad9aba0#rd

相关文章