字节笔记本
2026年6月21日
hermes教程-Web 搜索与提取
Web 搜索与提取
Hermes Agent 包含两个可由模型调用的 Web 工具,由多个提供商支持:
web_search— 搜索网络并返回排序后的结果web_extract— 从一个或多个 URL 获取并提取可读内容
两者均通过单一后端选择进行配置。提供商通过 hermes tools 选择,或直接在 config.yaml 中设置。
后端
| 提供商 | 环境变量 | 搜索 | 提取 | 免费层 |
|---|---|---|---|---|
| Firecrawl(默认) | FIRECRAWL_API_KEY | ✔ | ✔ | 500 积分/月 |
| SearXNG | SEARXNG_URL | ✔ | — | ✔ 免费(自托管) |
| Brave Search(免费层) | BRAVE_SEARCH_API_KEY | ✔ | — | 2,000 次查询/月 |
| DDGS(DuckDuckGo) | —(无需密钥) | ✔ | — | ✔ 免费 |
| Tavily | TAVILY_API_KEY | ✔ | ✔ | 1,000 次搜索/月 |
| Exa | EXA_API_KEY | ✔ | ✔ | 1,000 次搜索/月 |
| Parallel | PARALLEL_API_KEY | ✔ | ✔ | 付费 |
| xAI(Grok) | XAI_API_KEY 或 hermes auth login xai-oauth | ✔ | — | 付费(SuperGrok 或按 token 计费) |
Brave Search、DDGS 和 xAI 是仅搜索 — 当您还需要 web_extract 时,可将它们与 Firecrawl/Tavily/Exa/Parallel 配对使用。DDGS 底层使用 ddgs Python 包;如果尚未安装,请运行 pip install ddgs(或让 Hermes 在首次使用时延迟安装)。xAI 在 Responses API 上运行 Grok 的服务器端 web_search 工具 — 结果由 LLM 生成而非索引支持,因此标题、描述和 URL 选择均为模型输出(请参阅下面的信任模型注意事项)。
按能力拆分: 您可以为搜索和提取独立使用不同的提供商 — 例如,使用 SearXNG(免费)进行搜索,使用 Firecrawl 进行提取。请参阅下面的按能力配置。
提示 — Nous 订阅者
如果您拥有付费的 Nous Portal 订阅,则可通过 工具网关 使用托管的 Firecrawl 进行 Web 搜索和提取 — 无需 API 密钥。新安装可运行
hermes setup --portal登录并一次性启用所有网关工具;现有安装可通过hermes tools仅切换 Web 功能。
web_extract 如何处理长页面
后端返回原始页面 Markdown,可能非常庞大(论坛帖子、文档站点、带有嵌入评论的新闻文章)。为了保持上下文窗口可用并降低成本,web_extract 在将返回内容交给代理之前,会通过 web_extract 辅助模型 进行处理。行为完全由大小驱动:
| 页面大小(字符数) | 处理方式 |
|---|---|
| 小于 5,000 | 原样返回 — 不调用 LLM,完整 Markdown 到达代理 |
| 5,000 – 500,000 | 通过 web_extract 辅助模型进行单次摘要,输出上限约 5,000 字符 |
| 500,000 – 2,000,000 | 分块处理:拆分为 100k 字符块,并行摘要每个块,然后合成最终摘要(约 5,000 字符) |
| 超过 2,000,000 | 拒绝并提示使用更聚焦的源 URL |
摘要保留引用、代码块和关键事实的原始格式 — 它是内容压缩器,而非释义器。如果摘要失败或超时,Hermes 会回退到原始内容的前约 5,000 字符,而不是返回无用的错误。
哪个模型负责摘要?
web_extract 辅助任务。默认情况下(auxiliary.web_extract.provider: "auto"),这是您的主聊天模型 — 与 hermes model 相同的提供商和模型。对于大多数设置来说这没问题,但在昂贵的推理模型(Opus、MiniMax M2.7 等)上,每次长页面提取都会增加可观的成本。
要将提取摘要路由到廉价、快速的模型(无论主模型是什么):
## ~/.hermes/config.yaml
auxiliary:
web_extract:
provider: openrouter
model: google/gemini-3-flash-preview
timeout: 360 # 秒;如果遇到摘要超时,请增加此值或者交互式选择:hermes model → 配置辅助模型 → web_extract。
有关完整参考和按任务覆盖模式,请参阅辅助模型。
当摘要成为障碍时
如果您特别需要原始、未摘要的页面内容 — 例如,您正在抓取一个结构化页面,而 LLM 摘要会丢失重要字段 — 请改用 browser_navigate + browser_snapshot。浏览器工具返回实时无障碍树,无需辅助模型重写(对于超大页面,受其自身 8,000 字符的快照上限限制)。
设置
通过 hermes tools 快速设置
运行 hermes tools,导航到 Web 搜索与提取,然后选择一个提供商。向导会提示输入所需的 URL 或 API 密钥,并将其写入您的配置。
hermes toolsFirecrawl(默认)
功能齐全的搜索和提取。推荐给大多数用户。
## ~/.hermes/.env
FIRECRAWL_API_KEY=fc-your-key-here在 firecrawl.dev 获取密钥。免费层包含每月 500 积分。
自托管 Firecrawl: 指向您自己的实例而非云 API:
## ~/.hermes/.env
FIRECRAWL_API_URL=http://localhost:3002当设置了 FIRECRAWL_API_URL 时,API 密钥是可选的(使用 USE_DB_AUTHENTICATION=false 禁用服务器认证)。
SearXNG(免费,自托管)
SearXNG 是一个注重隐私的开源元搜索引擎,聚合了 70 多个搜索引擎的结果。无需 API 密钥 — 只需将 Hermes 指向一个正在运行的 SearXNG 实例即可。
SearXNG 是仅搜索 — web_extract 需要单独的提取提供商。
选项 A — 使用 Docker 自托管(推荐)
这将为您提供一个无速率限制的私有实例。
1. 创建工作目录:
mkdir -p ~/searxng/searxng
cd ~/searxng2. 编写 docker-compose.yml:
## ~/searxng/docker-compose.yml
services:
searxng:
image: searxng/searxng:latest
container_name: searxng
ports:
- "8888:8080"
volumes:
- ./searxng:/etc/searxng:rw
environment:
- SEARXNG_BASE_URL=http://localhost:8888/
restart: unless-stopped3. 启动容器:
docker compose up -d4. 启用 JSON API 格式:
SearXNG 默认禁用 JSON 输出。复制生成的配置并启用它:
## 从容器中复制自动生成的配置
docker cp searxng:/etc/searxng/settings.yml ~/searxng/searxng/settings.yml打开 ~/searxng/searxng/settings.yml,找到 formats 块(大约在第 84 行):
## 之前(默认 — JSON 禁用):
formats:
- html
## 之后(为 Hermes 启用 JSON):
formats:
- html
- json5. 重启以应用:
docker cp ~/searxng/searxng/settings.yml searxng:/etc/searxng/settings.yml
docker restart searxng6. 验证是否正常工作:
curl -s "http://localhost:8888/search?q=test&format=json" | python3 -c \
"import sys,json; d=json.load(sys.stdin); print(f'{len(d[\"results\"])} results')"您应该会看到类似 10 results 的输出。如果收到 403 Forbidden,说明 JSON 格式仍未启用 — 请重新检查步骤 4。
7. 配置 Hermes:
## ~/.hermes/.env
SEARXNG_URL=http://localhost:8888然后在 ~/.hermes/config.yaml 中选择 SearXNG 作为搜索后端:
web:
search_backend: "searxng"或者通过 hermes tools → Web 搜索与提取 → SearXNG 设置。
选项 B — 使用公共实例
公共 SearXNG 实例列表在 searx.space。筛选出已启用 JSON 格式的实例(在表格中显示)。
## ~/.hermes/.env
SEARXNG_URL=https://searx.example.com注意 — 公共实例
公共实例有速率限制、不稳定的正常运行时间,并且可能随时禁用 JSON 格式。对于生产环境,强烈建议自托管。
将 SearXNG 与提取提供商配对
SearXNG 处理搜索;您需要单独的提供商用于 web_extract。使用按能力键:
## ~/.hermes/config.yaml
web:
search_backend: "searxng"
extract_backend: "firecrawl" # 或 tavily, exa, parallel使用此配置,Hermes 对所有搜索查询使用 SearXNG,对 URL 提取使用 Firecrawl — 将免费搜索与高质量提取相结合。
Tavily
AI 优化的搜索和提取,提供慷慨的免费层。
## ~/.hermes/.env
TAVILY_API_KEY=tvly-your-key-here在 app.tavily.com 获取密钥。免费层包含每月 1,000 次搜索。
Exa
具有语义理解的神经搜索。适合研究和查找概念相关的内容。
## ~/.hermes/.env
EXA_API_KEY=your-exa-key-here在 exa.ai 获取密钥。免费层包含每月 1,000 次搜索。
Parallel
AI 原生搜索和提取,具有深度研究能力。
## ~/.hermes/.env
PARALLEL_API_KEY=your-parallel-key-here在 parallel.ai 获取访问权限。
xAI(Grok){#xai-grok}
通过 Grok 的服务器端 web_search 工具 在 Responses API 上路由 web_search。Grok 执行实际搜索,并将顶部结果作为结构化 JSON 返回。
适用于任一凭证路径 — 无需新的环境变量,无需新的设置向导:
## ~/.hermes/.env(环境变量路径)
XAI_API_KEY=sk-xai-your-key-here或对于 SuperGrok 订阅者:
hermes auth login xai-oauth然后选择 xAI 作为搜索后端:
## ~/.hermes/config.yaml
web:
backend: "xai"可选参数:
web:
backend: "xai"
xai:
model: grok-build-0.1 # web_search 所需的推理模型(默认)
allowed_domains: # 可选,最多 5 个 — 与 excluded_domains 互斥
- arxiv.org
excluded_domains: # 可选,最多 5 个
- example-spam.com
timeout: 90 # 秒(默认)仅搜索 — 如果还需要 web_extract,请与 Firecrawl / Tavily / Exa / Parallel 配对。在 401 错误时,提供商执行一次强制 OAuth 令牌刷新并重试(涵盖窗口内撤销和主动过期检查无法解码的不透明令牌);环境变量凭证跳过重试。
注意 — 信任模型
与返回逐字搜索引擎结果的索引支持提供商(Brave、Tavily、Exa)不同,xAI 是一个 LLM,它选择要展示的 URL 并自行编写标题和描述。查询的内容会影响输出,因此恶意构造的查询(例如,通过代理拾取的不可信上游输入注入)原则上可以引导 Grok 发出攻击者选择的 URL。请像对待任何模型生成的链接一样对待返回的 URL — 在获取之前进行验证,特别是当查询来自不可信输入时。
配置
单一后端
为所有 Web 功能设置一个提供商:
## ~/.hermes/config.yaml
web:
backend: "searxng" # firecrawl | searxng | brave-free | ddgs | tavily | exa | parallel | xai按能力配置
为搜索和提取使用不同的提供商。这允许您将免费搜索(SearXNG)与付费提取提供商结合,反之亦然:
## ~/.hermes/config.yaml
web:
search_backend: "searxng" # 由 web_search 使用
extract_backend: "firecrawl" # 由 web_extract 使用当按能力键为空时,两者都回退到 web.backend。当 web.backend 也为空时,后端会根据存在的 API 密钥/URL 自动检测。
优先级顺序(按能力):
web.search_backend/web.extract_backend(显式按能力)web.backend(共享回退)- 从环境变量自动检测
自动检测
如果没有显式配置后端,Hermes 会根据设置的凭证选择第一个可用的:
| 存在的凭证 | 自动选择的后端 |
|---|---|
FIRECRAWL_API_KEY 或 FIRECRAWL_API_URL | firecrawl |
PARALLEL_API_KEY | parallel |
TAVILY_API_KEY | tavily |
EXA_API_KEY | exa |
SEARXNG_URL | searxng |
xAI Web 搜索不在自动检测链中 — 设置 XAI_API_KEY(或通过 xAI Grok OAuth 登录)不会自动将 Web 流量路由到 xAI,因为这些凭证也用于推理 / TTS / 图像生成,用户可能希望为 Web 使用不同的后端。请使用 web.backend: "xai" 显式选择。
验证您的设置
运行 hermes setup 查看检测到的 Web 后端:
✅ Web 搜索与提取 (searxng)
或通过 CLI 检查:
## 激活虚拟环境并直接运行 Web 工具模块
source ~/.hermes/hermes-agent/.venv/bin/activate
python -m tools.web_tools这将打印活动后端及其状态:
✅ Web 后端: searxng
使用 SearXNG(仅搜索):http://localhost:8888故障排除
web_search 返回 {"success": false}
- 检查
SEARXNG_URL是否可达:curl -s "http://localhost:8888/search?q=test&format=json" - 如果收到 HTTP 403,说明 JSON 格式已禁用 — 在
settings.yml的formats列表中添加json并重启 - 如果收到连接错误,容器可能未运行:
docker ps | grep searxng
web_extract 提示“仅搜索后端”
SearXNG 无法提取 URL 内容。将 web.extract_backend 设置为支持提取的提供商:
web:
search_backend: "searxng"
extract_backend: "firecrawl" # 或 tavily / exa / parallelSearXNG 返回 0 个结果
某些公共实例禁用了某些搜索引擎或类别。请尝试:
- 不同的查询
- 来自 searx.space 的不同公共实例
- 自托管您自己的实例以获得可靠结果
在公共实例上遇到速率限制
切换到自托管实例(请参阅上面的选项 A)。使用 Docker,您自己的实例没有速率限制。
web_extract 返回截断的内容并带有“摘要超时”提示
辅助模型未在配置的超时时间内完成摘要。请执行以下任一操作:
- 在
config.yaml中增加auxiliary.web_extract.timeout(新安装默认 360 秒,如果缺少该键则默认为 30 秒) - 将
web_extract辅助任务切换到更快的模型(例如google/gemini-3-flash-preview)— 请参阅web_extract如何处理长页面 - 对于摘要不合适的页面,请改用
browser_navigate
可选技能:searxng-search
对于需要通过 curl 直接使用 SearXNG 的代理(例如,当 Web 工具集不可用时作为回退),请安装 searxng-search 可选技能:
hermes skills install official/research/searxng-search这将添加一个技能,教导代理如何:
- 通过
curl或 Python 调用 SearXNG JSON API - 按类别(
general、news、science等)过滤 - 处理分页和错误情况
- 在 SearXNG 不可用时优雅地回退