第十一章:语音、视觉、浏览器与子代理协作
本章把 Hermes 中”动手干活”色彩最强的几个能力放到一起讲:语音模式(Voice Mode)、视觉与图像生成(Vision / Image Generation)、浏览器自动化(Browser Automation)、子代理委派与并行(Delegation)、以及与之配合的 Goals / Todo / Kanban。配合前面章节,你将获得一个真正”能听、能看、能上网、能让小弟跑腿”的小型 ops 团队。
11.1 语音模式(Voice Mode)
11.1.1 三种语音形态
| 形态 | 平台 | 描述 |
|---|---|---|
| CLI 即按即说 | TUI | Ctrl+B 启动录音,自动 VAD(静音检测),转写后发出去 |
| 自动语音回复 | Telegram、Discord、企业微信、Slack(部分) | 文字回复同时附加 TTS 音频 |
| Discord 语音频道 | Discord VC | bot 加入语音频道,直接听人说话、说话回应 |
11.1.2 安装
pip install "hermes-agent[voice]" # CLI 录音/播放
pip install "hermes-agent[messaging]" # Discord/Telegram(含 discord.py[voice])
pip install "hermes-agent[tts-premium]" # ElevenLabs
python -m pip install -U "neutts[all]" # 可选本地 NeuTTS
或一把:
pip install "hermes-agent[all]"
11.1.3 STT(Speech-to-Text)
主流候选:
- OpenAI Whisper API(默认);
- Groq Whisper(极快,便宜);
- 本地 whisper.cpp;
- MiniMax / Voxtral(Mistral)。
voice:
stt:
provider: groq # openai / groq / whisper-cpp / minimax / voxtral
model: whisper-large-v3
language: zh-CN # 留空自动检测
11.1.4 TTS(Text-to-Speech)
10 个原生 provider:
edge-tts(免费)、elevenlabs、openai、minimax、voxtral、gemini、xai、neutts(本地)、kittentts(本地)、piper(本地)—— 加自定义 command provider(任何 CLI)。
voice:
tts:
provider: elevenlabs
voice_id: <your-voice-id>
rate: 1.0
fallback:
- provider: openai
voice: alloy
- provider: edge-tts
voice: zh-CN-XiaoxiaoNeural
按平台开关:
gateway:
telegram:
auto_voice_reply: true
discord:
auto_voice_reply: false
voice_channels:
- 1234567890123456
11.1.5 Discord 语音频道
gateway:
discord:
voice_channels:
- 1234567890123456
bot 加入指定 VC,对每个发言用户分流:检测说话者 → STT → 触发 Agent → TTS → 通过相应通道回。多人会话也能区分讲话者(基于 Discord 提供的发言者 ID)。
11.1.6 语音消息(Telegram / WhatsApp / 企业微信)
发语音 → Hermes 自动 STT → 当作文本进入会话 → 文字回 + TTS 音频。无须额外配置,只要 STT/TTS 配好即可。
11.1.7 性能贴士
- STT 优先 Groq(毫秒级);
- TTS 中文场景,本地 Edge TTS 性价比极高;
- Discord VC 端到端延迟约 800ms-2s;想再低需自托管 STT+TTS;
hermes config set voice.local_audio_buffer_ms 200调缓冲。
11.2 视觉(Vision)
11.2.1 输入:图片粘贴 / 文件 / 截图
- TUI 中:复制截图后输入
@clipboard即可直接粘进对话; - 任意 IM 平台收到图片附件会自动作为 vision input;
read_file ./pic.png也能让模型看到(Hermes 会自动 base64 + 检测 mime)。
11.2.2 模型选择
主模型若支持视觉(Claude Opus 4.6、GPT-5、Gemini 2.5 Pro、Qwen3-VL、MiniMax-VL 等)则直接用;否则降级到 vision_model 或 auxiliary_model:
vision_model: openrouter/openai/gpt-4o
11.2.3 工具:vision_analyze
主动分析非对话流图片:
vision_analyze(image_path="./screenshot.png",
prompt="找出截图里所有按钮的文字和位置")
适合让 Agent 在跑工具流程的中间”看一眼某张图”。
11.3 图像生成(Image Generation)
image_generate(prompt="赛博朋克风格的猫坐在键盘上", model="flux-2-pro", size="1024x1024")
支持 9 个模型(FLUX 2 Klein/Pro、GPT-Image 1.5/2、Nano Banana Pro、Ideogram V3、Recraft V4 Pro、Qwen-Image、Z-Image Turbo),后端是 FAL.ai:
FAL_KEY=...
image_generation:
default_model: flux-2-pro
订阅 Nous Portal 的话用 Tool Gateway 后端,无须 FAL Key。
11.4 浏览器自动化(Browser Automation)
11.4.1 5 种后端
| Backend | 描述 | 适用 |
|---|---|---|
browserbase |
Browserbase 云 | 生产、零本地依赖 |
browseruse |
Browser Use 云 | 同上 |
cdp |
连本地 Chrome(已登录) | 借用我的登录态做”我自己”操作 |
chromium-local |
Playwright + 本地 Chromium | 离线、可控 |
playwright-mcp |
走 MCP | 进阶混编 |
切换:hermes tools → browser → backend。
11.4.2 工具集
10 个 browser_* 工具:navigate、snapshot、vision、click、type、form、select_option、screenshot、press_key、extract。
工作流通常这样:
browser_navigate(url=...);browser_snapshot()拿到结构化 a11y tree;- 模型根据 ref 决定下一步:
browser_click(ref="button-id-3")/browser_type(ref="input-search", text="..."); - 必要时
browser_vision()拿截图分析。
snapshot 是 a11y tree(结构化),比”裸看像素”快得多准得多——这是 Hermes 一贯推荐。
11.4.3 何时用 browser,何时用 web_extract
- 需要 登录态、JS 渲染、点点点 → browser;
- 静态页面 / 文章 / 文档 →
web_extract即可,省 token。
11.4.4 常见任务
帮我打开淘宝订单页,统计本月订单总额并截图
打开 GitHub Releases 页,挑出最近 5 个 release 的标题和正文,整理成 changelog
记得:让浏览器 bot 操作敏感账户前一定要 审批列入白名单 + 用 cdp 借用你登录态而非保存账号。
11.5 子代理委派(Delegation)
11.5.1 单任务
delegate_task(
goal="为这次部署写一份 rollback playbook",
context="服务在 prod-cluster-2 上跑 v1.4.7,回滚目标 v1.4.6;DB 迁移文件 0042_..."
toolsets=["file", "terminal"]
)
11.5.2 并行批量
delegate_task(tasks=[
{"goal": "调研 OpenAI 最近 5 篇博客", "toolsets": ["web"]},
{"goal": "调研 Anthropic 最近 5 篇博客", "toolsets": ["web"]},
{"goal": "调研 DeepMind 最近 5 篇博客", "toolsets": ["web"]},
])
默认 3 并发,可通过 delegation.max_concurrent 调整:
delegation:
max_concurrent: 5
iteration_budget_per_subagent: 30
11.5.3 子代理”什么也不知道”
子代理 没有父代理对话历史,必须把所有上下文写进 goal 与 context:
# ❌ 不好:子代理不知道"那个错误"是什么
delegate_task(goal="Fix the error")
# ✅ 好:子代理收到完整上下文
delegate_task(
goal="Fix the TypeError in api/handlers.py",
context="""
路径:~/code/myapp/api/handlers.py:47
报错:'NoneType' object has no attribute 'get'
根因猜测:parse_body() 在 Content-Type 缺失时返回 None
项目使用 Python 3.11,pytest 运行 `make test`。
"""
)
只有 结构化总结 会回到父代理:做了什么、改了哪些文件、未解决问题列表。这意味着你不会被子代理的”思考过程”塞爆主上下文。
11.5.4 经典模式(patterns)
guides/delegation-patterns.md 总结了几种高频套路:
- Map-Reduce:把”对每个项目都执行 X” 拆给 N 个子代理,最后由父代理 reduce;
- Researcher / Writer:一个调研、一个总结,避免上下文混杂;
- Parallel Code Surgeons:3 个子代理在 3 个 worktree 上并行改不同模块;
- Fast Triage:父代理只决定”哪个分支重要”,每条分支扔给子代理细化;
- Sandboxed Risky Op:把”可能跑坏的命令”扔给子代理在隔离 docker 后端跑。
11.5.5 与 Kanban 的差异
delegate_task 是 同步函数调用:父代理 fork→join,子代理跑完 / 失败就结束;适合”我等几分钟就要这个答案”。
Kanban 是 持久消息队列 + 状态机:跨代理、跨重启、跨人;适合”几小时甚至几天的复杂工作”。
可以混用:一个 Kanban worker 内部继续 delegate_task 做一次研究。
11.6 Goals 与 Todo
todo 工具维护当前会话的”下一步清单”,模型自己写自己读。常见用于:
- 用户开局给一个大任务 → 模型先写 todo → 一项项执行;
/todo查看当前列表;- 子代理被 dispatch 时也会把分解后的子目标写进 todo。
goals 系统更进一步(user-guide/features/goals.md):你可以给某个 Profile 或 Kanban board 设”长期 goal”,cron / 启动时它会主动检查是否在朝这个 goal 走。例如把”今年学完 Rust”作为 goal,Hermes 会每周帮你回顾进度。
11.7 Kanban 工作流(再次拓展)
第十章已经讲过 Kanban 的概念。这里给一个”实操”层面的简短工作流模板:
# 1) 一次性:建一个 board
hermes kanban board create research
# 2) dispatcher profile:把 epic 拆成 task
hermes profile use dispatcher
hermes
> 我要做一份关于"国产开源大模型在工具调用上的对比"的报告。请帮我拆分。
# 3) researcher profile:拿一个 task 深挖
hermes profile use researcher
hermes
> /kanban claim T-1 --as researcher
# 4) writer profile:拼报告
hermes profile use writer
hermes
> /kanban claim T-7 --as writer
> /report-style style=academic
每个 profile 都是独立 ~/.hermes/profiles/<name>/:独立记忆、独立 SOUL.md、独立 personality preset。Kanban 是它们之间唯一的通信通道——任何人都能读、写、评论。
11.8 Hermes Web Dashboard
hermes web start --host 0.0.0.0 --port 7860
提供:
- 跨平台对话浏览(CLI/Telegram/…);
- Cron / Webhook 状态;
- Kanban 看板视图;
- 会话搜索;
- Trajectory 浏览。
适合 Gateway 服务化部署后给团队管理员用。详见 user-guide/features/web-dashboard.md。
11.9 ACP:在 IDE 里用 Hermes
hermes acp serve
在 VS Code / Zed / JetBrains 安装 ACP 客户端 → 指向 Hermes acp endpoint。你会得到:聊天、工具调用、文件 diff、终端执行、通通在 IDE 内。详见 user-guide/features/acp.md。
11.10 API Server:自托管 ChatGPT
hermes api start --host 0.0.0.0 --port 8000
任何兼容 OpenAI Chat 格式的前端都能接(Open WebUI、LobeChat、LibreChat、ChatBox、Cherry Studio)。这是把 Hermes 暴露给团队浏览器用户最简单的方式。
详见 user-guide/features/api-server.md。
11.11 实战:一个”多模态 ops 助理”的设置清单
# ~/.hermes/config.yaml 节选
model: anthropic/claude-opus-4.6
auxiliary_model: openrouter/openai/gpt-5-mini
vision_model: openrouter/openai/gpt-4o
voice:
stt: { provider: groq, model: whisper-large-v3, language: zh-CN }
tts: { provider: elevenlabs, voice_id: ... }
terminal:
backend: docker
docker: { image: ghcr.io/nousresearch/hermes-sandbox:latest }
browser:
backend: chromium-local
delegation:
max_concurrent: 4
iteration_budget_per_subagent: 25
gateway:
telegram: { enabled: true, auto_voice_reply: true }
discord:
enabled: true
voice_channels: [1234567890123456]
mcp_servers:
github: { command: npx, args: [-y, "@modelcontextprotocol/server-github"] }
cron:
jobs:
- name: morning-brief
schedule: "0 9 * * 1-5"
prompt: "生成今日早报"
skills: [blogwatcher, github-pr-workflow]
targets: [telegram://${MY_CHAT_ID}]
效果:你早 9 点收到 Telegram 早报、白天 IM 聊天、Discord VC 直接说话;任何复杂任务自动 fork 子代理;浏览器/终端都隔离在 docker;多模态视觉/图像生成全打通。
11.12 本章小结
- 语音模式:CLI 推送即聊、IM 自动语音回复、Discord 语音频道,三种形态全覆盖;
- 视觉:多模态主模型 + 视觉辅助模型,图片粘贴即用;
- 图像生成:FAL 9 个模型,订阅用户走 Tool Gateway 零配置;
- 浏览器:5 种后端 + 10 个工具,a11y tree 优先;
- 子代理:
delegate_task同步并行、Kanban 异步持久,二者互补; - Goals/Todo:让 Agent 永远有”下一步”;
- Web Dashboard / ACP / API Server:让 Hermes 与 IDE、团队、浏览器前端无缝串起来。
最后一章我们补齐工程师视角:插件开发、研究功能(批量轨迹与 RL 训练)、安全与最佳实践。