大家好,我是 同学小张,+v: jasper_8017 一起交流,持续学习C++进阶、OpenGL、WebGL知识技能和AI大模型应用实战案例,持续分享,欢迎大家点赞+关注,共同学习和进步。
对于多智能体框架来说,其中最重要的组件之一就是消息模块,这是多智能体间交互的通道。像LangGraph的State,MetaGPT的Environment、Message等,都是实现多智能体间消息传递的重要组件。
上篇文章【AI Agent系列】【阿里AgentScope框架】详解AgentScope中的消息管理和分发模块(上) 我们学习了AgentScope中的消息类,本文我们来学习一下AgentScope框架中如何对这些消息进行分发。
文章目录
- 0. 消息管理 `MsgHub`
- 0.1 初始化参数
- 0.2 加入MsgHub
- 0.3 从MsgHub中删除Agent
- 0.4 消息分发 `broadcast`
- 0.5 其它函数
- 0.5.1 _reset_audience
- 0.5.2 __enter__ 函数
- 1. 使用
- 1.1 创建 MsgHub
- 1.2 在 MsgHub 中广播消息
- 1.3 添加和删除参与者
- 2. 总结
0. 消息管理 MsgHub
MsgHub
旨在管理一组智能体之间的对话/群聊,其中允许共享消息。通过 MsgHub
,智能体可以使用 broadcast
向群组中的所有其他智能体广播消息。
class MsgHubManager:
"""MsgHub manager class for sharing dialog among a group of agents."""
0.1 初始化参数
初始化函数如下:
def __init__(
self,
participants: Sequence[AgentBase],
announcement: Optional[Union[Sequence[dict], dict]] = None,
) -> None:
两个参数:
- participants:参与者列表,AgentBase 类型
- announcement:初始声明,可以为空,如果不为空,则在初始化时广播给所有参与者。
0.2 加入MsgHub
add
函数用来添加参与消息交流的 Agent,可以一次性传入一个或多个Agent。
def add(
self,
new_participant: Union[Sequence[AgentBase], AgentBase],
) -> None:
"""Add new participant into this hub"""
if isinstance(new_participant, AgentBase):
new_participant = [new_participant]
for agent in new_participant:
if agent not in self.participants:
self.participants.append(agent)
else:
......
self._reset_audience()
0.3 从MsgHub中删除Agent
delete
函数用来从MsgHub中删除Agent,可以一次性传入一个或多个Agent。
def delete(
self,
participant: Union[Sequence[AgentBase], AgentBase],
) -> None:
"""Delete agents from participant."""
if isinstance(participant, AgentBase):
participant = [participant]
for agent in participant:
if agent in self.participants:
# Clear the audience of the deleted agent firstly
agent.clear_audience()
# remove agent from self.participant
self.participants.pop(self.participants.index(agent))
else:
......
# Remove this agent from the audience of other agents
self._reset_audience()
0.4 消息分发 broadcast
这是这个模块的核心能力:消息分发
def broadcast(self, msg: Union[dict, list[dict]]) -> None:
for agent in self.participants:
agent.observe(msg)
该函数的实现:只要在这个MsgHub中的参与者,都将观察到这个消息:agent.observe
,observe
函数如下,主要是将该消息添加到自身的记忆中。
def observe(self, x: Union[dict, Sequence[dict]]) -> None:
if self.memory:
self.memory.add(x)
0.5 其它函数
0.5.1 _reset_audience
上面在 add 和 delete 函数中,都调用了这个函数。来看下该函数是干嘛的:
def _reset_audience(self) -> None:
"""Reset the audience for agent in `self.participant`"""
for agent in self.participants:
agent.reset_audience(self.participants)
调用了每个参与者的 reset_audience
函数,暂时无意义:
def reset_audience(self, audience: Sequence[AgentBase]) -> None:
# TODO: we leave the consideration of nested msghub for future.
# for now we suppose one agent can only be in one msghub
self._audience = [_ for _ in audience if _ != self]
0.5.2 enter 函数
上面初始化小节时提到了如果传入了 announcement 参数,则会在初始化时将该参数传递给所有参与者,该函数就是干这个的。
def __enter__(self) -> MsgHubManager:
"""Will be called when entering the msghub."""
......
# broadcast the input message to all participants
if self.announcement is not None:
for agent in self.participants:
agent.observe(self.announcement)
return self
该函数会在进入 MsgHub 时调用,然后对每个参与者传递:agent.observe(self.announcement)
。
1. 使用
参考:https://modelscope.github.io/agentscope/zh_CN/tutorial/202-pipeline.html#msghub
1.1 创建 MsgHub
要创建一个 MsgHub,请通过调用 msghub 辅助函数并传入参与智能体列表来实例化一个 MsgHubManager。
from agentscope.msg_hub import msghub
# Initialize MsgHub with participating agents
hub_manager = msghub(
participants=[agent1, agent2, agent3], announcement=initial_announcement
)
1.2 在 MsgHub 中广播消息
MsgHubManager 可以与上下文管理器一起使用,以处理MsgHub环境的搭建和关闭:
with msghub(
participants=[agent1, agent2, agent3], announcement=initial_announcement
) as hub:
# 智能体现在可以在这个块中广播和接收消息
agent1()
agent2()
# 或者手动广播一条消息
hub.broadcast(some_message)
退出上下文块时,MsgHubManager 会确保每个智能体的听众被清空,防止在中心环境之外的任何意外消息共享。
1.3 添加和删除参与者
你可以动态地从 MsgHub 中添加或移除智能体:
# 添加一个新参与者
hub.add(new_agent)
# 移除一个现有的参与者
hub.delete(existing_agent)
2. 总结
本文主要介绍了 AgentScope 中的消息分发模块 MsgHubManager,其与 MetaGPT 中的 Environment 组件很类似,用来管理消息的分发。智能体可以加入这个Hub或环境,这个Hub会将接收到的消息广播给所有Hub中的参与者。
如果觉得本文对你有帮助,麻烦点个赞和关注呗 ~~~
- 大家好,我是 同学小张,持续学习C++进阶、OpenGL、WebGL知识技能和AI大模型应用实战案例
- 欢迎 点赞 + 关注 👏,持续学习,持续干货输出。
- +v: jasper_8017 一起交流💬,一起进步💪。
- 微信公众号搜【同学小张】 🙏
本站文章一览: