注意
Go to the end 下载完整示例代码。
核心概念¶
本章从工程角度确立关键概念,来介绍AgentScope的设计。
注意
引入AgentScope核心概念的目标是阐明它解决了哪些实际问题以及如何支持开发者,而非提供正式定义。
状态¶
在AgentScope中,状态管理是一个基础构建块,用于维护对象运行时数据的快照。
AgentScope 将对象初始化与状态管理分开,允许对象在初始化后通过 load_state_dict 和 state_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_agent和tool_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 秒)