26 · 游戏 AI 与智能体系统
26 · 游戏 AI 与智能体系统
本文件的第一原则:游戏 AI 的目标不是"聪明",是"可被理解且有趣"。 一个让玩家困惑的强 AI 是坏设计;一个让玩家能预判并反制的弱 AI 是好设计。
1. AI 在游戏里的三种角色
| 角色 | 目标 | 关键指标 | 例子 |
|---|---|---|---|
| 对手 | 提供有意义的挑战 | 可读性、可反制、难度可控 | 战斗敌人、Boss |
| 伙伴 | 分担负荷或制造情感连接 | 不添乱、可信、有性格 | 队友、宠物 |
| 世界模拟器 | 让世界显得活着 | 一致性、涌现性、低可预测性 | NPC 日程、势力、生态 |
三个角色的设计冲突:
- 对手要可预测(否则不公平),世界模拟器要不可预测(否则死板)
- 伙伴要不抢戏,对手要有存在感
裁决:同一个 AI 不要同时承担两个角色。Boss 就做对手,不要让它同时当剧情角色又当模拟器。
2. 敌人 AI:可读性优先于智能
核心矛盾:AI 越强,玩家越难理解;越难理解,挫败越强。
| 原则 | 做法 |
|---|---|
| 意图公开 | 敌人下一步做什么可视化(StS intent、Into the Breach 全公开) |
| 预警(Telegraphing) | 攻击前有 ≥300ms 的可读预告(动作/音效/光效) |
| 行为模式化 | 玩家能学会"这个敌人会做 X"。模式化不是缺陷,是特性 |
| 反制窗口 | 每个强攻击必须有可反制的窗口 |
| 不作弊 | AI 不获得玩家无法获知的信息(除明确的难度设定) |
| 失败可归因 | 玩家死了要能说出"我应该在 X 时做 Y" |
"聪明的假象":玩家感知的智能 ≈ 反应恰当 + 有变化 + 不重复犯蠢。 实现上不需要真的智能,需要的是恰当的行为选择。
AI 难度调整的三个旋钮(按质量排序):
- 行为多样性(会更多招式)✅ 最好
- 反应窗口(给玩家的反应时间更短)✅ 好
- 数值(血更厚、伤害更高)❌ 最差
3. AI 与难度系统的关系
| 手法 | 说明 | 风险 |
|---|---|---|
| 静态难度 | 固定 AI 参数 | 安全 |
| 隐形 DDA | 连续 2 次失败 → AI 参数下调 ~10% | 只调量与频率,不调规则与手感 |
| 可见难度档位 | 玩家自选 | 安全,推荐 |
| AI 作弊 | AI 获得额外信息/资源 | 仅在明确标注的高难度下可接受 |
| Rubber banding | AI 追分 | 玩家察觉 → 信任崩塌;只做隐性且只向下补偿 |
铁律(重申 systems/10):DDA 只调量与频率(敌人数量、生成间隔、攻击频率),
绝不调规则与手感(伤害倍率、判定窗口、移动速度)。
4. 五种 AI 架构与选择
| 架构 | 原理 | 适合 | 成本 |
|---|---|---|---|
| 有限状态机 FSM | 状态 + 转移 | 简单敌人、Boss 阶段 | 极低 ✅ 首选 |
| 行为树 BT | 节点树 + 优先级 | 中等复杂度敌人、可读性强 | 低 ✅ 推荐 |
| 效用 AI Utility | 给每个行为打分,选最高 | 需要权衡的行为选择、世界模拟 | 中 |
| 目标导向 GOAP | 目标 + 规划 | 复杂自主 NPC | 高 |
| 群体行为 Boids/群体模拟 | 局部规则 + 涌现 | 大量单位、生态 | 中 |
独立游戏建议:
- 敌人:FSM 或行为树(够用且可读)
- 世界模拟:效用 AI(打分表容易调、容易可视化)
- 大量单位:局部规则 + 涌现(不要给每个单位写 AI)
选择依据:复杂度不是问题,可调试性才是。选你能可视化、能 debug 的架构。
5. NPC 与角色 AI
| 系统 | 做法 | 价值 |
|---|---|---|
| 日程(Schedule) | NPC 按时间表活动 | 世界显得活着(零成本高感知) |
| 需求(Needs) | 饿/累/社交,驱动行为 | 涌现行为(Rimworld) |
| 关系(Relations) | NPC 之间的好感/仇恨 | 涌现叙事 |
| 记忆(Memory) | 记住玩家做过的事 | 玩家的行为有意义 |
| 性格(Traits) | 行为权重差异 | 个体辨识度 |
关键设计:NPC 的行为必须可被玩家观察和推测。 玩家看到 NPC 在吃饭 → 推出"他有饥饿需求" → 这是模拟深度的可读化。 不可观察的模拟等于不存在的模拟。
6. LLM 与生成式 AI 的系统化应用
可行方向:
| 用途 | 可行性 | 注意事项 |
|---|---|---|
| 对话生成 | 中高 | 需强约束(人格卡、知识边界)、成本、延迟、审核 |
| 内容辅助生成 | 高(开发期) | 用于生产管线,不用于运行时 |
| 意图解析(玩家自由输入) | 中 | 需兜底与降级 |
| 动态叙事 | 低(运行时) | 一致性与可测试性风险大 |
| NPC 行为决策 | 低 | 延迟与确定性不可控 |
必须解决的五个问题:
- 延迟:LLM 响应 1–3 秒,不能阻塞玩法 → 异步/预生成/流式
- 成本:每会话成本 × 玩家数 → 需缓存与限额
- 一致性:NPC 不能前后矛盾 → 用结构化记忆 + 检索
- 安全:输出必须过审核(自伤、仇恨、色情、越狱)
- 可测试性:输出不确定 → 无法做回归测试(见
production/24)
独立游戏建议:
- 用 LLM 做开发期工具(文案草稿、变体生成、本地化初稿)收益最高、风险最低
- 运行时 LLM 只做非关键路径(闲聊、氛围),且必须有降级方案(关掉也能玩)
- 永远不要让 LLM 决定数值/规则——不可测、不可平衡
7. AI 可读性与公平性检查
| # | 检查 |
|---|---|
| 1 | 玩家能预判 AI 的下一步吗? |
| 2 | 每个致命攻击都有 ≥300ms 的预警吗? |
| 3 | 玩家死了能说出"我错在哪"吗? |
| 4 | AI 是否使用了玩家无法获知的信息? |
| 5 | AI 的行为模式是否可被学习? |
| 6 | 是否存在"AI 卡住不动"的状态? |
| 7 | AI 是否会在玩家看不见的地方做影响玩家的事? |
| 8 | 难度调整是否只调量与频率? |
8. 反模式
| 症状 | 修法 |
|---|---|
| 追求"真智能" | 目标是可理解且有趣 |
| AI 使用玩家无法获知的信息 | 除标注的高难度,一律禁止 |
| 致命攻击无预警 | 加 ≥300ms 预告 |
| 难度只靠 AI 数值 | 优先加行为多样性 |
| AI 行为完全随机 | 玩家无法学习 → 挫败;要模式化 |
| NPC 行为不可观察 | 不可观察的模拟等于不存在 |
| 一个 AI 同时当对手 + 剧情角色 + 模拟器 | 拆开 |
| 用 GOAP 做简单敌人 | 过度工程;FSM 够用 |
| LLM 决定数值或规则 | 不可测不可平衡,禁止 |
| 运行时 LLM 无降级方案 | 必须能关掉还能玩 |
| 无 AI 卡死检测 | 加状态超时与兜底行为 |
| 无法可视化 AI 决策 | 必须做 debug 可视化 |
9. 交付物
- AI 角色定位表(对手/伙伴/模拟器,不重叠)
- AI 架构选型 + 决策可视化方案
- 敌人可读性检查(预警、模式、反制窗口)
- NPC 模拟规格(日程/需求/关系/记忆,及可观察性)
- 若用 LLM:延迟/成本/一致性/安全/降级 五项方案
10. 参考
systems/10-difficulty-randomness-failure.md(DDA 与公平性)- Subset Games《Into the Breach》postmortem(完全信息 + 确定性 AI)
- 案例:Rimworld(效用 AI + 需求)、Dwarf Fortress(模拟深度)、F.E.A.R.(GOAP 经典)