使用 pokemon-agent 包通过无头模拟器自动游玩 Pokémon 游戏。
仓库是 GitHub 上的 NousResearch/pokemon-agent。克隆后设置 Python 3.10+ 虚拟环境。使用 uv(速度优先)创建 venv 并以可编辑模式安装包及 pyboy 额外依赖。如没有 uv,回退到 python3 -m venv + pip。
本机已设置好在 /home/teknium/pokemon-agent,venv 已就绪——只需 cd 到那里并 source .venv/bin/activate。
你还需要 ROM 文件。向用户询问他们的 ROM。本机已有 roms/pokemon_red.gb 在该目录中。
绝不要下载或提供 ROM 文件——始终询问用户。
在 pokemon-agent 目录中激活 venv 后,运行 pokemon-agent serve,用 --rom 指向 ROM,--port 9876。在后台运行(&)。
要从存档恢复游戏,添加 --load-state 加上存档名称。
等待 4 秒启动,然后用 GET /health 验证。
通过 localhost.run 的 SSH 反向隧道让用户在浏览器中查看仪表盘。用 ssh 连接,将本地端口 9876 转发到 nokey@localhost.run 的远程端口 80。输出重定向到日志文件,等待 10 秒,然后 grep 日志找 .lhr.life URL。给用户该 URL 并加上 /dashboard/。
隧道 URL 每次都会变——如重启需给用户新 URL。
POST /save 加描述性名称。好的例子:
before_brock、route1_start、mt_moon_entrance、got_cut
POST /load 加存档名称。
GET /saves 返回所有保存的状态。
启动服务器时用 --load-state 标志自动加载存档。
这比启动后通过 API 加载更快。
GET /state 获取位置、HP、战斗、对话。
GET /screenshot 并保存到 /tmp/pokemon.png,然后用 vision_analyze。
始终两者都做——RAM 状态给出数值,视觉给出空间感知。
优先级:对话 > 战斗 > 治疗 > 剧情目标 > 训练 > 探索
POST /action 加简短动作列表(2-4 个动作,不是 10-15 个)。
截图并用 vision_analyze 确认你移动到了预期位置。
这是最重要的步骤。没有视觉你一定会迷路。
走过门或楼梯时,屏幕会在地图过渡期间淡出到黑色。必须等待它完成。在任何门/楼梯传送后添加 2-3 个 wait_60 动作。如果不等待,位置读取会过时,你会以为还在旧地图。
走出建筑时,你会直接出现在门前。如果向北走,你会立刻重新进入。始终先向左或向右侧移 2 格,然后沿预期方向前进。
第一代文字逐字母缓慢滚动。要快速跳过对话,按住 B 120 帧然后按 A。按需重复。按住 B 让文字以最快速度显示。然后按 A 推进到下一行。
a_until_dialog_end 动作检查 RAM 对话标志,但这个标志不能捕获所有文字状态。如果对话看起来卡住了,改用手动 hold_b + press_a 模式并通过截图验证。
悬崖(小崖边)只能向下(南)跳,不能向上(北)爬。如果向北被悬崖挡住,必须向左或向右找到绕过它的缺口。用视觉识别缺口在哪个方向。明确问视觉模型。
战斗菜单上,RUN 在右下角。从默认光标位置(FIGHT,左上)到达它:按下再右移光标到 RUN,然后按 A。用 hold_b 包裹以快速跳过文字/动画。
战斗菜单上 FIGHT 在左上(默认光标位置)。
按 A 进入招式选择,再按 A 使用第一个招式。
然后按住 B 快速跳过攻击动画和文字。
| 前缀 | 用途 | 示例 |
|---|---|---|
| PKM:OBJECTIVE | 当前目标 | 从 Viridian Mart 取 Parcel |
| PKM:MAP | 导航知识 | Viridian:商店在东北 |
| PKM:STRATEGY | 战斗/队伍计划 | Misty 前需要草系 |
| PKM:PROGRESS | 里程碑追踪 | 击败宿敌,前往 Viridian |
| PKM:STUCK | 卡住的情况 | y=28 的悬崖向右绕过 |
| PKM:TEAM | 队伍笔记 | Squirtle Lv6,Tackle + Tail Whip |
评论区