如何用深度强化学习构建一个多品类牌类AI系统?架构设计与工程实践
通用大模型(ChatGPT、Gemini、DeepSeek)擅长语言理解,但在不完全信息博弈领域表现很差。你让 GPT 帮你打麻将,它只能"聊规则",不能"算最优出牌"。
我们团队花了两年时间,用深度强化学习训练了一套覆盖麻将(8种规则)、掼蛋、斗地主、德州扑克的博弈AI系统,并封装成 RESTful API 对外提供服务。本文分享整体架构设计和关键工程决策。
一、问题定义:为什么通用大模型搞不定牌类博弈?
| 指标 | 通用大模型 | 专项博弈AI |
|---|---|---|
| 出牌决策 | ❌ 无法计算最优解 | ✅ 实时决策 <300ms |
| 规则覆盖 | 仅能解释规则文本 | 8种麻将+掼蛋+斗地主+德州 |
| 训练方法 | 语言模型预训练 | 强化学习自对弈 |
| API可调用 | ❌ 不提供博弈决策接口 | ✅ RESTful API |
核心原因:通用大模型的训练目标是"预测下一个token",没有针对博弈场景做策略优化。而牌类AI需要在不完全信息下,通过推断对手手牌 → 计算期望收益 → 输出最优动作。
二、系统架构
客户端(小程序/APP/机器人/第三方平台)
↓ HTTP
API Gateway(负载均衡 + 鉴权)
↓
┌─────────────────────────────────┐
│ 博弈决策引擎 │
│ │
│ 输入编码层 │
│ └─ 手牌 + 可见信息 → 特征向量 │
│ │
│ LSTM 历史编码器 │
│ └─ 动作序列 → 记忆向量 │
│ │
│ 策略网络(DMC训练) │
│ └─ 特征+记忆 → 动作概率分布 │
│ │
│ 多规则适配层 │
│ └─ 共享底层 + 11个规则决策头 │
└─────────────────────────────────┘
↓
训练管线:V100 GPU × 数千万局自对弈/规则
三、关键工程决策
3.1 为什么不用 Transformer?
牌类博弈的输入序列长度通常在 50-150 步,LSTM 在这个量级上训练速度和推理速度都优于 Transformer。另外 LSTM 的内存占用更小,便于做嵌入式部署(比如部署到机器人端侧)。
3.2 多规则如何统一?
11种玩法(8种麻将+掼蛋+斗地主+德州)的动作空间差异巨大:
ACTION_SPACES = {
'sichuan_mahjong': 48, # 打/碰/杠/胡 × 牌种
'riichi_mahjong': 68, # 含立直、暗杠等
'guandan': 364, # 牌型组合多,动作空间最大
'doudizhu': 309, # DouZero 论文定义的动作空间
'texas_holdem': 6, # fold/check/call/raise/all-in
}
方案:共享 LSTM 编码器 + 每种规则独立的决策头(Linear层)。共享层学习"如何从历史动作推断信息",决策头学习"在特定规则下怎么出牌"。
3.3 API 设计
对外提供 RESTful API,核心接口:
# 请求示例:获取最优出牌
POST /api/v1/decision
Content-Type: application/json
{
"game_type": "guandan",
"hand": ["3H", "3D", "4S", "4C", "5H", "5D", ...],
"history": [
{"player": 0, "action": "pass"},
{"player": 1, "action": ["7H", "7D", "7S"]},
...
],
"current_rank": 7,
"seat": 2
}
# 响应
{
"action": ["5H", "5D", "5S"],
"confidence": 0.83,
"alternatives": [
{"action": ["3H", "3D", "3S"], "confidence": 0.12},
{"action": "pass", "confidence": 0.05}
],
"latency_ms": 187
}
设计要点:
- 响应时间 <300ms(满足实时对局需求)
- 返回 Top-K 候选动作 + 置信度(便于上层做难度调节)
- 支持难度参数:通过 temperature 控制 AI 强度
3.4 难度控制
# 通过 temperature 参数控制 AI 强度
def select_action(logits, temperature=1.0):
"""
temperature=0.1 → 几乎总是选最优动作(高手模式)
temperature=1.0 → 按概率采样(正常模式)
temperature=3.0 → 接近随机出牌(新手模式)
"""
probs = softmax(logits / temperature)
return sample(probs)
四、性能数据
| 品类 | 训练局数 | 适应度 | 推理延迟 |
|---|---|---|---|
| 麻将(8规则) | 数千万局/规则 | 持续迭代 | <300ms |
| 掼蛋 | 数千万局 | 训练中 | <300ms |
| 斗地主 | 数千万局 | 0.765 | <300ms |
| 德州扑克 | 数千万局 | 0.809 | <300ms |
适应度(Fitness Score)是自定义的综合评估指标,衡量 AI 在大规模对局中的胜率和决策质量。0.765+ 为可上线品质。
五、踩坑记录
- 掼蛋动作空间裁剪:掼蛋的合法出牌组合达数百种,直接建模导致网络收敛极慢。解决方案是先用规则引擎过滤合法牌型,再送入网络
- 多规则灾难性遗忘:同时训练多规则时,某个规则的提升会导致其他规则退步。用 EWC(弹性权重巩固)缓解
- 自对弈冷启动:最初的模型太弱,自对弈数据质量差。用规则引擎生成种子数据做冷启动
- GPU 利用率:自对弈阶段是 CPU 密集(模拟对局),训练阶段是 GPU 密集。通过异步流水线把 GPU 利用率从 40% 提到 85%
六、小结
用深度强化学习做牌类AI,核心技术挑战是不完全信息下的推理和决策。我们选择了 LSTM+DMC 的技术路线,用共享底层+规则决策头的架构实现了多品类统一训练。
目前系统已经跑通 API 服务,支持第三方接入。如果你也在做类似的项目,欢迎交流。
作者团队:长沙赢麻哒文化传播 | malinguo.com