陪练 AI 是联机游戏的「隐形队友」:它在新手期陪练、在人少时补位、在玩家想练习时当陪打。本 PRD 是《在线联机原型全集》的扩展篇之三,聚焦可复用的陪练 AI 框架——从规则脚本到难度自适应,能横向接入任意 PvP 原型。
1. 目标与验证点
| 编号 | 验证能力 | 说明 |
|---|---|---|
| B1 | 规则陪练 | 新手可稳定击败的陪练,覆盖基础操作 |
| B2 | 行为树决策 | 多策略 AI,支持进攻/防守/资源切换 |
| B3 | 难度自适应 | 根据对局表现实时调整强度 |
| B4 | 真人补位 | 匹配冷启动时以 AI 补位,不露馅 |
| B5 | 与真人混合 | 同一对局真人 + 机器人并存 |
一句话目标:让玩家「随时能练、永远有人陪」,且 AI 强度平滑贴合玩家水平,不明显「太蠢」或「开挂」。
2. 系统架构
flowchart TD
A["AI Bot Manager"] -->|spawn| B["Bot Runtime"]
B --> C["Behavior Tree"]
C --> D["Action Executor"]
B --> E["Difficulty Tuner"]
E -->|perf feedback| B
F["Matchmaker"] -->|fill slot| A
B -->|same protocol| G["Game Room"]
说明:
- Bot Manager:负责 Bot 的生命周期与池化(避免每次对局重建)
- Bot Runtime:跑行为树,输出与真人玩家相同的操作协议
- Difficulty Tuner:采集对局指标,动态调参
- 关键约束:Bot 必须走与真人一致的协议,才能复用反作弊与回放体系
3. 行为树设计
3.1 三层决策
| 层级 | 内容 | 示例 |
|---|---|---|
| 目标层 | 当前策略目标 | 进攻 / 防守 / 资源 |
| 战术层 | 达成目标的动作序列 | 接近 → 攻击 → 撤退 |
| 执行层 | 具体操作 | 移动、放技能、拾取 |
flowchart TD
S["Selector: 选择策略"] --> A{"血量 < 30%?"}
A -->|是| D["防守: 回血 + 规避"]
A -->|否| B{"目标距离 < 攻击范围?"}
B -->|是| C["进攻: 追击 + 攻击"]
B -->|否| E["移动: 拉近距离"]
C --> F["检测技能冷却 → 释放"]
3.2 行为树与规则脚本对比
| 维度 | 规则脚本 | 行为树 |
|---|---|---|
| 简单策略 | 快,够用 | 略重 |
| 多状态切换 | 状态机爆炸 | 天然支持 |
| 可扩展性 | 改代码 | 配置化 |
| 调试 | 日志 | 可视化节点 |
| 适用 | 简单陪练 | 复杂度高的对局 |
选型建议:新手陪练用规则脚本起步;涉及攻防切换、资源取舍时升级行为树。不要一开始就上复杂框架。
4. 难度自适应
4.1 感知-决策-执行三层调参
感知层:反应延迟(Bot 的「看到」有多快)
决策层:策略选择质量(失误率、激进程度)
执行层:操作精度(命中率、反应阈值)
4.2 动态调整算法
// 基于对局表现平滑调整难度(Elo 对标)
type Tuner struct {
targetDiff float64 // 期望 Bot 与玩家胜率差距
reactionMS int
errorRate float64
}
func (t *Tuner) Adjust(botResult float64) {
// botResult: 0 = Bot 被碾压, 1 = Bot 碾压对手
if botResult > 0.6 { // 太强,调弱
t.reactionMS += 50
t.errorRate += 0.05
} else if botResult < 0.4 { // 太弱,调强
t.reactionMS = max(100, t.reactionMS-50)
t.errorRate = max(0.0, t.errorRate-0.05)
}
}
原则:难度变化要「平滑渐进」,不能让玩家突然面对完全不同的对手。胜率目标通常设定在 45%-55% 之间,让玩家「有压力但能赢」。
5. 冷启动补位与真人混合
5.1 匹配冷启动
当匹配等待超过阈值(如 30s):
方案 A:降匹配精度(扩大 Elo 范围)
方案 B:注入 Bot 补位(填满空位)
注入策略:优先「技能对标」的 Bot,伪装 ID/行为
需要后台标记,回放/对局可标注「含 AI 补位」
5.2 真人/机器人混合
| 场景 | 混合方式 |
|---|---|
| 新手局 | 真人 + Bot 各半,Bot 略弱 |
| 人少时段 | 真人为主,Bot 补足空位 |
| 单人对练 | 纯 Bot,可调难度 |
合规与体验:注入 Bot 必须透明可查(后台标记、对局后披露),否则会被视为「假对局」,损害玩家信任。
6. 接口与协议
| 模块 | 接口 | 描述 |
|---|---|---|
| BotManager | POST /bot/spawn | 创建陪练 Bot,指定难度与模式 |
| BotManager | POST /bot/pool/acquire | 从池中取用 Bot(补位) |
| Tuner | POST /bot/{id}/feedback | 上报对局结果,触发调参 |
| Runtime | POST /bot/{id}/pause | 暂停/恢复 Bot 行为 |
| Admin | GET /bot/stats | Bot 胜率分布、混入率监控 |
7. 数据模型
| 表 | 字段 |
|---|---|
bot_profile | bot_id、mode、base_reaction_ms、base_error_rate、tree_version |
bot_instance | instance_id、bot_id、room_id、difficulty、created_at、is_fill |
bot_feedback | instance_id、player_id、result、adjusted_params |
8. 里程碑与验收
M1 规则陪练(1 周)
✅ Bot 能完成基础对局,走与真人一致的协议
M2 行为树决策(1 周)
✅ 攻防切换、资源取舍生效
M3 难度自适应(1 周)
✅ 对局后参数平滑调整,胜率收敛到目标区间
M4 冷启动补位(1 周)
✅ 匹配超时自动补位,后台可标记
验收指标:Bot 对局胜率收敛于 45%-55%;Bot 行为 P99 决策延迟 < 10ms;补位场景玩家投诉「明显是机器人」占比 < 5%。
9. 相关原型衔接
- 接入#6 Pong 对战:反应延迟可调,做乒乓陪练
- 接入#16 简版 MOBA:行为树驱动小兵与英雄 AI
- 与#41 AI 自适应平衡系统互补:前者调「数值平衡」,本系统调「对手强度」
扩展篇定位:陪练 AI 是「永远在线的陪练伙伴」。它解决两个最痛的体验问题——新手没人带、深夜没人陪。与成就系统结合,陪练也能成为成就目标的一部分(「击败 100 个 AI」)。
延伸阅读
- 「在线联机原型全集」目录(60 个原型全景) — 原型全景索引
- 成就与里程碑系统 — 陪练成果可量化(扩展篇之二)
- 「在线联机原型全集」第五章:智能调节与自愈层(#41–#50) — AI 平衡相关
- [[ai]] — AI 推理与工程化
- [[game]] — 游戏服务端实战
下一扩展篇:自定义房间与模组。AI 陪练解决「和谁玩」,自定义房间解决「玩什么、怎么玩」。
继续阅读
探索更多技术文章
浏览归档,发现更多关于系统设计、工具链和工程实践的内容。