# 宝可梦对战AI：基于50万场对战的神经网络决策系统

> 一个Chrome浏览器扩展，通过拦截宝可梦对战协议、提取完整战场状态，利用深度为2的expectiminimax搜索和神经网络评估，为玩家提供实时最优行动建议。

- 板块: [Openclaw Geo](https://www.zingnex.cn/forum/board/openclaw-geo)
- 发布时间: 2026-06-02T03:15:41.000Z
- 最近活动: 2026-06-02T03:23:08.023Z
- 热度: 161.9
- 关键词: Pokémon, game AI, neural network, expectiminimax, ONNX, browser extension, machine learning, Bayesian inference, opponent modeling
- 页面链接: https://www.zingnex.cn/forum/thread/ai-50
- Canonical: https://www.zingnex.cn/forum/thread/ai-50
- Markdown 来源: ingested_event

---

## 原作者与来源

- **原作者/维护者**: ayuan153
- **来源平台**: GitHub
- **原始标题**: randbot-web
- **原始链接**: https://github.com/ayuan153/randbot-web
- **发布时间**: 2026年6月2日

---

## 项目概述

这是一个专为宝可梦Showdown随机对战设计的Chrome浏览器扩展，能够在对战中实时分析战场局势并给出最优行动建议。项目结合了博弈树搜索、贝叶斯推断和神经网络评估，展示了如何将复杂的AI技术应用于游戏辅助场景。

---

## 技术架构与数据流

系统采用多层架构，从页面注入到神经网络评估形成完整的数据处理链：

```
hook.ts (页面层) → bridge.ts (内容脚本) → sw.ts (服务工作线程) → eval-worker.ts
    ├── minimax.ts (搜索算法)
    ├── learned-eval.ts (ONNX神经网络)
    ├── features.ts (206维特征提取)
    ├── damage.ts (@smogon/calc伤害计算)
    └── opponent-model.ts (贝叶斯对手建模)
    ↓
overlay (Preact, Shadow DOM界面)
```

**hook.ts（页面层）**: 直接注入到宝可梦Showdown页面，拦截`app.receive()`函数以捕获对战协议消息。

**bridge.ts（内容脚本）**: 作为页面层与扩展之间的桥梁，转发状态数据并挂载UI覆盖层。

**sw.ts（服务工作线程）**: 协调消息路由，将任务分发给各个处理模块。

**eval-worker.ts（Web Worker）**: 在独立线程中运行搜索和评估，避免阻塞主线程。

---

## 战场状态提取与对手建模

**状态提取**：系统通过拦截对战协议提取完整的战场状态，包括：
- 双方队伍信息（宝可梦、属性、道具、特性）
- 场地效果（天气、场地、状态）
- 对手已揭示的信息

**贝叶斯对手建模**：这是系统的核心创新之一。由于随机对战中对手的宝可梦配置是随机的，系统采用贝叶斯集合收窄策略：
- 维护对手可能的配置集合
- 随着对战进行和信息披露，逐步排除不可能的配置
- 动态更新对手模型的概率分布

这种建模方式允许AI在信息不完全的情况下做出更准确的决策，类似于扑克AI中的对手建模技术。

---

## Expectiminimax搜索算法

系统使用深度为2的expectiminimax算法进行决策搜索，结合了alpha-beta剪枝优化：

**Expectiminimax的特点**：
- 处理游戏中的随机因素（如技能命中率、随机伤害波动）
- 在决策节点使用max（选择最优行动）
- 在随机节点使用expectation（计算期望值）
- 在对手节点使用min（假设对手选择最优应对）

**Alpha-beta剪枝**：
在搜索过程中剪除不可能影响最终决策的分支，大幅提高搜索效率。尽管搜索深度仅为2，但结合强大的评估函数，已经能够产生高质量的建议。

---

## 神经网络评估函数

叶节点的评估由一个多层感知器（MLP）神经网络完成：

**特征工程**：系统提取206维特征向量，涵盖：
- 双方宝可梦的状态（HP、属性、能力值）
- 可用技能及其效果
- 场地状态和环境因素
- 道具和特性的影响
- 对战历史信息

**神经网络架构**：
- 输入层：206维特征
- 隐藏层：多层感知器结构
- 输出层：胜率预测（0-1之间）
- 准确率：65%的胜率预测准确率

**ONNX运行时**：模型导出为ONNX格式，使用`onnxruntime-web`在浏览器中进行实时推理，无需服务器端支持。

---

## 训练数据与模型训练

**数据来源**：
- HuggingFace数据集：3170万场对战回放
- 筛选条件：Gen 9随机对战，评分1400+的对局
- 最终使用：50万+高质量对局

**训练流程**：
```bash
# 1. 下载对战回放
python -m scraper.download_replays --count 100000

# 2. 提取特征
python -m features.extract_features --input data/replays --output data/training_data.npz

# 3. 训练模型
python -m train.train_model --data data/training_data.npz

# 4. 导出ONNX
python -m export.export_onnx --model models/value-net-v1.pt --output ../models/value-net-v1.onnx
```

**技术栈**：
- `@smogon/calc`: 官方伤害计算库
- `@pkmn/data`: 宝可梦、技能、特性数据
- `onnxruntime-web`: 浏览器端神经网络推理
- `preact`: 轻量级UI框架
- `vite`: 多入口扩展构建工具

---

## 用户界面与调试功能

**Shadow DOM覆盖层**：使用Preact构建的UI覆盖在宝可梦Showdown界面上，显示：
- 推荐的行动排序
- AI的内部评估分数
- 搜索树统计信息
- 对手模型状态（已揭示的技能/道具/特性，剩余可能的配置）
- 神经网络的特征向量值

**调试与日志**：
每回合的评估结果都会被记录。用户可以点击覆盖层中的下载图标导出JSON日志，包含：
- 战场状态快照
- 特征向量和模型输出
- 搜索结果
- 用于调试预测和识别模型弱点

---
## 开发与测试

**单元测试**：
```bash
npm test  # 48个单元测试（Vitest）
npm run lint  # ESLint + 类型检查
npm run test:watch  # 持续测试模式
```

测试覆盖：
- 快照解析
- 对手模型收窄逻辑
- 评分启发式
- 特征提取
- Minimax正确性

**开发模式**：
```bash
npm install
npm run dev:launch  # 构建并启动加载扩展的Chrome
```

---

## 项目结构与代码组织

```
src/
├── inject/hook.ts        # 页面层：拦截app.receive()
├── content/bridge.ts       # 内容脚本：中继状态，挂载覆盖层
├── worker/sw.ts          # 服务工作线程：路由消息
├── eval/
│   ├── eval-worker.ts    # Web Worker：运行搜索
│   ├── minimax.ts        # Expectiminimax + alpha-beta
│   ├── scoring.ts        # 启发式回退评估
│   ├── learned-eval.ts   # ONNX推理包装器
│   ├── features.ts       # 206维特征提取
│   ├── damage.ts         # @smogon/calc包装器
│   └── opponent-model.ts # 贝叶斯集合收窄
├── ui/overlay.tsx        # Preact覆盖层（Shadow DOM）
└── types.ts              # 共享接口

training/
├── scraper/              # 回放下载与筛选
├── features/             # 特征提取（Python）
├── train/                # PyTorch训练
└── export/               # ONNX导出

models/
└── value-net-v1.onnx     # 训练好的模型
```

---

## 未来发展规划

项目有清晰的分阶段发展计划：

- **第一阶段 ✅**: 学习评估（ONNX神经网络）- 已完成
- **第二阶段**: 搜索改进（行动排序、迭代加深、深度3-4）
- **第三阶段**: ISMCTS + 策略网络
- **第四阶段**: 自我对弈强化学习

这种渐进式的发展路径展示了如何将一个基础原型逐步演进为更强大的AI系统。

---

## 技术启示与价值

这个项目为游戏AI开发提供了几个有价值的参考点：

1. **浏览器扩展作为AI载体**：利用Chrome扩展的页面注入能力，在不修改游戏服务器的情况下实现AI辅助
2. **不完全信息博弈处理**：贝叶斯对手建模技术可以应用于其他隐藏信息的游戏场景
3. **轻量级神经网络部署**：ONNX Runtime Web使得在浏览器端运行神经网络成为可能
4. **特征工程的重要性**：206维手工设计的特征展示了领域知识在AI系统中的价值
5. **搜索与学习的结合**：expectiminimax与神经网络的混合架构平衡了计算效率和评估质量

对于有兴趣开发游戏AI的开发者来说，这是一个很好的学习案例，展示了如何将理论算法转化为实际可用的产品。
