跳到主要内容

API 参考手册

CLI 命令行工具

从 PyPI 安装:

pip install openra-rl
命令说明
openra-rl play运行 LLM 智能体(首次使用时启动交互式向导)
openra-rl config重新运行配置向导
openra-rl server start启动 Docker 游戏服务器
openra-rl server stop停止游戏服务器
openra-rl server status检查服务器状态
openra-rl server logs [-f]查看服务器日志
openra-rl mcp-server启动 MCP stdio 服务器
openra-rl doctor检查前置依赖
openra-rl version显示版本号

openra-rl play 参数

参数说明
--providerLLM 提供商:openrouterollamalmstudio
--model模型 ID(例如 qwen3:32b
--api-key云端提供商的 API 密钥
--difficultyAI 对手难度:easynormalhard
--port游戏服务器端口(默认:8000)
--server-url连接到已有服务器(跳过 Docker 启动)
--verbose详细输出

MCP 服务器

OpenRA-RL 通过标准 MCP 协议(stdio 传输)暴露全部 48 个游戏工具:

openra-rl mcp-server

MCP 客户端配置(OpenClaw、Claude Desktop 等):

{
"mcpServers": {
"openra-rl": {
"command": "openra-rl",
"args": ["mcp-server"]
}
}
}

也可在 ClawHub 上获取:clawhub install openra-rl

Python 客户端

OpenRAEnv

与 OpenRA-RL 游戏服务器交互的主客户端类。

from openra_env.client import OpenRAEnv

async with OpenRAEnv(base_url="http://localhost:8000") as env:
obs = await env.reset()
obs = await env.step(action)

方法

方法返回类型说明
reset()OpenRAObservation开始新的游戏回合
step(action)OpenRAObservation发送指令并接收下一帧观测
state()GameState查询当前游戏状态(不执行操作)

OpenRAObservation

包含单个 tick 全部观测数据的 Pydantic 模型。

obs.tick                    # int — 当前游戏 tick
obs.done # bool — 游戏是否结束?
obs.result # str — "win"、"lose"、"draw"、""
obs.economy.cash # int — 当前资金
obs.military.army_value # int — 总军队价值
obs.units # list[UnitInfoModel]
obs.buildings # list[BuildingInfoModel]
obs.visible_enemies # list[UnitInfoModel]
obs.visible_enemy_buildings # list[BuildingInfoModel]
obs.production # list[ProductionInfoModel]
obs.available_production # list[str]
obs.spatial_map # str (base64 编码的空间张量)
obs.map_info # MapInfoModel

OpenRAAction

包含指令列表的操作模型。

from openra_env.models import OpenRAAction, CommandModel, ActionType

action = OpenRAAction(commands=[
CommandModel(action=ActionType.MOVE, actor_id=1, target_x=50, target_y=30),
CommandModel(action=ActionType.TRAIN, item_type="e1"),
])

CommandModel

FieldType说明
actionActionType操作类型枚举
actor_idint执行操作的单位 ID
target_actor_idint目标单位 ID
target_xint目标格子 X 坐标
target_yint目标格子 Y 坐标
item_typestr生产项目类型
queuedbool是否排队到当前活动之后

gRPC 接口

直接 gRPC 访问(端口 9999),服务定义在 rl_bridge.proto 中:

service RLBridge {
// Bidirectional streaming: observations ↔ actions
rpc GameSession(stream AgentAction) returns (stream GameObservation);

// Unary: query game state on demand
rpc GetState(StateRequest) returns (GameState);
}

直接使用 gRPC

from openra_env.server.bridge_client import BridgeClient

async with BridgeClient("localhost:9999") as client:
async for obs in client.game_session():
action = agent.decide(obs)
await client.send_action(action)

OpenEnv 协议

OpenRA-RL 实现了 OpenEnv 规范,可与任何 OpenEnv 客户端兼容:

from openenv import Environment

env = Environment(base_url="http://localhost:8000")
result = await env.reset()
result = await env.step(action)

MCP 工具(共 48 个)

所有工具均可通过 MCP 服务器、WebSocket 客户端和 LLM 智能体使用。

读取类(8 个工具)

Tool说明
get_game_state()完整游戏状态:经济、单位、建筑、敌军
get_economy()资金、矿石、电力、采矿车
get_units()己方单位及其位置、生命值、类型
get_buildings()己方建筑及其生产状态、电力
get_enemies()可见敌方单位和建筑
get_production()当前生产队列和可用建造项
get_map_info()地图尺寸和元数据
get_exploration_status()战争迷雾:已探索百分比、象限信息

情报类(4 个工具)

Tool说明
lookup_unit(unit_type)查询单位数据(例如 "3tnk"
lookup_building(building_type)查询建筑数据(例如 "weap"
lookup_tech_tree(faction)查询 "allied""soviet" 的完整建造顺序
lookup_faction(faction)查询某阵营的全部单位和建筑

批量情报类(3 个工具)

Tool说明
get_faction_briefing()获取己方阵营全部单位和建筑的完整数据
get_map_analysis()战略地图分析:资源、地形、咽喉要道
batch_lookup(queries)单次调用批量查询多项情报

规划类(4 个工具)

Tool说明
get_opponent_intel()AI 对手行为分析及应对策略
start_planning_phase()开始规划阶段,获取增强型游戏数据
end_planning_phase(strategy)确认战略方案并开始作战
get_planning_status()检查规划阶段状态

游戏控制类(1 个工具)

Tool说明
advance(ticks)推进游戏 N 个 tick(约 25 tick = 1 秒)

移动类(4 个工具)

Tool说明
move_units(unit_ids, target_x, target_y)移动单位到指定位置
attack_move(unit_ids, target_x, target_y)攻击移动,沿途交战
attack_target(unit_ids, target_actor_id)攻击指定敌方目标
stop_units(unit_ids)停止单位行动

生产类(3 个工具)

Tool说明
build_unit(unit_type, count)在生产建筑中训练单位
build_structure(building_type)开始建造建筑
build_and_place(building_type)建造并自动放置(最简方式)

建筑操作类(11 个工具)

Tool说明
place_building(building_type, cell_x, cell_y)放置已完成的建筑
cancel_production(item_type)取消单位/建筑生产
deploy_unit(unit_id)部署单位(例如 MCV → 建造场)
sell_building(building_id)出售建筑获取部分退款
repair_building(building_id)切换维修状态
set_rally_point(building_id, cell_x, cell_y)设置集结点,新单位自动前往
guard_target(unit_ids, target_actor_id)守卫指定目标
set_stance(unit_ids, stance)设置姿态:holdfire、returnfire 等
harvest(unit_id, cell_x, cell_y)派遣采矿车前往指定位置
power_down(building_id)切换供电状态以节省电力
set_primary(building_id)设为主要生产设施

放置类(1 个工具)

Tool说明
get_valid_placements(building_type)获取有效的建筑放置位置

单位编组类(4 个工具)

Tool说明
assign_group(group_name, unit_ids)创建命名编组
add_to_group(group_name, unit_ids)添加单位到已有编组
get_groups()列出所有编组
command_group(group_name, command_type, ...)向编组下达指令

复合操作类(2 个工具)

Tool说明
batch(actions)在单个 tick 内执行多个操作
plan(steps)按顺序执行步骤并刷新状态

实用工具类(2 个工具)

Tool说明
get_replay_path()获取当前回放文件路径
surrender()投降

地形类(1 个工具)

Tool说明
get_terrain_at(cell_x, cell_y)查询指定格子的地形类型