znlgis 博客

GIS开发与技术分享

第十一章:语音、视觉、浏览器与子代理协作

本章把 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(免费)、elevenlabsopenaiminimaxvoxtralgeminixaineutts(本地)、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_modelauxiliary_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_* 工具:navigatesnapshotvisionclicktypeformselect_optionscreenshotpress_keyextract

工作流通常这样:

  1. browser_navigate(url=...)
  2. browser_snapshot() 拿到结构化 a11y tree;
  3. 模型根据 ref 决定下一步:browser_click(ref="button-id-3") / browser_type(ref="input-search", text="...")
  4. 必要时 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 子代理”什么也不知道”

子代理 没有父代理对话历史,必须把所有上下文写进 goalcontext

# ❌ 不好:子代理不知道"那个错误"是什么
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 总结了几种高频套路:

  1. Map-Reduce:把”对每个项目都执行 X” 拆给 N 个子代理,最后由父代理 reduce;
  2. Researcher / Writer:一个调研、一个总结,避免上下文混杂;
  3. Parallel Code Surgeons:3 个子代理在 3 个 worktree 上并行改不同模块;
  4. Fast Triage:父代理只决定”哪个分支重要”,每条分支扔给子代理细化;
  5. 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 训练)、安全与最佳实践。