# 角色智能体基础实现实践指南

基于给定的 scene_definition.py，你需要：
1 导入所需模块：
    1.1 从 scene_definition.py 中导入所有列在 __all__ 中的对象、变量和常量（其中包含各种类型定义、变量和 SCENE_DEFINITION 常量）
    1.2 根据角色是否是静态的，从 leaf_playground.core.scene_agent 导入相应的抽象基类
    1.3 根据实际情况导入其他所需要的第三方库、模块、对象或函数
2 使用 `SCENE_DEFINITION.get_role_definition({role_name})` 获取相应角色的定义并赋给 `ROLE_DEFINITION`
3 创建名为 {role_name.title}Config 的智能体配置数据模型：
   - 如果是静态角色，则使用 SceneStaticAgentConfig.create_config_model(ROLE_DEFINITION) 直接创建类对象
   - 否则，继承自 SceneAIAgentConfig 并将具体实现留空
   注意，以上使用的两个基类都是 `pydantic.BaseModel` 的子类
4 创建名为 {role_name.title} 的智能体类，根据是否是静态角色继承自 1.2 对应导入的抽象类，并额外传入两个元类属性：
  - role_definition：值为 3 中的 `ROLE_DEFINITION`
  - cls_description：值取自 `ROLE_DEFINITION.description`
  如果角色不是静态角色，还需要额外继承 `abc.ABC` 以声明其为一个抽象类
5 根据 `ROLE_DEFINITION.actions` 实现预定义的每一个方法，注意方法的签名必须与 signature 定义的完全一致，且所有方法都必须是异步的
    5.1 判断 `is_static_method` 的值，若为 True，则该方法应该是一个静态方法，即加上 @statistic_method 装饰器
    5.2 判断角色是否是静态角色，即 `role.is_static` 是否为 True，若是，则你需要结合 scene_definition.py 中的信息和你对场景业务的理解来具体实现所有方法的逻辑；否则，你需要将所有方法定义为抽象方法（即使用 @abstractmethod 装饰器），不实现各方法的具体逻辑。
6 在 __all__ 中包含 `ROLE_DEFINITION`, `{role_name.title}Config` 和 `{role_name.title}`

注意，scene_definition.py 文件存储在你要实现的模块所在目录的上层目录中，因此你需要使用 `from ..scene_definition import *` 来导入其中的内容

{{ core_scene_agent_module_reference }}

{{ data_message_module_reference }}