【AI Agent系列】【阿里AgentScope框架】详解AgentScope中的消息管理和分发模块(下)

大家好,我是 同学小张,+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.observeobserve 函数如下,主要是将该消息添加到自身的记忆中。

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 一起交流💬,一起进步💪。
  • 微信公众号搜同学小张 🙏

本站文章一览:

在这里插入图片描述

  • 14
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

同学小张

如果觉得有帮助,欢迎给我鼓励!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值