核心概念

本章从工程角度确立关键概念,来介绍AgentScope的设计。

注意

引入AgentScope核心概念的目标是阐明它解决了哪些实际问题以及如何支持开发者,而非提供正式定义。

状态

在AgentScope中,状态管理是一个基础构建块,用于维护对象运行时数据的快照。

AgentScope 将对象初始化与状态管理分开,允许对象在初始化后通过 load_state_dictstate_dict 方法恢复到不同状态。

在Agentscope中,智能体、记忆、长期记忆和工具包都是具有状态的对象。Agentscope通过支持嵌套状态管理,将这些对象的状态管理链接在一起。

消息

在AgentScope中,消息是基础数据结构,用于
  • 在智能体之间交换信息,

  • 在用户界面中显示信息,

  • 在内存中存储信息,

  • 作为智能体范围与不同大型语言模型API之间的统一媒介。

工具

AgentScope 中的工具指的是可调用对象,无论是

  • 功能,

  • 部分函数,

  • 实例方法,

  • 类方法

  • 静态方法,或

  • 具有__call__方法的可调用实例。

此外,可调用对象可以是以下任一情况:

  • 异步或同步,

  • 流式或非流式。

因此,尽管在 AgentScope 中使用任何可调用对象作为工具。

智能体

在AgentScope中,智能体的行为被抽象为AgentBase类的三个核心函数:

  • reply: 处理传入消息并生成回复消息。

  • observe: 从环境或其他智能体中接收消息,不返回响应。

  • print: 将消息展示到目标终端、网络界面等。

为了支持实时操控,提供了一个额外的handle_interrupt函数来处理用户在该智能体回复过程中的中断。

此外,ReAct agent 是 AgentScope 中最重要的智能体,其回复过程分为两个阶段:

  • reasoning: 通过调用语言大模型进行思考并生成工具调用

  • acting: 执行工具功能。

因此,我们在ReActAgentBase类中提供了两个额外的核心功能, _reasoning_acting.

格式化器

Formatter是AgentScope中实现LLM兼容的核心组件,负责将消息对象转换为LLM API所需的格式。

此外,其他功能如提示词工程、截断处理和信息验证也可以通过格式化器实现。

在格式化组件中,“多智能体”(或“多身份”)概念与常见的多智能体编排概念有所不同。 它关注的是给定消息中涉及多个身份的场景,因此LLM API中常用的role字段(通常为“role”、“assistant”或“system”)无法区分它们。

因此,AgentScope提供了多智能体格式化器来处理这种情况,通常用于游戏、多人聊天和社交模拟等场景。

注意

多智能体工作流!=格式上的多智能体。 例如,即使以下代码片段可能涉及多个 智能体(tool_agenttool_function调用者),输入查询 被包装成一个用户消息,因此role字段仍能区分 它们。

async def tool_function(query: str) -> str:
    """Tool function calling another agent"""
    msg = Msg("user", query, role="user")
    tool_agent = Agent(name="Programmer")
    return await tool_agent(msg)

理解这种区别有助于开发人员更好地掌握 AgentScope 的格式化器设计。

长时记忆

尽管智能体的短期与长期记忆提供了不同的基类,它们在AgentScope中并没有严格的区别。

在我们看来,一切都应该以需求为导向。只要您的需求得到完美满足,开发者完全可以仅使用一个强大的记忆系统。

为确保AgentScope的灵活性,我们提供了双重模式长期记忆系统,允许智能体自行管理(记录与检索)长期记忆。

脚本的总运行时间: (0 分钟 0.000 秒)

Gallery generated by Sphinx-Gallery