Axıs
技能目录

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 难度调整的三个旋钮(按质量排序):

  1. 行为多样性(会更多招式)✅ 最好
  2. 反应窗口(给玩家的反应时间更短)✅ 好
  3. 数值(血更厚、伤害更高)❌ 最差

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 行为决策 低 延迟与确定性不可控

必须解决的五个问题:

  1. 延迟:LLM 响应 1–3 秒,不能阻塞玩法 → 异步/预生成/流式
  2. 成本:每会话成本 × 玩家数 → 需缓存与限额
  3. 一致性:NPC 不能前后矛盾 → 用结构化记忆 + 检索
  4. 安全:输出必须过审核(自伤、仇恨、色情、越狱)
  5. 可测试性:输出不确定 → 无法做回归测试(见 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. 交付物

  1. AI 角色定位表(对手/伙伴/模拟器,不重叠)
  2. AI 架构选型 + 决策可视化方案
  3. 敌人可读性检查(预警、模式、反制窗口)
  4. NPC 模拟规格(日程/需求/关系/记忆,及可观察性)
  5. 若用 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 经典)