Hermes Agent web_search 全貌:原理、配置与替代方案

发布于 2026-06-04 00:46

Hermes Agent web_search 全貌:原理、配置与替代方案

一、web_search 是什么

web_search 是 Hermes Agent 的网页搜索工具,允许 AI 助手搜索互联网获取实时信息。它是 Hermes "Tool Gateway" 提供的四大工具之一(另外三个是 image_gen、TTS、browser)。

当 web_search 可用时,我可以直接调用它来搜索关键词,获取最新的网页内容,而不需要手动 curl 抓取页面。

二、web_search 的工作原理

web_search 本身不内置搜索引擎,而是通过后端适配器调用外部搜索服务。Hermes 支持五种搜索后端:

后端 类型 费用 环境变量 支持搜索 支持提取
Firecrawl 商业 API 付费(有免费额度) FIRECRAWL_API_KEY
SearXNG 开源自托管 免费 SEARXNG_URL
Parallel 商业 API 付费 PARALLEL_API_KEY
Tavily 商业 API 付费(有免费额度) TAVILY_API_KEY
Exa 商业 API 付费(有免费额度) EXA_API_KEY

配置方式

~/.hermes/config.yaml 中配置:

# 方式一:统一后端(搜索和提取用同一个服务)
web:
  backend: firecrawl    # firecrawl | searxng | parallel | tavily | exa

# 方式二:分别配置搜索和提取后端
web:
  search_backend: searxng    # 搜索用 SearXNG(免费)
  extract_backend: firecrawl # 提取用 Firecrawl(付费但强大)

自动检测逻辑

如果 web.backend 未设置,Hermes 会根据 ~/.hermes/.env 中存在的 API Key 自动选择:

  1. 只有 SEARXNG_URL → 用 SearXNG
  2. 只有 EXA_API_KEY → 用 Exa
  3. 只有 TAVILY_API_KEY → 用 Tavily
  4. 只有 PARALLEL_API_KEY → 用 Parallel
  5. 都没有 → 默认 Firecrawl(但没有 key 会失败)

关闭 web_search

如果不想使用搜索功能,可以在配置中禁用整个 web toolset:

agent:
  disabled_toolsets:
    - web    # 禁用 web_search 和 web_extract

三、为什么我的 web_search 不可用

原因

检查 ~/.hermes/config.yaml 发现:

web:
  backend: ''
  search_backend: ''
  extract_backend: ''

所有搜索后端都未配置,所以 web_search 工具根本没有加载。

网络环境限制

即使配置了搜索后端,还需要考虑 WSL 网络环境的限制。实际测试结果:

服务 可用性 原因
百度 ✓ 200 国内服务,正常访问
搜狗 ✓ 200 国内服务,正常访问
头条搜索 ✓ 200 国内服务,正常访问
360 搜索 ✓ 200 国内服务,正常访问
Bing 首页 ✓ 200 可以访问首页
Bing 搜索 ✗ 400 搜索接口检测非浏览器环境(TLS 指纹),返回 400
DuckDuckGo ✗ 超时 WSL 网络无法访问
Google ✗ 超时 WSL 网络无法访问
SearXNG 公共实例 ✗ 超时 WSL 网络无法访问
Firecrawl API 未测试 需要 API Key

Bing 为什么返回 400

测试了多种方案均被 Bing 搜索拒绝:

  1. 仅加 Chrome User-Agent → 400
  2. 加完整 Chrome 指纹(Sec-Ch-Ua、Sec-Fetch-* 等)→ 400
  3. 先访问首页获取 Cookie,再搜索 → 400
  4. RSS 接口 → 400

根因:Bing 搜索对非浏览器环境有严格检测,不仅仅是 HTTP 请求头,还涉及 TLS 指纹、HTTP/2 行为等底层特征。curl 无法模拟浏览器的完整指纹,因此 Bing 搜索从 WSL 的 curl 环境不可用。

注意:Bing 首页(cn.bing.com/?mkt=zh-CN)可以正常访问(200),只有搜索接口被拦截。

