Hermes-agent 在Telegram group电报群组中 使用多Agent协同完成任务
前言
与 openclaw 不同, hermes 在系统框架中没有设计agent 之间交流(往session里发消息)的方法.那我们就让 hermes 的 多agent 团队利用 telegram 来沟通
思路
再加上之前已经实现了 多Agent 绑定telegram bot
我们尝试建立一个多Agent团队进行协作
部署 Hermes-agent 系统
建立 telegram group 和 bot 和 agent
参考这一篇教程, 把 telegram group, bot 都设置好, 并测试 bot 之间可以看到消息. 过程略.
假设 这个telegram group 的 id 是
-1003918964882
假设 这些bot 的username 和 token 是
@CrazyAgentWatchBot1234567890:AAHkMpXv2nQrWsYd8bJtLfCeUo9GiN1KmZw@CrazyAgentDesignBot2345678901:AABxRqNj5vTgKhEa3cWmYsPdFu7LiOz4Xbn@CrazyAgentCodeBot3456789012:AAEvNuGz3tFwBqXk7yRmJcSh5OaDpI8LlTx@CrazyAgentTestBot4567890123:AAHkMpXv2nQrWsYd8bJtLfCeUo9GiN1KmZw
参考这一篇教程, 把新的agent建立, 并和bot绑定. 过程略.
假设 这些agent是:
agent-watchagent-designagent-codeagent-test
建立多agent团队
和默认 agent hermes 对话
组建一个agent协作团队, 利用已经存在多个agent.设置agent的配置文件, 以及agent之间的协作关系组成团队的agent是:agent-watch, agent-design, agent-code, agent-test1号 agent名称 = agent-watchtelegram bot username = @CrazyAgentWatchBot身份 = 你是任务调度员, 为团队中各agent分配任务, 并跟踪各agent的任务进展收到"新任务"时, 马上发给 agent-design 进行分析, 将总任务拆解为小任务. 注意, 你自己不要分析.然后将拆解后的小任务分配给合适的agent执行.维护一份 `任务名.md` 文件, 记录任务列表 和 完成进度当团队中的agent提问时, 你将疑问转发给 agent-design 思考, 再将解答转发给提问的agent. 注意, 你只做信息的传递, 不要修改信息.知识 = 知道团队中其它agent的全量信息(包括身份和知识)2号 agent名称 = agent-designtelegram bot username = @CrazyAgentDesignBot身份 = 从其它agent接受任务, 完成后通知任务发起者, 并提交成果特别的, 你是设计师, 分析师你将大任务拆解为适合本团队的成员执行的小任务.你不要求用户提供补充信息, 总是给出在当前状态下的最优解决方案, 想办法把任务推进下去知识 = 任务完成后的成果, 需要保存在 非workspace的目录下, 再交付出去知道团队中其它agent的全量信息(包括身份和知识) 注意, 虽然你知道团队中其它agent的信息, 但在团队中, 你只会与 1号 agent 直接交流.3号 agent名称 = agent-codetelegram bot username = @CrazyAgentCodeBot身份 = 从其它agent接受任务, 完成后通知任务发起者, 并提交成果特别的, 你是程序员知识 = 任务完成后的成果, 需要保存在 非workspace的目录下, 再交付出去4号 agent名称 = agent-testtelegram bot username = @CrazyAgentTestBot身份 = 从其它agent接受任务, 完成后通知任务发起者, 并提交成果特别的, 你是测试员, 接受测试对象和测试标准, 交付测试报告知识 = 任务完成后的成果, 需要保存在 非workspace的目录下, 再交付出去公共知识:这个团队在 telegram group 中工作, telegram group id = -1003918964882团队中的agent 互相之间发消息 要带 @ 发送注意, telegram bot username只在agent互相之间发送信息时使用. 其它情况下, 只使用 agent 名称.团队中的agent 只处理 @ 到自己的消息
测试
@CrazyAgentWatchBot 测试任务测试团队协作流程
结果看上去是一场灾难
先把各个agent的gateway停掉
agent-watch gateway stopagent-design gateway stopagent-code gateway stopagent-test gateway stop
和默认 agent hermes 对话, 把telegram group的聊天历史记录丢过去, 让Ta分析.
下图是导出聊天记录的方法
再次尝试测试任务, 还是和原来差不多. 也许是以前执行过程造成的上下文污染, 也许是因为负面 prompt 的效果不好.
具体截图就不放了.
我还发现2个问题.
1. 这些 gateway 都是同一个 Nous Portal 账号OAuth认证的. 但是因为gateway是独立的, 去请求 API 时, 是各自独立的. 那么对于 Nous Portal 来看, 就是同一个账号在快速请求.
很容易触发 429 Too Many Requests
我采用了agent共享flock 文件锁 + 状态文件 的方案控制请求API速率
~/.hermes/api_rate_limit → 内容: 上次请求的时间戳Gateway 想调 API 时:flock(api_rate_limit.lock)read(last_time)if now - last_time >= interval:write(now) ← 更新时间戳unlock→ 发 API 请求else:wait_time = interval - (now - last_time)unlocksleep(wait_time)→ 重试
2. 因为流式输出效果, 一条消息还不完整的时候就被另一个bot"看到"了.
agent-watch config set streaming falseagent-design config set streaming falseagent-code config set streaming falseagent-test config set streaming false
接下来最麻烦的, 处理团队交流的问题
参考 openclaw 的做法, 把 agent 绑定到 topic
这样 agent 自言自语的内容就不会干扰其它 agent
* 需要 hermes 修改自己的代码
为了让agent知道完成任务后回复谁, 参考我以往的agent团队的经验, 规范一个团队内消息的格式.
团队内跨agent的消息格式如下:FROM:TO:CONTENT:如FROM: agent-watchTO: agent-designCONTENT:总任务: 开发一个生成随机密码的页面核心功能参考:https://crazypeace.github.io/xkcd-password-generator/视觉风格参考:https://onojyun.com/请进行任务拆解,输出可直接分配给 agent-code / agent-test 的子任务列表。
再次尝试测试任务, 发现agent不知道怎么发送团队消息
我设想的逻辑链是:
发送团队消息给 xxx-agent -> xxx-agent 的 topic 是多少 -> 用 telegram bot API 发送
但是实际效果如下
但是实际效果如下
在尝试改进这个问题时, 发现 hermes 对查询当前agent的telegram bot token 这个功能有很多安全性限制.
我甚至找到并设置了
hermes config set security.redact_secrets false
和
~/.hermes/.envHERMES_REDACT_SECRETS=0
但还是不行.
所以, 只能来硬的了. 为每个agent生成3个脚本, 用于向其它团队成员发消息.
agent 不需要理解其它 agent 在哪个 topic 里, 不需要知道自己所在的 group id 是多少.
只要知道自己和其它agent在协作, 当TA要发消息给其它agent时就使用对应的脚本.
* 提一句, 我用的是白嫖的 mimo-v2-pro (如果你用是更"聪明"的模型, 欢迎实验)
再试试测试任务. 终于像个样子了.
agent-design 的第1次发消息给 agent-watch 是回复在自己的topic里的, 经过提醒才进行了正确的行为.
agent-design 有2次没有遵守团队消息格式
FROM:TO:CONTENT:
试试开发任务
新任务: 开发一个生成随机密码的页面
核心功能 参考 https://crazypeace.github.io/xkcd-password-generator/
视觉风格 参考 https://onojyun.com/
评论
发表评论