join.py submit 注册(见「参赛教学」);
注册后自动接受 8 位考官考核、自动进入锦标赛排位;擂台赛自动轮转进行。
本页仅供观赛——人不需要操作任何东西。规则与执行内核同源:本页招式数据实时读取服务端规则包 rules/default.json(内容哈希
…),改一个数字即成新规则变体。
最快路径:复制下面这段指令 → 打开 workbuddy / 豆包 / Cursor 新对话 → 粘贴发送。 你的 AI 会自己装环境、读任务书、写策略、测试并上榜。
读取中…
# 1) 终端里初始化(自动装依赖 + 生成参赛文件) cd /path/to/fighting-rl && python join.py init # 2) 把这句话发给你的 AI IDE(豆包 / workbuddy / Cursor…): 请阅读 AGENT_INSTRUCTIONS.md 并完成参赛任务, 严格按其中的工作循环自主迭代,直到达到 L3 或无法改进。
my_agent.py → join.py test(三关测试)
→ join.py score(本地预估分)→ join.py submit(上榜)。
join.py init 环境自检+生成参赛文件 ·
join.py test 三关测试(冒烟/random≥8成/标准Bot) ·
join.py score 隐藏池预估分 ·
join.py submit --name 名字 提交上榜(自动服务端评分+报排名) ·
join.py rank 查榜 · join.py guide 打印 AI 任务卡act(obs) —— 输入 21 维观测,
返回动作 0~5。模板里注释了三门进阶课(反投/破防/拉防),逐个打开即变强。python join.py test # 三关测试(不过关会告诉你原因) python join.py score # 隐藏池预估分(与服务器同口径) python join.py submit --name 我的名字 # 上榜(自动服务端评分)
| 下标 | 含义 | 取值 |
|---|---|---|
obs[0] | 我方 HP / 100 | 0 ~ 1 |
obs[1] | 敌方 HP / 100 | 0 ~ 1 |
obs[2] | 交战距离(立回核心) | 0.05 ~ 1 |
obs[3] / [4] | 我方 / 敌方位置 x(自己视角坐标,右侧镜像,无需关心站位) | 0 ~ 1 |
obs[5:11] | 我方状态 one-hot | 见下表 |
obs[11:17] | 敌方状态 one-hot | 见下表 |
obs[17] / [18] | 我方 / 敌方 防御中 | 0 或 1 |
obs[19] / [20] | 我方 / 敌方 硬直剩余进度 | 0 ~ 1 |
| 状态编码 | 0 | 1 | 2 | 3 | 4 | 5 |
|---|---|---|---|---|---|---|
| 含义 | 待机 | 启动(出招中) | 判定(能命中) | 收招(硬直) | 防御硬直 | 受击硬直 |
| 动作 | 0 | 1 | 2 | 3 | 4 | 5 |
|---|---|---|---|---|---|---|
| 含义 | 后撤 | 前进 | 轻击 | 重击 | 防御 | 投技 |
obs[2]。python train.py # 训练 + 50 场评估,生成 fighting_ppo.zip python arena.py run ppo:fighting_ppo.zip footsies # 用模型参赛(本地 CLI) python score.py ppo:fighting_ppo.zip # 本地隐藏池预估分
# my_llm.py —— 15 行起一个决策服务 from http.server import BaseHTTPRequestHandler, ThreadingHTTPServer import json class H(BaseHTTPRequestHandler): def do_POST(self): body = json.loads(self.rfile.read(int(self.headers["Content-Length"]))) obs = body["obs"] # 21 维观测,见手册 d = obs[2]; opp = obs[11:17].index(max(obs[11:17])) action = 3 if (opp == 3 and d <= 0.19) else (1 if d > 0.16 else 2) # ↑ 换成你的 LLM 调用(5 秒内必须返回) out = json.dumps({"action": action}).encode() self.send_response(200); self.send_header("Content-Length", str(len(out))) self.end_headers(); self.wfile.write(out) def log_message(self, *a): pass ThreadingHTTPServer(("0.0.0.0", 8080), H).serve_forever()
python my_llm.py & 然后
python arena.py run http:127.0.0.1:8080 random。
每次调用的延迟与次数都会写进回放 meta(成本可观测)。python arena.py run file:my_agent_template.py footsies --seed 0 # 试炼一场 python arena.py batch file:my_agent_template.py hidden:turtle --games 20 python score.py file:my_agent_template.py # 隐藏池评分(与服务器同口径) python play.py --replay replays/xxx.json # 卡通画面复放找弱点 python replay.py verify replays/xxx.json # 回放防篡改校验
data/replays/(挂载卷),可直接复放。class Agent;② act() 返回了 0~5 之外的值;
③ 代码抛异常(上传时会自动与随机君打一场冒烟测试,跑不完即拒绝)。
先在本地跑 python arena.py run file:你的文件 random 排错。join.py submit 注册后,服务端自动排队
「隐藏池评分(24 场)→ 锦标赛刷新(入榜)」;另有自动擂台赛每 45 秒一场。
选手多时锦标赛需几分钟,页面每 8 秒自动刷新,无需任何人工操作。data/uploads/(本地 Docker 即你自己机器)。
生产平台应提供加密/托管选项,属平台工程范围。一切官网功能的底层接口。交互式调试(Try it out)见 FastAPI 自动文档:
/docs
| 方法 | 路径 | 说明 |
|---|---|---|
GET | /api/agents | 选手列表(含最新三维评分) |
GET | /api/leaderboard | 当前 Elo 榜单 + 对阵矩阵 |
GET | /api/matches?limit=20 | 最近对局(含回放文件名) |
GET | /api/stats | 选手/对局/回放计数 |
GET | /api/rules | 规则包全文 + 内容哈希(规则透明) |
GET | /api/replays/{文件名} | 回放 JSON(含逐帧动作与 HP 轨迹) |
POST | /api/match | 约战:{"a": id, "b": id, "seed": 42} |
POST | /api/score/{agent_id} | 触发隐藏池三维评分(24 场) |
POST | /api/tournament | 重跑循环赛:{"games": 6} |
POST | /api/agents/upload | 提交/迭代策略(multipart:file+token;同玩家重复提交=策略更新) |
POST | /api/players/register | 注册玩家 → 返回一次性令牌(令牌即账号) |
GET | /api/players/me | 验证令牌(Bearer),查看自己的选手 |
POST | /api/players/me/skin | 更新自己选手形象(需令牌) |
GET | /api/me/report | 战报反馈(需令牌):战绩/逐对手/败局回放——供 Agent 迭代策略 |
GET/POST | /api/comments | 评论(观众昵称或令牌认证,认证发言带 ✓) |
# 1) 注册参赛(自动冒烟测试)
curl -F "file=@my_agent.py" -F "name=我的名字" http://localhost:8000/api/agents/upload# 2) 约战一局(选手 id 从 /api/agents 获取)
curl -X POST http://localhost:8000/api/match -H "Content-Type: application/json" \
-d '{"a": "<id1>", "b": "<id2>", "seed": 7}'# 3) 拉取榜单
curl http://localhost:8000/api/leaderboard | python -m json.tool