跳到主要內容

Pokemon Player

通過無頭仿真自主遊玩 Pokemon 遊戲。啟動遊戲服務器,從 RAM 讀取結構化遊戲狀態,做出戰略決策,併發送按鈕輸入——全部在終端中完成。

技能元數據

來源捆綁(默認安裝)
路徑skills/gaming/pokemon-player

參考:完整 SKILL.md

信息

以下是 Hermes 在觸發此技能時加載的完整技能定義。這是技能激活時代理看到的指令。

Pokemon Player

使用 pokemon-agent 包通過無頭仿真遊玩 Pokemon 遊戲。

何時使用

  • 用戶說“play pokemon”、“start pokemon”、“pokemon game”
  • 用戶詢問關於 Pokemon Red、Blue、Yellow、FireRed 等的問題
  • 用戶希望觀看 AI 玩 Pokemon
  • 用戶引用 ROM 文件(.gb、.gbc、.gba)

啟動流程

1. 首次設置(克隆、虛擬環境、安裝)

GitHub 上的倉庫是 NousResearch/pokemon-agent。克隆它,然後 設置 Python 3.10+ 虛擬環境。使用 uv(速度更快,首選) 創建虛擬環境並以可編輯模式安裝帶有 pyboy 額外依賴的包。如果 uv 不可用,則回退到 python3 -m venv + pip。

在此機器上,它已在 /home/teknium/pokemon-agent 設置完畢, 虛擬環境已就緒——只需 cd 進入該目錄並執行 source .venv/bin/activate。

你還需要一個 ROM 文件。向用戶索取他們的 ROM 文件。在此機器上, 該目錄下的 roms/pokemon_red.gb 存在一個 ROM 文件。 切勿下載或提供 ROM 文件——始終向用戶索取。

2. 啟動遊戲服務器

在激活虛擬環境的情況下,從 pokemon-agent 目錄內部,運行 pokemon-agent serve,使用 --rom 指向 ROM 文件,並使用 --port 9876。 使用 & 在後臺運行。 要從保存的遊戲恢復,添加 --load-state 及保存名稱。 等待 4 秒以完成啟動,然後通過 GET /health 進行驗證。

3. 為用戶設置實時儀表板以便觀看

使用 localhost.run 通過 SSH 反向隧道,以便用戶可以在瀏覽器中查看 儀表板。使用 ssh 連接,將本地端口 9876 轉發到 nokey@localhost.run 的遠程端口 80。將輸出重定向 到日誌文件,等待 10 秒,然後在日誌中 grep 查找 .lhr.life URL。提供給用戶的 URL 需附加 /dashboard/。 隧道 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)

  • 屏幕上有對話/文本 → 推進對話
  • 戰鬥中 → 戰鬥或逃跑
  • 隊伍受傷 → 前往 Pokemon 中心
  • 靠近目標 → 小心導航

步驟 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,但不會告訴你周圍有什麼
  • ledge(邊緣)、柵欄、標誌、建築門、NPC——僅通過截圖可見
  • 向視覺模型提出具體問題:“我北邊一格是什麼?”
  • 當卡住時,在嘗試隨機方向之前務必截圖

場景切換需要額外等待時間

當穿過門或樓梯時,屏幕會在地圖切換期間淡出至黑色。你必須等待其完成。在任何門/樓梯場景切換後添加 2-3 個 wait_60 動作。如果不等待,位置讀數會過時,你會認為自已仍在舊地圖中。

離開建築物時的陷阱

當你離開建築物時,你會直接出現在門的正前方。 如果你向北走,你會立刻回到室內。務必先向左或向右橫向移動 2 格,然後再朝你預期的方向前進。

對話處理

第一代(Gen 1)遊戲的文本是逐字母緩慢滾動的。為了快速跳過對話,按住 B 鍵 120 幀,然後按 A 鍵。根據需要重複此操作。按住 B 鍵會使文本以最大速度顯示。然後按 A 鍵進入下一行。 a_until_dialog_end 動作會檢查 RAM 中的對話標誌位,但該標誌位無法捕獲所有文本狀態。如果對話似乎卡住,請改用手動“按住 B + 按 A”的模式,並通過截圖進行驗證。

ledge(懸崖邊緣)是單向的

