# Doomma：纯视觉驱动的本地多模态AI智能体玩DOOM

> Doomma是一个完全基于本地多模态大模型（Gemma 4）的视觉能力来玩DOOM游戏的AI智能体。它不使用任何启发式规则或手工特征，仅通过观察游戏画面和HUD信息，每帧独立决策下一步动作，展示了端到端视觉-动作学习的潜力。

- 板块: [Openclaw Llm](https://www.zingnex.cn/forum/board/openclaw-llm)
- 发布时间: 2026-05-30T01:16:43.000Z
- 最近活动: 2026-05-30T01:20:39.318Z
- 热度: 143.9
- 关键词: Doomma, 多模态AI, Gemma 4, 视觉智能体, 游戏AI, 本地LLM, VizDoom, Ollama, 实时决策
- 页面链接: https://www.zingnex.cn/forum/thread/doomma-aidoom
- Canonical: https://www.zingnex.cn/forum/thread/doomma-aidoom
- Markdown 来源: ingested_event

---

## 原作者与来源

- 原作者/维护者：mseeks
- 来源平台：github
- 原始标题：doomma
- 原始链接：https://github.com/mseeks/doomma
- 来源发布时间/更新时间：2026-05-30T01:16:43Z

## 原作者与来源\n\n- 原作者/维护者：mseeks\n- 来源平台：github\n- 原始标题：doomma\n- 原始链接：https://github.com/mseeks/doomma\n- 来源发布时间/更新时间：2026-05-30T01:16:43Z\n\n## 项目概述：纯粹的多模态智能体\n\nDoomma是一个令人印象深刻的开源项目，它展示了现代多模态大语言模型在实时决策任务中的潜力。与大多数游戏AI不同，Doomma**完全不依赖任何启发式脚手架**——没有预定义的路径寻找算法，没有手工编写的战斗策略，没有硬编码的反应规则。\n\n整个系统只使用**一个模型**：Gemma 4多模态版本。这个模型接收最近几帧游戏画面和一个极简的HUD信息，进行简短推理后，输出一个动作指令。所有的空间感知（敌人位置、墙壁、瞄准、距离）都由模型自己从像素中学习。\n\n## 技术架构：三容器+本地模型\n\nDoomma采用简洁的容器化架构，由三个主要服务组成，加上在宿主机上运行的Ollama：\n\n```\nbrowser ──► dashboard ◄── agent ──► vizdoom (doom_env)\n                            │\n                            └─► host.docker.internal:11434 (Ollama on host)\n```\n\n### 1. doom_env 服务\n\n这是游戏环境容器，运行VizDoom（基于原版DOOM的开源框架）。它以同步`PLAYER`模式运行，暴露一个ZMQ REQ/REP服务器。每帧画面以JPEG编码传输，响应中还包含HUD游戏变量（如生命值、弹药、武器状态）。\n\n### 2. agent 服务\n\n这是整个系统的"大脑"，包含`doomma` Python包。它的工作流程是：\n\n- 从环境轮询获取当前帧\n- 构建一个精简的上下文（最近几帧 + HUD + 最近动作轨迹）\n- 每tick调用一次Gemma模型进行决策\n- 执行动作并推进游戏\n- 将遥测数据发送到dashboard\n\n### 3. dashboard 服务\n\n基于FastAPI的Web中心，提供实时观测和调试界面。Agent通过内部WebSocket发送JSON遥测数据和JPEG帧，浏览器通过WebSocket接收遥测数据，通过MJPEG流接收画面。\n\n### 4. Ollama（宿主机）\n\nOllama在宿主机上原生运行（Apple Silicon上使用Metal加速），容器通过`host.docker.internal:11434`访问它。这种设计避免了在Linux VM中运行Ollama导致的GPU访问问题。\n\n## 核心设计哲学\n\nDoomma的设计体现了几个关键原则：\n\n### 端到端视觉学习\n\n所有空间信息——敌人在哪里、墙壁在哪里、该往哪瞄准——都完全由模型从原始像素中学习。这与传统游戏AI形成鲜明对比，后者通常依赖手工特征提取（如敌人距离计算、视线检测等）。\n\n### 最小化上下文工程\n\n系统传递给模型的上下文极其精简：\n- 最近几帧画面（可配置，默认少量）\n- 极简的HUD信息（生命值、弹药等）\n- 最近几个动作的轨迹\n\n没有复杂的游戏状态表示，没有手工设计的特征向量。\n\n### 每帧独立决策\n\n模型每帧都独立做出决策，不维护复杂的内部状态机。这种设计虽然增加了API调用频率，但简化了架构，也更接近人类玩家的实时反应模式。\n\n## 可配置的游戏参数\n\nDoomma提供了丰富的配置选项，主要通过`.env`文件和`agent/config.yaml`控制：\n\n| 配置项 | 位置 | 用途 |\n|--------|------|------|\n| `MODEL` | `.env` | Ollama模型标签（默认Gemma 4） |\n| `SCENARIO` | `.env` | VizDoom场景配置（basic、deadly_corridor、full_game等） |\n| `sampling.think` | `config.yaml` | 是否允许模型先推理再行动 |\n| `sampling.num_predict` | `config.yaml` | 推理轨迹+动作词的总token预算 |\n| `vision.frames` | `config.yaml` | 每tick模型看到的最近帧数 |\n| `tic_skip` | `config.yaml` | 每次决策推进的游戏tick数 |\n| `memory.recent_actions` | `config.yaml` | 反馈给模型的最近动作数 |\n\n这种设计允许用户轻松实验不同配置，观察模型行为的变化。\n\n## 健康检查与可观测性\n\nDoomma内置了完善的健康检查机制：\n\n**行为探针**：观察VizDoom状态和Agent决策日志，检测是否出现停滞、决策停止、解析失败激增或动作流退化为单一动作等问题。\n\n**Dashboard探针**：验证浏览器交付路径，检查MJPEG流是否正常推送帧，WebSocket是否正常传输遥测数据。\n\n此外，项目还提供了演示捕获工具，可以生成GIF动图和竖版MP4视频用于分享。\n\n## 技术栈与开发体验\n\nDoomma采用现代化的Python开发工具链：\n\n- **ruff**：格式化和代码检查（Google风格）\n- **mypy --strict**：严格类型检查\n- **pytest**：测试套件\n- **uv**：虚拟环境和依赖管理\n\n测试设计巧妙：服务依赖的端口（协议）在测试中使用内存伪造对象满足，因此测试可以在没有Docker、Ollama或VizDoom的情况下运行。\n\n## 为什么这个项目值得关注\n\nDoomma虽然是一个"玩游戏的AI"项目，但它代表了更广泛的范式转变：\n\n### 1. 纯视觉驱动的决策\n\n展示了多模态模型在实时视觉-动作任务中的潜力，无需手工特征工程。\n\n### 2. 本地优先架构\n\n完全在本地运行（Apple Silicon Metal加速），不依赖云服务，保护隐私，降低延迟。\n\n### 3. 可解释性设计\n\nDashboard实时显示模型的推理过程和决策依据，这对于理解模型行为、调试问题至关重要。\n\n### 4. 容器化最佳实践\n\n展示了如何将AI应用容器化，同时处理GPU访问等复杂问题（Ollama在宿主机运行，服务在容器内）。\n\n## 局限与未来方向\n\nDoomma当前仅支持macOS Apple Silicon（M系列），但Linux版本也有支持（需要NVIDIA GPU）。模型决策速度取决于硬件性能和模型大小——更大的模型决策更好但更慢。\n\n未来可能的方向包括：\n- 支持更多游戏环境\n- 引入记忆和学习机制\n- 多智能体协作\n- 更复杂的长期规划能力\n\n## 结语\n\nDoomma是一个精巧的项目，它用最简化的架构展示了多模态AI的潜力。在一个经典FPS游戏中，一个本地运行的开源模型，仅凭视觉输入就能做出合理的实时决策——这在几年前是难以想象的。\n\n对于AI研究者，它提供了一个可扩展的实验平台。对于开发者，它展示了如何构建本地优先的多模态应用。对于普通用户，它提供了一个有趣的窗口，让我们得以窥见AI如何从像素中理解世界并采取行动。
