autowzry-agent

QMobaAgent 项目架构文档

用途: Agent快速了解项目结构,节省token 更新日期: 2025-11-24 重要变更: 项目已重构为标准Python包结构


1. 项目结构树

autowzry-agent/
├── qmoba_agent/         # 主包目录
│   ├── __init__.py      # 包初始化(导出常用类)
│   ├── config/          # 配置管理
│   │   ├── __init__.py
│   │   └── config.py    # 配置类定义
│   ├── core/            # 核心模块
│   │   ├── __init__.py
│   │   ├── lightweight_dqn.py  # 轻量级DQN(88K参数)
│   │   └── trainer.py   # DQN训练器
│   ├── data/            # 数据处理
│   │   ├── __init__.py
│   │   ├── data_manager.py  # 数据管理(收集+标记)
│   │   └── training_buffer.py  # 训练数据加载
│   ├── environment/     # 环境交互
│   │   ├── __init__.py
│   │   ├── action_space.py # 动作空间定义
│   │   ├── compatibility.py # 兼容层(依赖注入中心)
│   │   └── game_state.py   # 游戏状态检测
│   ├── utils/           # 工具函数
│   │   ├── __init__.py
│   │   ├── image_processing.py  # 图像预处理
│   │   └── video_reader.py  # 视频读取
│   └── autowzry_lite/   # autowzry精简版
│       └── autowzry/
│           ├── __init__.py
│           ├── version.py
│           └── wzry.py
├── scripts/             # 执行脚本
│   ├── __init__.py
│   ├── collect_from_video.py   # 从视频收集数据
│   ├── collect_from_device.py  # 从设备收集数据
│   ├── label_data.py    # 标记数据(action+state)
│   ├── train.py         # 训练模型
│   ├── battle.py        # 模型测试与对战(支持离线/在线)
│   ├── check_buffer.py  # Buffer数据验证(调试用)
│   ├── extract_data.py  # HDF5帧范围提取
│   └── test_pipeline.py # 端到端自动化测试(开发用)
├── config/              # 配置文件目录(YAML文件)
│   └── agent.config.yaml  # 主配置文件
├── docs/                # 文档
│   ├── guides/          # 使用指南
│   │   ├── README_FOR_AGENT.md  # Agent快速上手
│   │   ├── quickstart.md        # 用户快速开始
│   │   └── AGENT_COLLABORATION_RULES.md  # Agent协作规范
│   ├── design/          # 架构设计
│   │   └── ARCHITECTURE.md      # 本文件
│   └── logs/            # 开发日志
│       └── development_log.md
├── workspace/           # 运行时数据(.gitignore)
│   ├── episodes/        # HDF5数据存储
│   ├── checkpoints/     # 模型检查点
│   ├── videos/          # 视频素材
│   ├── buffer_check/    # Buffer检查输出
│   └── test_pipeline/   # 端到端测试输出
├── pyproject.toml       # 项目配置(包元数据、依赖)
└── README.md            # 项目主页

重要说明


2. 核心文件说明

qmoba_agent/config/config.py

依赖: yaml :

core/lightweight_dqn.py

依赖: torch, torch.nn :

core/trainer.py

依赖: torch, torch.optim, matplotlib, numpy, data.training_buffer :

data/data_manager.py

依赖: h5py, numpy, cv2, environment.compatibility, environment.game_state, environment.action_space :

data/training_buffer.py

依赖: h5py, torch, torch.utils.data, numpy, os, datetime, random :

environment/compatibility.py

依赖: numpy, cv2, autowzry, utils.video_reader :

environment/action_space.py

依赖: environment.compatibility :

environment/game_state.py

依赖: environment.compatibility :

utils/image_processing.py

依赖: cv2, numpy 函数:

utils/video_reader.py

依赖: cv2 :


3. 数据类型与流转

数据流转过程

画面数据 (RGB图像)
  -> CompatibilityLayer.capture_screen()
  -> DataManager.collect()
  -> HDF5文件 (未标记)
  -> DataManager.label()
  -> HDF5文件 (已标记)
  -> TrainingBuffer.load()
  -> TrainingBuffer.get_dataloader()
  -> Trainer.train_step()
  -> 模型

说明

HDF5文件结构

标准数据文件(collect + label生成):

episode_xxx.hdf5
├── attrs (文件级属性)
│   ├── num_frames: 总帧数
│   ├── created_at: 创建时间
│   ├── labeled_at: 标记时间(可选)
│   ├── original_file: 原始文件(提取时)
│   ├── extracted_range: 提取范围(提取时)
│   └── ...
├── frame_000000/
│   ├── image: (540, 960, 3) RGB图像
│   ├── timestamp: 时间戳
│   ├── state_in_battle: bool(标记后)
│   ├── state_dead: bool(标记后)
│   ├── state_alive: bool(标记后)
│   ├── state_kill: bool(标记后)
│   ├── state_assist: bool(标记后)
│   ├── action_move: [上, 下, 左, 右] 得分(标记后)
│   └── action_attack: [目标1, ..., 目标10] 得分(标记后)
├── frame_000001/
│   └── ...
└── ...

battle.py录制文件(使用–record-interval和–output生成):

battle_record.hdf5
├── attrs (文件级属性)
│   ├── num_frames: 总帧数
│   ├── created_at: 创建时间
│   ├── finished_at: 完成时间
│   ├── recording_mode: 'streaming'
│   └── ...
├── frame_000000/
│   ├── image: (540, 960, 3) RGB图像
│   ├── timestamp: 时间戳
│   └── q_values: (total_dim,) 模型输出的Q值
├── frame_000001/
│   └── ...
└── ...

说明

TrainingBuffer样本格式

{
    'state': (C, 540, 960),      # 当前帧图像,C=3或6(取决于use_last_state)
    'next_state': (C, 540, 960), # 下一帧图像,C=3或6
    'frame_name': str,            # 帧名称(如'frame_000042'),用于调试追踪
    'move': [4],                  # 移动动作得分 [上, 下, 左, 右]
    'reward': float               # 总奖励值(状态奖励 + 动作奖励)
}

说明