Ledge(小懸崖邊緣)只能向下(向南)跳下,絕不能向上(向北)攀爬。如果被向北的 ledge 擋住,你必須向左或向右尋找繞過的缺口。使用視覺模型來識別缺口的方向。明確詢問視覺模型。

  • 每次移動 2-4 步,然後截圖檢查位置
  • 進入新區域時,立即截圖以確定方向
  • 詢問視覺模型:“去 [目的地] 該往哪個方向?”
  • 如果嘗試 3 次以上仍被困住,請截圖並重新全面評估
  • 不要連續發送 10-15 個移動指令——你會越過目標或被卡住

從野生戰鬥中逃跑

在戰鬥菜單中,“RUN”(逃跑)位於右下角。要從默認光標位置(“FIGHT”,左上角)到達該選項:按下方向鍵下,然後按右,將光標移動到“RUN”,然後按 A 鍵。使用 hold_b 包裹操作以加速跳過文本/動畫。

戰鬥(FIGHT)

在戰鬥菜單中,“FIGHT”(戰鬥)位於左上角(默認光標位置)。 按 A 鍵進入招式選擇,再按一次 A 鍵使用第一個招式。 然後按住 B 鍵以加速跳過攻擊動畫和文本。

戰鬥策略

決策樹

  1. 想要捕捉?→ 削弱對方然後投擲精靈球
  2. 不需要的野生寶可夢?→ 逃跑(RUN)
  3. 有屬性優勢?→ 使用效果絕佳的招式
  4. 沒有優勢?→ 使用最強的本系加成(STAB)招式
  5. HP 較低?→ 切換寶可夢或使用傷藥

第一代屬性相剋表(關鍵對陣)

  • 水剋制火、地面、岩石
  • 火剋制草、蟲、冰
  • 草剋制水、地面、岩石
  • 電剋制水、飛行
  • 地面剋制火、電、岩石、毒
  • 超能力剋制格鬥、毒(在第一代中佔據主導地位!)

第一代特性

  • 特殊(Special)數值同時決定特殊招式的攻擊和防禦
  • 超能力屬性過於強大(幽靈系招式存在漏洞)
  • 暴擊率基於速度(Speed)數值
  • 緊束(Wrap)/綁緊(Bind)防止對手行動
  • 聚氣(Focus Energy)漏洞:降低暴擊率而非提高

記憶約定

前綴用途示例
PKM:OBJECTIVE當前目標從真新鎮商店獲取包裹
PKM:MAP導航知識真新鎮:商店在東北方向
PKM:STRATEGY戰鬥/隊伍計劃在挑戰霞之前需要草屬性寶可夢
PKM:PROGRESS里程碑追蹤器擊敗勁敵,前往真新鎮
PKM:STUCK被困情況y=28 處的 ledge,向右走以繞過
PKM:TEAM隊伍備註傑尼龜 Lv6,撞擊 + 搖尾巴

進度里程碑

  • 選擇初始寶可夢
  • 交付來自真新鎮商店的包裹,獲得寶可夢圖鑑
  • 灰色徽章 — 小剛(岩石)→ 使用水/草屬性
  • 藍色徽章 — 霞(水)→ 使用草/電屬性
  • 橙色徽章 — 馬志士(電)→ 使用地面屬性
  • 彩虹徽章 — 莉佳(草)→ 使用火/冰/飛行屬性
  • 粉紅徽章 — 阿桔(毒)→ 使用地面/超能力屬性
  • 金色徽章 — 娜姿(超能力)→ 最難的道館
  • 深紅徽章 — 夏伯(火)→ 使用水/地面屬性
  • 綠色徽章 — 坂木(地面)→ 使用水/草/冰屬性
  • 四天王 → 冠軍!

停止遊戲

  1. 通過 POST /save 使用描述性名稱保存遊戲
  2. 使用 PKM:PROGRESS 更新記憶
  3. 告訴用戶:“遊戲已保存為 [名稱]!說 'play pokemon' 以繼續。”
  4. 終止服務器和隧道後臺進程

常見陷阱

  • 絕不下載或提供 ROM 文件
  • 在不檢查視覺的情況下,不要發送超過 4-5 個動作
  • 離開建築物後,在向北走之前務必先橫向移動
  • 在門/樓梯傳送後,始終添加 wait_60 x2-3
  • 通過 RAM 檢測對話不可靠——請使用截圖驗證
  • 在進行高風險遭遇戰之前保存
  • 每次重啟隧道時,隧道 URL 都會更改