让 LLM 玩贪吃蛇,最尴尬的瞬间是什么?你还在思考下一步往哪走,蛇已经自己往前挪了一格,撞墙了。Pigame 这个项目要解决的正是这个问题:它用 Pi(一个可配置 LLM 的命令行工具)作为大脑,通过两个工具——game_observe(观察屏幕,把画面转成结构化状态)和 game_move(执行一步移动)——让模型像人一样“看一眼、走一步”地玩黑盒浏览器游戏。

项目代号 GameMind,第一个演示游戏是 Neon Snake(霓虹贪吃蛇)。Pigame 的定位很克制:它只做脚手架,真正的决策完全交给 LLM。架构分三层:Pi + LLM 负责决定做什么、判断目标是否完成;game_observe 是眼睛,把屏幕变成 AgentState(智能体状态,包含玩家位置、食物位置、分数等);game_move / game_wait 是手和脚,负责行动和等待。特别的是,项目刻意没有提供 game_eat_food 或 game_survive 这类高层工具,模型必须自己循环 observe → move,自己推理出“该往食物方向走”。这种设计让模型真正面对黑盒环境,而不是靠预设技能作弊。

核心难点在于:上游的贪吃蛇游戏有自己的游戏循环,时间一直在走。LLM 的 observe → think → move 链路很长,等它想完,蛇已经移动了好几步,决策全部过期,玩起来非常笨拙。Pigame 的解法是修改游戏本身:它内置了一个打过补丁的 snake.html,开启 agent mode(智能体模式)。连接后,游戏自动循环被暂停;调用 game_observe 时世界保持冻结,时间不流逝;调用 game_move 时,蛇严格地朝指定方向走一格(步数可通过 MOVE_STEPS 调整)。这样一来,LLM 拥有了“无限思考时间”,每次决策都基于最新状态,游戏从实时反应变成了回合制决策。

这个思路很妙:与其让模型适应实时游戏,不如改造环境,把问题降维成模型擅长的离散决策。对开发者来说,这意味着你可以用同样的 observe/move 模式去控制任何黑盒系统——浏览器自动化、UI 测试、甚至操作真实软件,只要你能提供观察接口和动作接口。

项目还提供了完整的 smoke 测试脚手架,比如 npm run smoke:eat 会用写死的循环去吃一个食物,验证 Adapter(适配器,连接游戏和工具的中间层)、感知和输入输出链路是否正常,不依赖 LLM。这些测试用于 CI 和调试,不是智能体路径。安装和使用也很简单:克隆仓库、npm install、Playwright install chromium,然后通过 pi -e ./.pi/extensions/pigame.ts 启动扩展,在 Pi 的 TUI 里用 /game connect 连接游戏,再用 /skill:eat-food 或直接粘贴提示词让模型开始玩。

提示词里特别强调:只用 game_observe、game_move 和可选的 game_wait;优先使用 groundTruth 网格坐标(即游戏内部真实坐标,而不是像素位置);吃一个食物后,当分数增加就停止并报告前后分数;不要反向 180°。这些约束帮助模型避免常见错误。另外,项目还支持 mock adapter,方便不启动浏览器时测试。

需要注意的坑:不要自己用浏览器打开 snake.html,只有 Playwright 控制的窗口才有效;如果蛇在 LLM 思考时自己动,说明你用的不是 agent-mode 的 HTML,检查默认路径或 SNAKE_HTML 变量;在 WSLg 环境下要设置 HEADED=1 才能看到 Chromium 窗口。

这个项目目前是 MVP,但它的设计对做 AI Agent 的人很有参考价值:把环境改造成“可暂停、可单步”,让 LLM 在闭环中逐步决策,而不是要求它实时响应。这种思路可以迁移到很多场景,比如给 LLM 一个“暂停按钮”来操作外部工具,或者把连续过程离散化成步骤。如果你想做一个通用的游戏 Agent,或者想研究 LLM 在纯观察-行动循环中的表现,Pigame 是个不错的起点。

阅读原文 → 返回 AI 技术文档

内容与图片版权归原作者所有 · 原文: https://github.com/ifoxhz/pigame