词元之母TOK.MOM - 平台充值汇率 1:1 即 1 人民币充值到账 1 美元,支持一个 Key 调用近 600+ 海内外模型,限时特价模型低至 1 折,欢迎上岸!
web_search、web_extract 以及(可选的)深度爬取工具调用。内置提供商——Firecrawl、SearXNG、Tavily、Exa、Parallel、Brave Search(免费层)和 DDGS——均以插件形式存放于 plugins/web/<name>/ 目录下。你可以在该目录旁新建一个目录来添加新提供商,或覆盖已有的内置提供商。<repo>/plugins/web/<name>/(以 kind: backend 自动加载,始终可用)~/.hermes/plugins/web/<name>/(通过 plugins.enabled 或 hermes plugins enable <name> 按需启用)hermes_agent.plugins 入口点的包register(ctx) 函数调用 ctx.register_web_search_provider(...) ——将实例注册到 agent/web_search_registry.py 中的注册表。各能力的活跃提供商由配置决定:| 能力 | 配置键 | 回退至 |
|---|---|---|
web_search | web.search_backend | web.backend |
web_extract | web.extract_backend | web.backend |
web_extract 内的深度爬取模式 | web.extract_backend | web.backend |
hermes tools 会引导用户完成选择。plugins/web/my-backend/
├── __init__.py # register() 入口点
├── provider.py # WebSearchProvider 子类
└── plugin.yaml # 包含 kind: backend 和 provides_web_providers 的清单文件brave_free/ 和 ddgs/ 是代码库中最小的参考实现——brave_free 是需要 API key 的纯搜索提供商,ddgs 是无需 key 且懒加载 SDK 的提供商。agent.web_search_provider.WebSearchProvider。唯一必须实现的成员是 name、is_available(),以及你所实现的 search() / extract() / crawl() 中的相应方法。| 键 | 用途 |
|---|---|
kind: backend | 将插件路由至后端加载路径 |
provides_web_providers | 该插件注册的提供商 name 列表——在 register() 运行之前,加载器即可通过此字段在 hermes tools 中公示插件 |
requires_env | 在 hermes plugins install 期间进行交互式凭据提示(富格式说明参见构建 Hermes 插件) |
agent/web_search_provider.py。可覆盖的方法如下:| 成员 | 必须 | 默认值 | 用途 |
|---|---|---|---|
name | ✅ | — | 在 web.*_backend 配置中使用的稳定 id |
display_name | — | name | 在 hermes tools 中显示的标签 |
is_available() | ✅ | — | 轻量可用性检查——环境变量、可选依赖等 |
supports_search() | — | True | web_search 路由的能力标 志 |
supports_extract() | — | False | web_extract 路由的能力标志 |
search(query, limit) | 条件必须 | 抛出异常 | 当 supports_search() 返回 True 时必须实现 |
extract(urls, **kwargs) | 条件必须 | 抛出异常 | 当 supports_extract() 返回 True 时必须实现 |
search() 和 extract() 均可定义为 async def——调度器通过 inspect.iscoroutinefunction 检测协程函数并相应地进行 await。对于小型后端,执行阻塞 I/O(HTTP、SDK 调用)的同步实现也完全可行;调度器会处理线程调度。supports_* 标志将调用路由至正确的提供商。一种常见的多提供商配置:web.search_backend 或 web.extract_backend 未设置时,均回退至 web.backend。若该项也未设置,Hermes 将根据环境变量的存在情况,选取第一个支持所请求能力的可用提供商。False)即可,注册表会在对应工具调用时跳过它——当用户仅将 X 用于搜索而要求 agent 进行提取时,不会看到误导性的"提供商 X 失败"错误。web_search 和 web_extract 工具位于 tools/web_tools.py。调用时执行以下步骤:web_search 对应 web.search_backend,web_extract 对应 web.extract_backend)name 的提供商is_available() 及对应的 supports_*() 标志search() / extract() / crawl(),若方法为协程则进行 awaithermes tools 的友好错误信息。ddgs 包),请勿在模块顶层 import。在 is_available() 或 search() 内部使用 tools.lazy_deps.ensure(...) ——Hermes 将在首次使用时安装该包,并受 security.allow_lazy_installs 控制。安全模型详见构建 Hermes 插件 → 懒加载。plugins/web/brave_free/ — 小型、需要 API key 的纯搜索 HTTP 提供商。适合作为起始模板。plugins/web/ddgs/ — 无需 key、懒加载 SDK 的提供商。适用于封装 Python 包的后端。plugins/web/firecrawl/ — 完整的多能力提供商(搜索 + 提取 + 爬取),支持多种格式模式。plugins/web/searxng/ — 自托管、通过 URL 配置、无需认证的后端。plugins/web/xai/ — 通过 Grok 服务端 web_search 工具实现的 LLM 驱动搜索。展示了如何复用现有的 OAuth/环境变量凭据(tools/xai_http.py)而无需新增环境变量,以及如何编写遵守无网络调用约定的轻量 is_available()。# pyproject.toml
[project.entry-points."hermes_agent.plugins"]
my-backend-web = "my_backend_web_package"my_backend_web_package 必须暴露顶层 register 函数。完整配置说明参见通用插件指南中的通过 pip 分发。