OpenManus代码详解(四):app/schema.py

请添加图片描述

往期推荐:

1. OpenManus架构解析
2. OpenManus代码详解(一):app/agent
3. OpenManus代码详解(二):app/flow
4. OpenManus代码详解(三):app/tool
5. OpenManus代码详解(四):app/schema.py
6. OpenManus代码详解(五):app/tool/planning.py
7. OpenManus代码详解(六):代码调用流程

官方地址:https://github.com/mannaandpoem/OpenManus


这个文件定义了项目中使用的核心数据模型。

1. AgentState 枚举类

class AgentState(str, Enum):
    """代理执行状态枚举"""
    IDLE = "IDLE"           # 空闲状态
    RUNNING = "RUNNING"     # 运行状态
    FINISHED = "FINISHED"   # 完成状态
    ERROR = "ERROR"         # 错误状态
  • 继承自 str 和 Enum,定义了代理可能的状态
  • 用于跟踪和管理代理的执行状态

2. Function 和 ToolCall 类

class Function(BaseModel):
    name: str          # 函数名称
    arguments: str     # 函数参数(JSON字符串)

class ToolCall(BaseModel):
    """表示消息中的工具/函数调用"""
    id: str           # 调用ID
    type: str = "function"  # 调用类型
    function: Function      # 函数信息
  • 定义了工具调用的数据结构
  • 用于处理 LLM 的函数调用请求

3. Message 类

class Message(BaseModel):
    """表示对话中的消息"""
    # 基本属性
    role: Literal["system", "user", "assistant", "tool"]  # 消息角色
    content: Optional[str] = None                         # 消息内容
    tool_calls: Optional[List[ToolCall]] = None          # 工具调用列表
    name: Optional[str] = None                           # 工具名称
    tool_call_id: Optional[str] = None                   # 工具调用ID

    # 运算符重载
    def __add__(self, other) -> List["Message"]:
        """支持 Message + list 或 Message + Message"""
    
    def __radd__(self, other) -> List["Message"]:
        """支持 list + Message"""

    # 转换方法
    def to_dict(self) -> dict:
        """转换为字典格式"""

    # 工厂方法
    @classmethod
    def user_message(cls, content: str) -> "Message":
        """创建用户消息"""

    @classmethod
    def system_message(cls, content: str) -> "Message":
        """创建系统消息"""

    @classmethod
    def assistant_message(cls, content: Optional[str] = None) -> "Message":
        """创建助手消息"""

    @classmethod
    def tool_message(cls, content: str, name, tool_call_id: str) -> "Message":
        """创建工具消息"""

    @classmethod
    def from_tool_calls(cls, tool_calls: List[Any], content: Union[str, List[str]] = ""):
        """从原始工具调用创建消息"""

特点:

  1. 支持四种消息角色:系统、用户、助手、工具
  2. 提供便捷的消息创建方法
  3. 支持消息列表的加法运算
  4. 可以转换为字典格式

4. Memory 类

class Memory(BaseModel):
    """内存管理类"""
    messages: List[Message] = Field(default_factory=list)  # 消息列表
    max_messages: int = Field(default=100)                 # 最大消息数量

    def add_message(self, message: Message) -> None:
        """添加单条消息"""
        self.messages.append(message)
        # 超出限制时裁剪
        if len(self.messages) > self.max_messages:
            self.messages = self.messages[-self.max_messages:]

    def add_messages(self, messages: List[Message]) -> None:
        """添加多条消息"""
        self.messages.extend(messages)

    def clear(self) -> None:
        """清空所有消息"""
        self.messages.clear()

    def get_recent_messages(self, n: int) -> List[Message]:
        """获取最近的n条消息"""
        return self.messages[-n:]

    def to_dict_list(self) -> List[dict]:
        """转换为字典列表"""
        return [msg.to_dict() for msg in self.messages]

功能:

  1. 管理对话历史
  2. 限制最大消息数量
  3. 提供消息添加、清空、获取等操作
  4. 支持批量消息操作
  5. 可以转换为字典列表格式

主要用途:

  1. 数据验证

    • 使用 Pydantic 的 BaseModel 进行数据验证
    • 确保数据类型和格式的正确性
  2. 状态管理

    • 通过 AgentState 管理代理状态
    • 提供清晰的状态转换机制
  3. 消息处理

    • 统一的消息格式
    • 支持不同类型的消息创建
    • 便捷的消息操作方法
  4. 内存管理

    • 管理对话历史
    • 控制内存使用
    • 提供消息检索功能
  5. 工具调用

    • 定义工具调用的数据结构
    • 支持复杂的工具交互

schema.py提供了核心的数据结构和类型定义,确保了数据的一致性和类型安全。通过 Pydantic 的类型系统,它还提供了自动的数据验证功能。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值