跳到主要内容

Pokemon Player

通过无头模拟器 + RAM 读取来玩宝可梦。

Skill 元数据

来源内置(默认安装)
路径skills/gaming/pokemon-player
平台linux, macos, windows

参考:完整 SKILL.md

信息

以下是 Hermes 在触发此 skill 时加载的完整 skill 定义。这是 agent 在 skill 激活时看到的指令内容。

Pokemon Player

通过使用 pokemon-agent 包进行无头模拟来玩宝可梦游戏。

使用时机

  • 用户说"play pokemon"、"start pokemon"、"pokemon game"
  • 用户询问 Pokemon Red、Blue、Yellow、FireRed 等
  • 用户想观看 AI 玩宝可梦
  • 用户提到 ROM 文件(.gb、.gbc、.gba)

启动流程

1. 首次设置(克隆、venv、安装)

仓库为 GitHub 上的 NousResearch/pokemon-agent。克隆后, 设置 Python 3.10+ 虚拟环境。使用 uv(速度更快,优先推荐) 创建 venv 并以可编辑模式安装带有 pyboy extra 的包。 若 uv 不可用,则回退到 python3 -m venv + pip。

本机已在 /home/teknium/pokemon-agent 完成设置, venv 已就绪 —— 只需 cd 进入该目录并执行 source .venv/bin/activate。

还需要一个 ROM 文件。请向用户索取。本机在该目录的 roms/pokemon_red.gb 处已有一个。 绝不下载或提供 ROM 文件 —— 始终向用户索取。

2. 启动游戏服务器

在已激活 venv 的 pokemon-agent 目录内,运行 pokemon-agent serve,通过 --rom 指定 ROM 路径,--port 9876。 使用 & 在后台运行。 如需从存档恢复,添加 --load-state 并指定存档名称。 等待 4 秒启动完成,然后通过 GET /health 验证。

3. 为用户设置实时看板(dashboard)

通过 localhost.run 使用 SSH 反向隧道,让用户可在浏览器中查看 看板。使用 ssh 连接,将本地端口 9876 转发到 nokey@localhost.run 的远程端口 80。将输出重定向到日志文件,等待 10 秒, 然后在日志中 grep .lhr.life URL。将附加了 /dashboard/ 的 URL 提供给用户。 隧道 URL 每次都会变化 —— 重启后请给用户新的 URL。

存档与读档

何时存档

  • 每 15-20 回合游戏操作后
  • 在道馆战、对手遭遇或高风险战斗务必存档
  • 进入新城镇或地下城前
  • 在任何不确定的操作前

如何存档

使用描述性名称 POST /save。示例: before_brock、route1_start、mt_moon_entrance、got_cut

如何读档

使用存档名称 POST /load。

列出可用存档

GET /saves 返回所有已保存状态。

服务器启动时读档

启动服务器时使用 --load-state 标志可自动加载存档。 这比启动后通过 API 加载更快。

游戏循环

第 1 步:观察(OBSERVE)—— 检查状态并截图

GET /state 获取位置、HP、战斗、对话信息。 GET /screenshot 并保存到 /tmp/pokemon.png,然后使用 vision_analyze。 两者都要做 —— RAM 状态提供数值,视觉提供空间感知。

第 2 步:判断(ORIENT)

  • 屏幕上有对话/文字 → 推进对话
  • 在战斗中 → 战斗或逃跑
  • 队伍受伤 → 前往宝可梦中心
  • 接近目标 → 谨慎导航

第 3 步:决策(DECIDE)

优先级:对话 > 战斗 > 治疗 > 剧情目标 > 练级 > 探索

第 4 步:行动(ACT)—— 最多移动 2-4 步,然后重新检查

POST /action,使用简短的动作列表(2-4 个动作,而非 10-15 个)。

第 5 步:验证(VERIFY)—— 每次移动序列后截图

截图并使用 vision_analyze 确认移动到了预期位置。 这是最重要的步骤。没有视觉你一定会迷路。

第 6 步:用 PKM: 前缀将进度记录到记忆中

第 7 步:定期存档

动作参考

  • press_a —— 确认、对话、选择
  • press_b —— 取消、关闭菜单
  • press_start —— 打开游戏菜单
  • walk_up/down/left/right —— 移动一格
  • hold_b_N —— 按住 B 键 N 帧(用于加速文字显示)
  • wait_60 —— 等待约 1 秒(60 帧)
  • a_until_dialog_end —— 反复按 A 直到对话结束

经验总结的关键提示

持续使用视觉

  • 每移动 2-4 步截一次图
  • RAM 状态告诉你位置和 HP,但不告诉你周围有什么
  • 悬崖、栅栏、标牌、建筑门口、NPC —— 只能通过截图看到
  • 向视觉模型提出具体问题:"我北边一格是什么?"
  • 卡住时,在尝试随机方向前务必先截图

