AgentScope是用来构建智能体的框架,其Agent模块是构建智能体的主要组件。AgentScope的agent模块提供哪些能力?如何使用?本文我们就来一起了解一下。

1.AgentScope的Agent模块

智能体是能够与环境和其他智能体交互,并采取行动改变环境的自主实体,需要具备如下能力:

  • 交互能力:能够接收输入消息,并根据消息内容生成响应消息。

  • 角色扮演:通过提示词等方式指定Agent承担的角色,例如“你是一个Python专家”,从而让其按照指定角色进行交互。

  • 记忆功能:用于存储和利用对话历史,使智能体能够根据上下文提供更加准确的响应。

  • 多模态支持:可以处理包含多模态数据(如图像、视频)的消息。

Agentscope中的agent模块,封装了上述能力,并提供以下方法帮助开发者快速构建自己的Agent:

  • AgentBase:是AgentScope为所有自定义Agent提供的基类,负责维护所有agent的通用行为,定义了所有agent都应该遵循的基本规则和功能。

  • AgentPool:各种不同功能agent的集合,每个agent都是为了完成特定目的而设计的,用户可以从这个池中选择适合自己需求的agent。

  • 定制Agent:允许用户定制自己的agent,确保它能够满足用户项目的具体需求。

2.AgentScope的Agent构建

2.1.AgentBase

2.1.1.关键特性和方法

AgentBase 是构成所有 agent 结构的基础,提供了一个包含基本属性和方法的模板。该类中的属性和方法支撑了任何会话 agent 的核心功能,确保它们能够有效地进行交互和处理任务。同时,它作为所有自定义 agent 的超类,可以保证不同 agent 之间的一致性和兼容性。

  • 关键特性
    • memory(记忆):让agent能够记住之前的对话内容,让对话更连贯,响应更准确。
    • model(模型):agent的“大脑”,负责处理信息并做出反应,它根据记忆和接收到的新信息来决定怎么回应。
    • sys_prompt和 engine(系统提示和引擎):系统提示是给agent的指令,引擎则负责根据情况动态生成合适的提示,帮助智能体更好地互动。
    • to_dist(分布式):让智能体能够和其他智能体一起工作,提高效率。
  • 关键方法
    • observe():允许 agent 注意到消息而不立即回复,从而根据观察到的消息更新它的记忆。
    • reply():定义了 agent 对于传入消息的响应行为,封装了 agent 输出的逻辑。

2.1.2.代码解读

AgentBase 基类定义了一个智能体的基本框架,开发者需要根据这个框架来创建具体的智能体:

  • AgentBase 继承自另一个名为 Operator 的类,这意味着 AgentBase 可以使用 Operator 类中的方法和属性。

  • AgentBase 类的3个重要的部分:

    • 初始化方法 __init__

      • 创建一个新的 AgentBase 对象时被调用。

      • 它接受几个参数,比如 name(agent的名字)、sys_prompt(系统提示)、model_config_name(模型配置的名字)和 use_memory(是否使用记忆功能)。

    • 观察方法 observe

      • 这是一个可选方法,用于根据agent观察到的信息来更新它的内部状态。

      • 如果智能体启用了记忆功能,这个方法会将观察到的信息添加到记忆中。

    • 回复方法 reply

      • 这是agent必须实现的核心方法,用于处理接收到的信息并生成一个合适的回复。

      • 如果没有实现这个方法,程序会抛出一个错误,提示缺少必需的 reply 函数。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
class AgentBase(Operator):
    # ... [code omitted for brevity]

    def __init__(
            self,
            name: str,
            sys_prompt: Optional[str] = None,
            model_config_name: str = None,
            use_memory: bool = True,
    ) -> None:

    # ... [code omitted for brevity]
    def observe(self, x: Union[dict, Sequence[dict]]) -> None:
        # An optional method for updating the agent's internal state based on
        # messages it has observed. This method can be used to enrich the
        # agent's understanding and memory without producing an immediate
        # response.
        if self.memory:
            self.memory.add(x)

    def reply(self, x: Optional[Union[Msg, Sequence[Msg]]] = None) -> Msg:
        # The core method to be implemented by custom agents. It defines the
        # logic for processing an input message and generating a suitable
        # response.
        raise NotImplementedError(
            f"Agent [{type(self).__name__}] is missing the required "
            f'"reply" function.',
        )

    # ... [code omitted for brevity]

2.2.AgentPool

AgentScope还提供了AgentPool(agent池),它是agent的集合,目的是提供具备不同功能agent的模板,帮助开发者更快地开发应用。

AgentPool中已经预置的agent包括:

  • AgentBase:这是所有智能体的“爸爸”类,提供了智能体需要的基本属性和方法。

  • DialogAgent:这个智能体擅长理解和管理对话,它能够根据上下文生成合适的回复。

  • DictDialogAgent:和DialogAgent类似,但它回复的消息是Json格式的,方便程序理解。

  • UserAgent:这个智能体负责和用户互动,收集用户的输入,然后生成可能包含链接或额外信息的消息。

  • ReActAgent:这个智能体使用了一种叫做ReAct的算法,能够自动调用工具来处理复杂的任务。

AgentScope还在持续增加新的agent,以适应各种不同的应用需求。

总的来说,AgentPool就像是一个大家庭,里面有各种不同特长的智能体,开发者可以根据需要选择合适的智能体来帮助他们开发应用。

2.3.定制Agent

开发人员可以基于AgentPool中提供的agent,稍加配置,就可以快速实现一个满足需要的agent。

DialogAgent为例,我们来定制一个用于客户服务的"聊天智能体”。

  • 导入DialogAgent类。
  • 配置DialogAgent,包括设置智能体的名字、使用的模型、系统提示等。
  • 创建并配置你的DialogAgent
  • 代码示例:
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
from agentscope.agents import DialogAgent

# Configuration for the DialogAgent
dialog_agent_config = {
    "name": "ServiceBot",
    "model_config_name": "gpt-3.5",  # Specify the model used for dialogue generation
    "sys_prompt": "Act as AI assistant to interact with the others. Try to "
    "reponse on one line.\n",  # Custom prompt for the agent
    # Other configurations specific to the DialogAgent
}

# Create and configure the DialogAgent
service_bot = DialogAgent(**dialog_agent_config)

3.总结

本文介绍了AgentScope框架中的agent模块,其提供一系列预置agent类,可以帮助开发者快速构建agent。

主要内容包括:

  • AgentBase基类的特性和代码解读;

  • AgentPool:各种不同特长agent的集合,池子中已预置的agent类有:

    • AgentBase

    • DialogAgent

    • DictDialogAgent

    • UserAgent

    • ReActAgent

  • 基于AgentPool提供的类定制agent。

参考:https://arxiv.org/pdf/2402.14034