从 QQ 消息到网站上线:Hermes 多 Agent 全流程实战
你在 QQ 上说一句话,几分钟后网站预览就上线了。中间发生了什么?
这是我用 Hermes Agent 搭建个人网站的完整过程。不是"AI 帮你写代码"那么简单——真正有意思的是那条从聊天消息到生产部署的全自动流水线。
一、架构全景
QQ 消息
│
▼
Hermes (DeepSeek) ← 你的主对话 Agent
│
├─ Manager Profile ← 项目经理,拆任务、派活
│ │
│ ▼
│ Kanban (SQLite) ← 任务板,持久化,多 Worker 抢任务
│ │
│ ├─ Designer ← 出效果图(SVG → v1 → v2 → v3 → v4)
│ ├─ Coder ← 写代码
│ ├─ FullStack ← 前后端串
│ ├─ Reviewer ← 代码审查
│ ├─ Ops ← SSH 部署到腾讯云
│ └─ ...
│
├─ Cron Jobs ×5 ← 财经舆情监控,定时抓取+邮件推送
│
└─ QQ Gateway ← 双向消息(你发 → Agent 收,Agent 完成 → 通知你)
关键角色:
| 角色 | 模型 | 干什么 |
|---|---|---|
| 你对话的 Agent | DeepSeek | 理解需求,转给 Manager |
| Manager | DeepSeek | 拆任务,分配 Worker,跟踪进度 |
| 9 个 Worker | MiniMax | 各自领域的专家,抢任务干活 |
| Kanban Dispatcher | Gateway 内置 | 自动调度,Worker 完成了就派下一个 |
二、一条消息的旅程
第 1 步:你在 QQ 说"帮我开发个人网站"
消息通过 QQ Bot Gateway 进入 Hermes。Agent 没有直接写代码——它把需求拆解,创建了一条 Kanban 任务,分配给 Manager。
hermes kanban create "全功能个人品牌站开发" --assignee manager
第 2 步:Manager 拆解流水线
Manager 按照内置的标准 7 阶段流水线(Pipeline)拆解:
阶段 1: ProductManager → 需求分析,出 PRD
阶段 2: Architect → 技术选型,Nuxt + Tailwind + PostgreSQL
阶段 2.5: Designer → 效果图(v1→v2→v3→v4)
阶段 2.6: Reviewer → 审查方案
阶段 3: Coder/FullStack → 并行开发
阶段 4: Reviewer → 代码审查
阶段 5: Tester → 测试
阶段 6: Ops → 部署上线
每一步都是一个独立的 Kanban 任务,有依赖关系,有门禁条件。Manager 只管分配,不写一行代码。
第 3 步:Worker 抢任务干活
Dispatcher(调度器)发现 ready 状态的任务,匹配对应 Profile 的 Worker,自动启动。
Dispatcher: t_014efa5b 状态=ready, assignee=designer → 启动 designer profile
Designer: 读取任务描述 → 出 SVG 效果图 → 保存到 docs/ → 标记完成
Dispatcher: 发现下一个任务 → 继续...
第 4 步:部署到腾讯云
Ops Worker 拿到部署任务后:
- 读取本地 HTML 设计文件
- 通过 paramiko SSH 连接到腾讯云香港 CentOS 7
- SFTP 上传到
/var/www/preview/ - 验证 HTTP 200
- 标记任务完成
# ops worker 实际使用的部署脚本片段
ssh = paramiko.SSHClient()
ssh.connect(host, port=22, username='root', password=password)
sftp = ssh.open_sftp()
sftp.put(local_path, remote_path)
# 验证
stdin, stdout, stderr = ssh.exec_command(f'curl -s -o /dev/null -w "%{{http_code}}" {url}')
第 5 步:通知你
最初这是个痛点——Worker 干完了没人通知。后来我们打通了 Kanban 原生通知:
# Manager 每创建一个任务,就帮你订阅通知
hermes kanban notify-subscribe \
--platform qqbot \
--chat-id [QQ会话ID] \
--notifier-profile default \
<task_id>
任务完成/阻塞/崩溃 → Gateway 自动推送到你的 QQ。不需要 cron,不依赖轮询。
▲ 通知闭环:Manager 订阅 → Worker 完成 → Kanban 事件 → Gateway → QQ三、设计迭代:v1 → v4
设计是最能体现多 Agent 价值的环节。用户不需要懂设计,只需给方向。
| 版本 | Worker | 技术 | 耗时 |
|---|---|---|---|
| v1 | Designer | SVG 矢量效果图 | 2 min |
| v2 | Designer | 增强层次感 | 2 min |
| v3 | Designer | HTML/CSS 真实渲染 | 2 min |
| v4 | Designer | Three.js 3D + Canvas 神经网络 | 2 min |
每次迭代:
- Designer 出图
- Manager 审查
- 用户确认(或给出反馈:"不够科幻" → "要3D" → "加神经网络")
- 下一版开始
4 个版本累计不到 10 分钟,从 SVG 草图进化到 Three.js 3D 粒子场景。
▲ 设计迭代时间线:v1 SVG → v2 增强 → v3 HTML → v4 Three.js 3D四、技术栈
网站本身
Nuxt + Vue
Tailwind CSS + Nuxt UI
@nuxt/content (Markdown 博客)
PostgreSQL (内容存储)
Docker (容器化运行)
部署架构
腾讯云香港 CentOS 7
├─ Nginx (80/443, 反向代理 + SSL)
├─ Git (自建代码仓库)
├─ /var/www/preview/ (设计预览)
├─ /var/www/production/ (生产环境)
└─ Docker (可选,容器化运行)
自动化
Hermes Agent (主控)
├─ QQ Bot Gateway (消息双向通道)
├─ Kanban + 9 Worker Profiles (任务协作)
├─ Cron ×5 (财经舆情监控)
├─ 邮件 SMTP (QQ 邮箱)
└─ Paramiko (SSH 部署)
五、几个有趣的坑
坑 1:SSH 22 端口被防火墙挡了
本地 ssh root@[服务器IP] 死活不通。排查发现是腾讯云安全组没放行。
解决: 走 OrcaTerm 网页终端作为跳板,或者让用户在 FinalShell 上手动跑一次性命令。后来配好安全组后 Ops Worker 可以直接 SSH。
坑 2:Windows cron 里 python3 不存在
Git Bash 环境下只有 python,脚本里写 python3 直接 command not found。cron prompt 里所有路径必须用绝对路径。
Git 代码提交与维护流程
多 Agent 协作开发的核心基础设施是 Git。我们采用自托管的 Git 服务作为代码仓库,所有 Worker 的代码产出都通过标准 Git 工作流管理。
日常流程:
开发者本地 (D:\work\personal\personal-website)
│
├─ git add / commit ← Worker 产出代码后提交
├─ git push origin main ← 推送到远程仓库(代码备份 + 版本追溯)
│
▼
远程 Git 仓库 (腾讯云服务器)
│
├─ Ops Worker git pull ← 部署前拉取最新代码
│
▼
本地 Docker 构建
├─ docker build -t website:latest . ← 本地编译镜像
├─ docker save website:latest | gzip > website.tar.gz ← 打包
│
▼
SFTP 上传到服务器 /tmp/
├─ sftp.put('website.tar.gz', '/tmp/')
│
▼
服务器端
├─ docker load < /tmp/website.tar.gz ← 加载镜像
├─ docker compose up -d ← 更新容器
├─ nginx -s reload ← 热重载
│
▼
生产环境 (deeeli.com)
为什么本地构建而非服务器构建?
- 服务器 CentOS 7 环境老旧,编译原生模块(如 Node.js addon)容易失败
- 本地 Docker 环境与目标一致,构建一次到处运行
- 服务器只需
docker load,不装完整编译链
分支策略:
| 分支 | 用途 |
|---|---|
main | 生产就绪代码,Ops 直接从 main 拉取部署 |
feature/* | 新功能开发分支,由 Manager 创建任务时指定 |
fix/* | Bug 修复分支,完成后合并回 main |
实际命令流:
# Worker 完成任务后提交
git add docs/sci-fi-home-v4.html
git commit -m "designer: v4 3D交互效果图"
git push origin main
# 部署:本地构建 → 上传 → 服务器加载
docker build -t website:latest .
docker save website:latest | gzip > website.tar.gz
sftp root@server <<< "put website.tar.gz /tmp/"
# 服务器端
ssh root@server "
docker load < /tmp/website.tar.gz &&
cd /app && docker compose up -d &&
nginx -s reload
"
Git 与 Kanban 的配合:
每个 Kanban 任务完成后,Worker 将产出文件通过 Git push 到远程仓库。下游 Worker(如 Reviewer、Ops)通过 git pull 获取最新代码。整个过程中:
- 代码版本可追溯:每次改动都有 commit 记录
- 回滚无压力:
git revert一键回退 - 并行开发不冲突:不同 Worker 操作不同文件(designer 改 docs/,coder 改 app/),天然隔离
坑 4:任务完成了没人通知
前面说过了——这是推动我们实现 notify-subscribe 的原因。现在 Manager 创建任务时自动订阅,用户 QQ 实时收到推送。
六、效果
从 QQ 发一条消息到看到预览,完整链路:
"设计要有科技感"
→ Manager 拆任务 (5s)
→ Designer 出 v4 效果图 (2min)
→ Manager 审查 (10s)
→ Ops SSH 上传到服务器 (15s)
→ QQ 通知 "预览已上线: http://[服务器]/preview/"
全自动,零手动操作,2-3 分钟端到端。
七、总结
这不是"AI 帮你写了个网站"——这是建了一条从聊天到部署的装配线。
核心思想:
- Manager 只管不管干——拆任务、派活、跟踪,不写代码
- Worker 各司其职——Designer 出图、Coder 写码、Ops 部署,互不干扰
- Kanban 是共享工作台——所有 Agent 看同一块板子,任务状态一目了然
- 通知闭环——Worker 干完了你马上知道,不用手动查
下一步:把 Manager 的流水线模板化,让"开发网站"和"写爬虫"共用同一套调度逻辑。
本文由 Hermes Agent 根据实际开发过程记录撰写,陈德立署名发布。所有 Kanban 任务日志可在 hermes kanban log 中回溯。