传送过渡需要额外等待时间

走过门或楼梯时,地图切换期间屏幕会淡入黑色。 必须等待切换完成。在任何门/楼梯传送后添加 2-3 个 wait_60 动作。 不等待的话,位置读取会是旧数据,你会以为自己还在旧地图。

建筑出口陷阱

离开建筑时,你会出现在门正前方。 如果向北走,你会直接回到建筑内。务必先向左或向右侧移 2 格, 再朝目标方向前进。

对话处理

第一代文字逐字母缓慢滚动。要加速对话, 按住 B 键 120 帧,然后按 A。根据需要重复。按住 B 使文字以最快速度显示。 然后按 A 推进到下一行。 a_until_dialog_end 动作会检查 RAM 对话标志,但该标志 不能捕获所有文字状态。如果对话似乎卡住, 改用手动 hold_b + press_a 模式,并通过截图验证。

悬崖是单向的

悬崖(小型断崖边缘)只能向下跳(向南),不能向上攀爬(向北)。 如果向北被悬崖阻挡,必须向左或向右找到绕行缺口。 使用视觉识别缺口在哪个方向。明确询问视觉模型。

导航策略

  • 每次移动 2-4 步,然后截图检查位置
  • 进入新区域时,立即截图定向
  • 询问视觉模型"去[目的地]往哪个方向?"
  • 若尝试 3 次以上仍卡住,截图并完全重新评估
  • 不要连发 10-15 个移动动作 —— 你会走过头或卡住

从野生战斗逃跑

在战斗菜单中,RUN 在右下角。从默认光标位置(FIGHT,左上角)到达 RUN: 按下再按右将光标移到 RUN,然后按 A。用 hold_b 加速文字/动画。

战斗(FIGHT)

战斗菜单中 FIGHT 在左上角(默认光标位置)。 按 A 进入招式选择,再按 A 使用第一个招式。 然后按住 B 加速攻击动画和文字。

战斗策略

决策树

  1. 想要捕捉?→ 削弱后投掷精灵球
  2. 不需要的野生宝可梦?→ 逃跑
  3. 有属性克制?→ 使用效果拔群的招式
  4. 无克制优势?→ 使用最强的本系招式
  5. HP 低?→ 换人或使用药水

第一代属性克制表(关键对应)

  • 水克火、地面、岩石
  • 火克草、虫、冰
  • 草克水、地面、岩石
  • 电克水、飞行
  • 地面克火、电、岩石、毒
  • 超能力克格斗、毒(第一代中极为强势!)

第一代特性

  • 特殊能力 = 特殊招式的攻击防御
  • 超能力属性过于强大(幽灵系招式存在 bug)
  • 要害一击基于速度能力值
  • 缠绕/束缚使对手无法行动
  • 专注能量 bug:降低要害率而非提升

记忆约定

前缀用途示例
PKM:OBJECTIVE当前目标从青莲市商店取包裹
PKM:MAP导航知识青莲:商店在东北方
PKM:STRATEGY战斗/队伍计划对战小霞前需要草系
PKM:PROGRESS里程碑追踪击败对手,前往青莲市
PKM:STUCK卡住情况y=28 处悬崖向右绕行
PKM:TEAM队伍备注杰尼龟 Lv6,撞击 + 尾巴摇摆

进度里程碑

  • 选择初始宝可梦
  • 从青莲市商店取回包裹,获得图鉴
  • 岩石徽章 —— 小刚(岩石)→ 使用水/草
  • 瀑布徽章 —— 小霞(水)→ 使用草/电
  • 雷电徽章 —— 马修(电)→ 使用地面
  • 彩虹徽章 —— 莉卡(草)→ 使用火/冰/飞行
  • 灵魂徽章 —— 阿桂(毒)→ 使用地面/超能力
  • 沼泽徽章 —— 娜姿(超能力)→ 最难道馆
  • 火山徽章 —— 夏伯(火)→ 使用水/地面
  • 大地徽章 —— 坂木(地面)→ 使用水/草/冰
  • 四天王 → 冠军!

停止游戏

  1. 通过 POST /save 以描述性名称存档
  2. 用 PKM:PROGRESS 更新记忆
  3. 告知用户:"游戏已存为 [名称]!说 'play pokemon' 可继续。"
  4. 终止服务器和隧道后台进程

注意事项

  • 绝不下载或提供 ROM 文件
  • 不要在未检查视觉的情况下发送超过 4-5 个动作
  • 离开建筑后向北走前务必先侧移
  • 门/楼梯传送后务必添加 wait_60 x2-3
  • 通过 RAM 检测对话不可靠 —— 用截图验证
  • 在高风险遭遇存档
  • 每次重启隧道 URL 都会变化