这次我们来看 Hermes 多智能体系列的第 2 集,主题是 Kanban 看板 + Gateway 网关。如果第 1 集你已经跑通了 Agent 的基础对话和工具调用,那么第 2 集解决的是更实际的问题:任务跑了一半断了怎么办?Agent 怎么做到 7×24 小时待命?多个模型服务、多个工具 API 怎么统一接入?
先说结论。Hermes 这一集加进来的两个组件,一个负责“任务状态管理”,一个负责“请求统一入口”。Kanban 看板负责任务持久化,把任务从内存里的临时状态变成磁盘上有记录、有状态、可恢复的管理项;Gateway 网关负责统一接收外部请求、校验身份、把请求路由给合适的 Agent 或模型服务。两者配合起来,多智能体系统才真正具备长期运行的条件。
这篇文章我会按实际操作顺序展开:先看核心能力和适用场景,再给环境准备清单和部署启动步骤,然后用一套标准验证流程测看板持久化和网关转发,最后是接口调用、批量任务、资源占用观察和常见报错排查。内容偏工程落地,建议收藏备用。
1. 核心能力速览
在开始部署之前,先把 Hermes 多智能体这套体系在第 2 集的核心能力放在一张表里。
| 能力项 | 说明 |
|---|---|
| 项目类型 | 多智能体编排与任务管理系统,第 2 集重点新增看板与网关两个组件 |
| 核心功能 | Kanban 看板任务持久化、Gateway 网关统一路由、Agent 7×24 待命、多模型/多工具接入 |
| 任务持久化 | 任务从内存状态改为看板记录,重启后可恢复,支持中断后再执行 |
| 网关能力 | 统一入口、身份鉴权、请求转发、模型路由、工具路由 |
| 启动方式 | 从常见部署结构看,通常通过启动脚本拉起 Gateway 服务,再启动桌面端/看板端 |
| 看板 UI | 以 Kanban 看板形式展示任务状态,便于人工干预和排查 |
| API 能力 | 网关提供 HTTP/WebSocket 接口,可接入外部调用方 |
| 批量任务 | 看板任务可排队、可重试,适合批量任务场景 |
| 硬件要求 | 取决于接入的模型推理方式;纯 Gateway 和看板服务对显存无硬性要求,模型服务另行计算 |
| 适合场景 | 多智能体协作、长时任务、后台自动化、需要任务审计和恢复的本地部署 |
这里要特别说明一点,Hermes 这套系统在不同版本里的组件名和启动方式可能有差异。下面的部署流程和排查思路,我按“Gateway 未启动时先运行 windows-start.bat 或 mac-start.command”这类常见做法展开,实际以你下载的版本为准。
2. 适用场景与使用边界
2.1 适合谁
适合这几类人:
- 已经在用 Hermes 第 1 集跑通 Agent,但觉得任务不可控、断了就丢的人。
- 需要把多个 Agent、多个模型服务或多个工具 API 统一管理,不想在每台机器上各开一套代理的人。
- 希望实现“任务发出去就不管,Agent 自己排队、执行、汇总”的自动化流程的人。
- 做 Agent 开发,需要给上层应用提供稳定接口的人。
2.2 解决什么问题
多智能体系统最常见的问题有三个:任务状态不透明、服务入口不统一、进程挂了全丢。
Kanban 看板解决状态不透明。每个任务从创建、排队、执行中、成功到失败,都有明确状态。你可以直接在看板上看到哪个 Agent 在处理、当前进度如何、失败原因是什么。
Gateway 网关解决入口不统一。外部调用方不用关心背后有几个 Agent、接的是哪个模型服务,只需要访问网关暴露的接口,由网关去做路由、鉴权和转发。这样一来,后续新增 Agent 或切换模型,对调用方无感。
两者结合起来,才是“Agent 7×24 待命”的工程基础。
2.3 不适合什么场景
- 如果你是做超大规模的生产级任务调度,Hermes 的看板和网关更偏向中小型本地部署和团队协作,不能直接等同于 Kubernetes Job 或专业消息队列。
- 如果没有认真配置鉴权和网络安全,不要把 Gateway 直接暴露到公网。
- 如果你的任务需要秒级实时响应,网关转发和看板状态写入会带来一定延迟,需要先做压测再决定是否上线。
2.4 合规与安全边界
这一条必须单独强调。多智能体系统会调用模型、读写文件、执行工具,甚至可能操作外部平台。使用过程中需要注意:
- 接入模型服务、工具 API 时,确认是否有相应授权和密钥管理机制,不要硬编码密钥到公开仓库。
- 涉及人像、声音、隐私数据或版权素材的任务,必须提前确认授权范围。
- 不要在未授权环境中爬取数据、群发消息或执行敏感操作。
- 看板任务记录可能包含 Prompt 和工具调用结果,注意日志脱敏。
- 公网访问前必须配置 Token 或白名单,避免网关被未授权调用。
3. 环境准备与前置条件
3.1 最低环境检查清单
在动手之前,先过一遍环境。Hermes 多智能体系统的运行环境并不复杂,但以下内容必须确认:
| 检查项 | 建议 |
|---|---|
| 操作系统 | Windows 10/11、macOS 或主流 Linux 发行版 |
| 启动脚本 | Windows 环境准备 windows-start.bat,macOS 环境准备 mac-start.command |
| 运行时 | 根据版本要求安装 Node.js 或 Python,版本以项目文档为准 |
| 浏览器 | 访问看板 UI 使用现代浏览器,推荐 Chrome/Edge |
| 本地模型服务 | 如果使用本地模型,需要准备 Ollama、vLLM 或对应推理服务 |
| 端口 | 为 Gateway、看板 UI、本地模型服务预留端口,避免冲突 |
| 磁盘空间 | 日志和任务数据会增长,预留至少 10GB 比较稳妥 |
3.2 依赖安装
如果是源码方式部署,先安装基础依赖。不同版本依赖不同,下面给一个通用思路:
# 前端/桌面端常见依赖 npm install # 或 yarn# Python 后端常见依赖,创建虚拟环境后安装 python -m venv .venv source .venv/bin/activate # Windows 用 .venv\Scripts\activate pip install -r requirements.txt如果你拿到的是整合包或者一键启动包,通常不需要手动安装依赖,直接运行启动脚本即可。
3.3 模型服务准备
Hermes 多智能体本身不是一个模型,它需要对接模型推理服务。你可以选择:
- 本地模型:Ollama、vLLM 等,用本地 7B/14B 模型做测试。
- 云模型 API:按需接入。
- 网关模型路由:Gateway 统一管理多个模型服务的路由地址。
从常见报错信息看,比较容易踩的坑是“网关虽已启动,但无法访问后端的模型服务”,例如 502 Bad Gateway,原因往往是后端模型服务没有起来或地址填错。所以部署前建议先把模型服务单独测通。
4. 安装部署与启动方式
4.1 首次启动顺序
从 Hermes 这类桌面端多智能体系统的常见启动结构来看,顺序很重要:先启动 Gateway,再启动看板/桌面端。否则你会看到类似这样的提示:“Gateway 未启动 · 请先运行 windows-start.bat 或 mac-start.command”。
Windows 下:
:: windows-start.bat 示例,实际内容以项目脚本为准 @echo off echo Starting Hermes Gateway... start cmd /k "node gateway.js" echo Starting Hermes Dashboard... start cmd /k "node dashboard.js" pausemacOS / Linux 下:
# mac-start.command 对应逻辑 ./gateway start ./dashboard start这里特别提醒:不要同时开两个启动脚本。常见问题是先启动桌面端,再启动网关,结果桌面端启动时没有检测到网关,报“gateway not reachable at ws://127.0.0.1:18789”。遇到这种问题,按顺序重启即可。
4.2 访问看板
Gateway 启动成功后,打开浏览器访问看板地址。从典型的本地部署结构看,看板地址通常是http://127.0.0.1:端口/,具体端口以启动日志为准。
首次进入看板,建议先完成两步:
- 确认网关状态显示为“已连接”。
- 粘贴或设置 Gateway Token,如果看到“unauthorized: gateway token missing”,一般是 Token 未配置或粘贴不完整。
4.3 验证网关是否真正可用
启动完成后,不要急着创建任务。先看网关是否真的能转发请求。可以这样检查:
# 查看网关状态接口,地址以实际部署为准 curl http://127.0.0.1:端口/health预期返回ok或类似状态。如果返回 502,说明网关起来了但后端的模型服务不可达;如果连接被拒绝,说明网关本身还没起来。
5. 功能测试与效果验证
5.1 创建看板任务
进入看板后,新建一个任务。任务需要包含:任务名称、指派 Agent、执行内容。
| 字段 | 示例 | 说明 |
|---|---|---|
| 任务名称 | 抓取产品页并生成摘要 | 看板上显示的名称 |
| 指派 Agent | web-agent | 由哪个 Agent 执行 |
| 执行内容 | 访问指定 URL,提取标题和正文,生成 200 字摘要 | Agent 的指令 |
| 优先级 | 高 | 影响看板排序 |
创建后,任务应该进入看板的“待处理”或“排队”列。
5.2 测试任务执行与状态流转
任务进入看板后,让 Agent 执行。这里需要重点观察状态流转:
- 排队中:Agent 还没开始处理。
- 执行中:Agent 正在调用模型和工具。
- 成功:任务完成,输出结果写回看板。
- 失败:任务中断或执行出错,看板保留错误日志。
判断成功标准:看板任务状态从“执行中”变为“成功”,并且结果栏里能看到 Agent 返回的内容。
5.3 测试任务持久化
这是第 2 集的关键功能。测试方法:
- 创建一个耗时任务,让 Agent 开始执行。
- 在任务执行过程中,主动关掉 Hermes 桌面端或重启进程。
- 重新启动 Gateway 和看板。
- 检查原任务是否仍然存在,状态是否恢复到“排队中”或“执行中”。
如果任务在看板中保留,且 Agent 可以继续处理,说明持久化生效。如果任务丢失,说明看板数据没有正确落盘,需要检查数据目录权限和配置。
5.4 测试“Agent 7×24 待命”的效果
7×24 待命不是指 Agent 进程不能重启,而是任务状态不丢、服务可恢复。
更完整的测试流程:
- 在看板中创建多个不同优先级的任务。
- 等一部分任务执行完成后,再重启 Gateway。
- 观察已完成任务的结果是否保留,未完成任务是否继续排队。
- 查看网关日志,确认重启后 Agent 是否重新注册。
通过这组测试,才能确认系统是否具备“长时间无人值守”的能力。
5.5 测试多 Agent 路由
如果 Hermes 里配置了多个 Agent,可以在看板中分别指派不同 Agent,看 Gateway 是否能把任务路由到正确的 Agent。可以通过一个简单任务验证:
- 创建任务,指派给
research-agent。 - 再创建任务,指派给
code-agent。 - 查看 Gateway 日志,确认请求被转发到不同的 Agent 执行器。
如果两个任务都执行成功,说明网关路由正常。
6. Gateway 网关接口与批量任务
6.1 网关接口能力
从多智能体网关的通用设计看,Gateway 通常会对外提供以下接口能力:
| 接口能力 | 说明 |
|---|---|
| 健康检查 | 判断网关是否存活 |
| 创建任务 | 向看板投递新任务 |
| 查询任务状态 | 根据任务 ID 查询执行进度 |
| 获取执行结果 | 获取任务输出 |
| 列出 Agent | 查看当前可用的 Agent |
| WebSocket 推送 | 实时推送任务状态变化 |
具体的路径和请求格式需要以实际版本为准。下面给一个通用的调用模板。
6.2 curl 调用示例
# 通用示例:创建任务,实际路径以项目文档为准 curl -X POST http://127.0.0.1:端口/api/tasks \ -H "Content-Type: application/json" \ -H "Authorization: Bearer YOUR_GATEWAY_TOKEN" \ -d '{ "title": "生成一篇技术博客大纲", "agent": "writer-agent", "payload": "主题:多智能体看板与网关" }'# 通用示例:查询任务状态 curl http://127.0.0.1:端口/api/tasks/{task_id} \ -H "Authorization: Bearer YOUR_GATEWAY_TOKEN"如果返回 401 或 “gateway token missing”,说明请求头没有带对 Token,需要登录看板页复制完整 Token。
6.3 Python 批量提交任务
批量任务场景下,可以先在本地写一个脚本,读取 CSV 或 JSON 文件中的任务列表,通过网关接口逐个投递。
import json import time import requests GATEWAY_URL = "http://127.0.0.1:端口" TOKEN = "YOUR_GATEWAY_TOKEN" HEADERS = { "Content-Type": "application/json", "Authorization": f"Bearer {TOKEN}" } tasks = [ {"title": "任务1", "agent": "web-agent", "payload": "抓取 A 页面并总结"}, {"title": "任务2", "agent": "web-agent", "payload": "抓取 B 页面并总结"}, {"title": "任务3", "agent": "web-agent", "payload": "抓取 C 页面并总结"}, ] for task in tasks: response = requests.post(f"{GATEWAY_URL}/api/tasks", json=task, headers=HEADERS, timeout=30) if response.status_code != 200: print(f"提交失败: {task['title']}, {response.text}") continue task_id = response.json().get("task_id") print(f"任务已提交: {task['title']}, task_id={task_id}") time.sleep(1) # 避免瞬间请求过多6.4 批量任务看板结构
如果看板支持批量任务,建议把任务数据组织成下面的 JSON 格式再投递:
{ "batch_id": "batch-20250615-001", "tasks": [ { "title": "批量任务 1", "agent": "web-agent", "payload": "..." }, { "title": "批量任务 2", "agent": "web-agent", "payload": "..." } ] }批量任务最重要的是失败重试。建议在脚本里记录每个任务的 task_id,执行失败后单独重投递,而不是整批重跑。
6.5 WebSocket 实时状态监听
看板 UI 能实时更新,通常依赖 Gateway 提供的 WebSocket 通道。如果你要写外部工具,可以监听任务状态变化。
# 伪代码:WebSocket 监听任务状态,实际 Endpoint 以项目为准 import websocket ws_url = "ws://127.0.0.1:端口/ws/tasks" ws = websocket.WebSocket() ws.connect(ws_url, header=["Authorization: Bearer YOUR_GATEWAY_TOKEN"]) while True: message = ws.recv() print("收到状态更新:", message)如果 WebSocket 连接失败并提示 “gateway not reachable at ws://127.0.0.1:18789”,优先检查网关进程是否在运行、端口是否被改。
7. 资源占用与性能观察
7.1 看板和网关本身的资源消耗
从架构上看,看板服务和网关服务的资源消耗相对模型推理要小得多。主要是 Node.js 或 Python 进程的内存开销,加上任务数据的磁盘读写。对普通开发机来说不是瓶颈,真正吃资源的是后端模型服务。
7.2 显存占用
Hermes 的看板和网关不直接占用显存。显存占用取决于 Agent 所调用的模型推理服务:
- 如果接入本地 7B 模型,显存占用通常在 6GB 到 10GB 之间,具体看量化格式和上下文长度。
- 如果接入 API 模型,本地显存基本不增加。
- 如果同时接入视觉模型、TTS 模型等,显存需要按多个模型叠加计算。
观察显存可以这样做:
- Linux 下用
nvidia-smi查看。 - Windows 下用任务管理器 GPU 栏或
nvidia-smi命令。 - 测试时把上下文长度、批量数调低,记录峰值显存。
7.3 推理参数对性能的影响
多智能体任务里影响性能的主要因素:
| 因素 | 影响 |
|---|---|
| 模型上下文长度 | 上下文越长,显存占用和首 token 延迟越高 |
| 并发任务数 | 并发越多,网关转发的压力越大,模型推理排队越明显 |
| Agent 工具调用次数 | 每次工具调用都会产生多轮模型请求,耗时成倍增加 |
| 日志级别 | 日志写入过多会影响看板响应,建议生产环境用 info 级 |
| 数据库/落盘频率 | 任务持久化写入频率过高时,磁盘 IO 会成为瓶颈 |
7.4 如何降低资源占用
- 先用单 Agent、短任务验证,不要一上来就开 10 个 Agent 并发。
- 批量任务加上限速,每提交一个任务间隔 1 到 2 秒。
- 模型服务开启流式输出,避免一次性生成超长内容导致内存暴涨。
- 长时间无人值守时,设置日志轮转,避免日志文件占满磁盘。
- 如果多个 Agent 共用同一模型服务,建议在网关上配置队列长度和超时时间。
8. 常见问题与排查方法
这一节直接给排查清单。在 Hermes 多智能体部署和日常使用中,下面是出现频率比较高的报错。
| 问题现象 | 可能原因 | 排查方式 | 解决方案 |
|---|---|---|---|
| Gateway 未启动 · 请先运行 windows-start.bat 或 mac-start.command | 网关服务没有先于看板启动,或者网关进程退出 | 查看启动日志,确认是否出现监听端口信息 | 按顺序重启,先启动网关,再启动看板 |
| unexpected status 502 bad gateway: unknown error, url: http://127.0.0.1:1572 | 网关已经启动,但后端模型服务或目标服务不可达 | 单独访问后端服务地址,确认模型服务是否在监听 | 启动对应模型服务,检查网关配置里的后端地址 |
| unexpected status 502 bad gateway: unknown error, url: http://127.0.0.1:15721/v1/responses | 网关转发到本地模型的 /v1/responses 失败,模型服务未就绪或路径不对 | 用 curl 直接请求模型服务地址,看是否正常返回 | 确认模型服务版本和 OpenAI 兼容接口路径 |
| gateway: not reachable at ws://127.0.0.1:18789 | 网关 WebSocket 端口无法连接 | 检查端口占用,确认网关进程存活 | 先启动网关,或修改端口后重启 |
| unauthorized: gateway token missing | 请求接口时未带 Token 或 Token 为空 | 检查请求头 Authorization 字段 | 打开看板地址,复制完整 Token 后重新粘贴 |
| gateway token missing (open the dashboard url and paste the token) | 桌面端配置里 Token 为空 | 查看配置文件中的 token 字段 | 从看板页面复制 token 写入配置 |
| the agent execution provider did not respond in time | Agent 执行器超时,模型推理或工具调用时间过长 | 查看执行器日志,确认卡在模型请求还是工具调用 | 调大超时时间,或者降低任务复杂度 |
| unexpected status 502 bad gateway: cc switch local proxy failed while handling | 本地代理切换失败,网关请求没有走通本地代理 | 检查本地代理状态,确认代理端口和鉴权配置 | 重启代理服务,或使用直连模式 |
| doesn't look like an anthropic model: expected a gateway model route reference | 网关模型路由配置不正确,把普通模型误配置为特定协议格式 | 查看模型路由配置,确认模型类型与协议匹配 | 按实际模型服务类型修改网关路由配置 |
8.1 端口冲突处理
如果启动后页面打不开,先用命令检查端口:
# Windows netstat -ano | findstr 18789 # Linux / macOS lsof -i:18789如果端口被占,修改网关配置中的端口,然后重启进程。注意修改端口后,看板配置里的网关地址也要同步改。
8.2 任务持久化失败排查
如果重启后任务丢失,按下面的顺序排查:
- 看板数据目录是否有写入权限。
- 是否有多个实例同时写同一个数据目录。
- 是否开启了一半进程直接 kill,数据未落盘。
- 磁盘空间是否已满。
8.3 模型路由错误
如果网关配置了多个模型,使用时报“expected a gateway model route reference”,通常是路由配置没写对。建议单独用一个模型测试,逐个增加路由,不要一次配很多模型再排错。
9. 最佳实践与合规建议
9.1 落地部署建议
从工程角度,我给几条建议:
- 先跑通最小闭环。第一次部署不要配置复杂 Agent,先创建一个单 Agent 简单任务,确认看板和网关都正常。
- 留一套最小可运行配置。把能跑通的 Gateway 配置、看板配置、启动脚本另存一份,遇到问题可以快速回滚。
- 目录要分开。模型文件、输入素材、输出结果、日志分别建目录,避免互相污染。
- 批量任务加日志。每次提交的任务,记录 task_id、提交时间、执行状态到本地日志,失败后能精确重试。
- 网关服务限制访问范围。本地部署时监听 127.0.0.1,避免 0.0.0.0 暴露到局域网;需要远程访问时先加 Token 和 IP 白名单。
- 关注项目更新。Agent 框架迭代快,升级前先备份配置,不要直接覆盖。
9.2 合规使用提醒
多智能体的能力越强,使用边界越要清晰。下面几条是底线:
- 不未经授权采集他人数据、调用未授权接口。
- 不利用 Agent 批量生成、分发未经核实的内容。
- 涉及人像、声音、版权素材时,先确认授权。
- 不在公网裸奔,不把网关 Token 提交到公开仓库。
- 对看板中的 Prompt 和结果做脱敏,避免敏感信息泄露。
10. 总结与下一步
这一集最值得尝试的是任务持久化和网关路由。如果你已经在用 Hermes 跑多智能体,先做一次“创建任务后重启进程”的持久化测试,这决定了系统能不能真正 7×24 待命。最容易踩的坑是网关启动顺序:不先启动 Gateway,看板和桌面端就会报连接失败。
下一步可以验证三件事:第一,把多个 Agent 挂到同一个 Gateway 下,测试路由是否正确;第二,写一个批量提交脚本,把重复任务通过 API 投递到看板;第三,配置一个独立模型服务,测试网关转发到本地模型的稳定性和超时策略。
从第 1 集的“能跑”到第 2 集的“能长时间稳定跑”,中间差的正是状态管理和统一入口。看板让任务可追踪,网关让接入可管控。把这两块打好,后面再往多 Agent 协作、自动化工作流方向扩展就会顺手很多。建议收藏备用,动手部署时直接按这篇文章的顺序来。