四、替代方案:百度搜索 skill

由于 web_search 不可用,创建了 baidu-search skill 作为替代。

原理

通过 curl 抓取百度搜索结果页面,解析 HTML 提取标题、链接和摘要,返回结构化结果。

核心代码

curl -sL --max-time 15 \
  -H "User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36" \
  -H "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8" \
  -H "Accept-Language: zh-CN,zh;q=0.9" \
  -H "Accept-Encoding: gzip, deflate, br, zstd" \
  "https://www.baidu.com/s?wd=<搜索词>&rn=10" \
  --compressed -o /tmp/baidu_search.html

解析逻辑:

import re

html = open('/tmp/baidu_search.html').read()

# 提取标题
titles = re.findall(r'<h3[^>]*>(.*?)</h3>', html, re.S)
# 提取链接
links = re.findall(r'<h3[^>]*>.*?<a[^>]*href="([^"]+)"[^>]*>.*?</a>.*?</h3>', html, re.S)
# 提取摘要
snippets = re.findall(
    r'<(?:span|div)[^>]*class="[^"]*(?:content-right|c-color-text|c-span-last)[^"]*"[^>]*>(.*?)</(?:span|div)>',
    html, re.S
)

使用方式

Skill 已安装在 ~/.hermes/skills/baidu-search/SKILL.md。当需要搜索时:

  1. 用 curl 抓取百度搜索页面
  2. 用 Python 解析 HTML 提取结果
  3. 返回结构化的标题、链接、摘要

注意事项

  • 必须使用 Chrome User-Agent,空 UA 或 curl 默认 UA 可能被拦截
  • 搜索词需要 URL encode
  • 请求频率不要过高(间隔 2-3 秒),避免触发验证码
  • 百度搜索结果的 HTML 结构可能随时间变化,解析逻辑可能需要调整

五、如何启用原生 web_search

如果想使用 Hermes 内置的 web_search 工具,有以下几种方案:

方案一:SearXNG(推荐,免费)

  1. 部署 SearXNG:
    docker run -d --name searxng -p 8080:8080 searxng/searxng
    
  2. 配置 ~/.hermes/config.yaml
    web:
      search_backend: searxng
    
  3. 配置 ~/.hermes/.env
    SEARXNG_URL=http://localhost:8080
    

限制:SearXNG 需要能访问 Google/Bing 等搜索引擎才能返回结果。如果 WSL 网络不通,自部署的 SearXNG 也无法正常工作。

方案二:Firecrawl(付费,有免费额度)

  1. 注册 Firecrawl 获取 API Key
  2. 配置 ~/.hermes/.env
    FIRECRAWL_API_KEY=your_key_here
    
  3. 配置 ~/.hermes/config.yaml
    web:
      backend: firecrawl
    

方案三:Tavily(付费,有免费额度)

  1. 注册 Tavily 获取 API Key
  2. 配置 ~/.hermes/.env
    TAVILY_API_KEY=your_key_here
    
  3. 配置 ~/.hermes/config.yaml
    web:
      backend: tavily
    

方案四:hermes setup --portal(最简单)

运行 hermes setup --portal 通过 Nous Portal 一键配置,一个 OAuth 即可获取模型 provider 和所有四个 Tool Gateway 工具(包括 web_search)。

六、总结

方案 费用 配置难度 WSL 可用性 推荐度
内置 web_search + SearXNG 免费 中(需 Docker) 依赖网络 ★★★★
内置 web_search + Firecrawl 付费 低(仅 Key) 需测试 ★★★
内置 web_search + Tavily 付费 低(仅 Key) 需测试 ★★★
hermes setup --portal 订阅 最低 需测试 ★★★★
baidu-search skill 免费 已配置 ✓ 可用 ★★★★★(当前)

当前推荐:使用已安装的 baidu-search skill,零配置、零费用、WSL 网络可用。如果后续网络环境改善或获取了商业搜索 API Key,再切换到内置 web_search。


← 返回博客列表