Created
Jul 30, 2024 10:37 AM
Favorite
Favorite
Priority
备注
推荐
类型
大家好,我是 同学小张,+v: jasper_8017 一起交流,持续学习C++进阶、OpenGL、WebGL知识技能和AI大模型应用实战案例,持续分享,欢迎大家点赞+关注,共同学习和进步。
前两篇文章我们学习了AgentScope中的消息类封装和消息分发模块,本文我们来实战一下。
本文利用AgentScope来实现一个带@功能的群聊。带@功能的群聊,其实是指定Agent进行发言,其中最重要的是消息的指定传递方向。

0. 智能体定义

首先定义多个智能体。实战案例中将智能体写成了json形式,然后通过初始化将这几个智能体一起定义出来。
  • 多智能体的json描述:三个 DialogAgent
  • 一起初始化(这也是第一次见还能这样初始化,学习了)
这样得到的 npc_agents 就是三个 DialogAgent 的列表。
然后再加入一个 UserAgent:

1. 创建多智能体交流环境 MsgHub

MsgHub 创建代码如下:
该段代码实现的功能:
(1)接收用户输入,如果是退出指令,则退出。
(2)从用户输入的信息中,filter_agents 提取需要发言的 Agent,加入到发言Agent列表中
(3)如果发言Agent列表不为空,则该列表中第一个 Agent 发言。如果列表为空,则通过 select_next_one 函数来挑选下一发言 Agent 进行发言
(4)根据上一个Agent的发言,filter_agents提取需要发言的 Agent,加入到发言 Agent 列表中
从上面步骤中,可以看到两个重点函数:filter_agents 和 select_next_one 。

2. filter_agents

该函数的作用是根据对话中 @的对象来将指定发言的Agent挑出来。
其实现原理就是一个简单的正则匹配,匹配的字符串为 pattern 的值,如下图:
notion image
输入中必须为 @ + name 才能指定到发言人,例如 @Lingfeng,会指定 Lingfeng 智能体为发言人。

3. select_next_one

该函数是在没有指定发言Agent的情况下,从Agent列表中随机选择一个Agent作为下一个发言Agent:

4. 总结

以上就能利用AgentScope实现带@功能的群聊。其实现@功能主要是利用正则表达式进行的匹配。这种方式个人感觉有点不灵活,也不太好用。类似 MetaGPT 中有 send_to 参数或 _watch 函数来指定将消息发给谁,指定监听谁发来的消息,我认为这样会更好一些。
另外,我也有点疑问,这里用到了 MsgHub,但是并没有看到其发挥的作用。除了刚开始的 with msghub(agents, announcement=hint):,在初始化时将系统设定送到所有参与者那里,剩下的在循环中都是直接的信息交流,感觉并没有通过 MsgHub。

5. 完整代码参考

  • https://github.com/modelscope/agentscope/blob/main/examples/conversation_with_mentions/main.py
如果觉得本文对你有帮助,麻烦点个赞和关注呗 ~~~点击上方公众号,关注↑↑↑
• 大家好,我是 同学小张,持续学习C++进阶、OpenGL、WebGL知识技能和AI大模型应用实战案例• 欢迎 点赞 + 关注 👏,持续学习,持续干货输出。• +v: jasper_8017 一起交流💬,一起进步💪。• 微信公众号搜【同学小张】 🙏
本站文章一览:
notion image
Loading...