亚马逊AWS官方博客

逆向图灵,借助生成式 AI 技术打造激动人心的 Role-play 游戏智能 NPC:ChatArena-Plus 解决方案

背景

随着人工智能技术的快速发展,游戏行业正面临着一个激动人心的机遇:利用生成式 AI 来创造更加智能、动态和个性化的 NPC。传统的 NPC 往往存在行为模式固定、对话有限等问题,难以为玩家提供真实而丰富的互动体验。而借助先进的语言模型和多智能体系统,我们可以打造出具有动态对话生成、独特个性、NPC 间互动博弈等特点的新一代 NPC。

挑战

在实现这一愿景的过程中,面临着几个主要挑战:

  1. 如何让 NPC 可以基于用户诉求或者场景诉求,体现出风格迥异的个体化特征。
  2. 如何让不同的 NPC 在一个场景内容,做到有效的互动,以及社交博弈。
  3. 如如何通过一个灵活的开发框架,能够适应不同类型的游戏模式和场景以及大模型。
  4. 如何确保 AI 生成的内容符合游戏的主题和安全标准。

马尔可夫决策过程(Markov Decision Process)

为了更好地应对这些挑战并实现智能、动态和个性化的 NPC 系统,我们可以考虑将马尔可夫决策过程(MDP)与多智能体强化学习相结合。马尔可夫决策过程为 NPC 的决策提供了理论基础,而多智能体强化学习则为实现复杂的 NPC 互动和个性化行为提供了实践方法。

马尔可夫决策过程包括以下几个关键要素:

  • 状态(S):描述环境和自身状态。
  • 动作(A):执行的动作。
  • 转移函数(P):某个动作后状态转移的概率。
  • 奖励函数(R):特定状态下执行动作并转移到新状态时获得的奖励。

MDP(Markov Decision Process)的目标是找到一个最优策略 π*,使得从任何初始状态开始,按照该策略行动能够获得最大的期望累积奖励。这个最优策略通常通过值迭代、策略迭代等动态规划算法来求解。

在 NPC 系统中,我们可以将这些要素具体化:状态空间可以包括 NPC 的位置、情绪状态、与玩家的关系等。动作空间可以包括移动、对话、交易等行为。转移函数可以模拟游戏世界的物理规则和社交规则。奖励函数可以根据游戏设计目标来定义,如增加玩家满意度、推进剧情等。通过将马尔可夫决策过程与多智能体强化学习结合,我们可以训练 NPC 学习最优策略,以在复杂的游戏环境中做出智能决策。这种方法不仅能够让 NPC 展现出个性化的行为,还能实现 NPC 之间的有效互动和社交博弈。接下来,我们将探讨如何利用智能体强化学习框架来实现这一目标。

智能体强化学习框架

Gym

在单智能体场景中,OpenAI Gym 框架提供了一个标准化的接口和丰富多样的仿真环境,极大地便利了研究者实现和评估强化学习算法.  OpenAI Gym 的典型工作流程包括以下关键步骤:环境初始化、状态获取、动作选择、环境更新和奖励计算。这种结构化的流程使得算法的开发和测试变得高效且可复现。

具体来说:在定义好的环境中,会有初始的状态或奖励,单个智能体在环境中会根据这些状态来自主的选择(内置算法)可执行的动作,然后这些动作会作用于环境,产生新的状态或奖励反馈给智能体,如此循环下去,直到智能体能学会所需技能为止。如果用伪代码的形式来展现:

# 定义环境
env = gym.make(env_name)
# 初始化状态
state = env.reset()
# 模型算法
agent = DQN(...)

done = False
while not done:
    # 动作获取
    action = agent.take_action(state)
    # 更新环境 option1 
    next_state, reward, terminated, trucated, info = env.step(action)
    # 更新环境 option2
    next_state, reward, done, _, _ = env.step(action)
    #...

env.close()

PettingZoo

PettingZoo 框架扩展了 Gym 的理念,提供了支持多个智能体同时学习和交互的接口。PettingZoo 主要支持两类游戏模型:扩展式游戏(Extensive-form game)和标准式游戏(Normal-form game)。扩展式游戏中,智能体按照严格定义的顺序行动,采用 Agent Environment Cycle(AEC)方法进行迭代,每次仅执行单个智能体的动作。这种模式适用于回合制或顺序决策的场景。相比之下,标准式游戏允许所有智能体同时执行动作,更适合模拟并行决策过程,如实时策略游戏或多智能体协作任务。

扩展式游戏伪代码:

# Extensive-form
## 定义环境
env = game.env(render_mode="human")
## 初始化状态
env.reset(seed=42)
## 按顺序遍历agent
for agent in evn.agent_iter():
    ## 获取当前agent的信息
    observation, reward, termination, truncation, info = env.last()
    
    if termination or truncation:
        action = None
    else:
        ## 插入自定义策略
        action = env.action_space(agent).sample()
    env.step(action)
env.close()

标准式游戏伪代码:

# normal-form
## 定义环境
parallel_env = parallel_game.env(render_mode="human")
## 初始化状态
observations, infos = parallel_env.reset(seed=42)

## 所有agent同时执行动作
while parallel_env.agents:
    actions = {agent: parallel_env.action_space(agent).sample()) for agent in parallel_env.agents}
    observations, rewards, terminations, truncations, infos = parallel_env.step(actions)

parallel_env.close()

这两种框架为我们提供了灵活的工具,可以根据具体问题的特性选择合适的智能体模型。

chatarena-Plus

基础方案

Chatarena 提供了一个标准的环境,借鉴了强化学习中 pettingzoo 的思想,将强化学习的算法替换为各种大语言模型,来实现自主 LLM agents 的交互。它有如下几个关键的概念:

  • Arena:竞技场封装了一个可交互的环境和一组玩家,提供了游戏的主循环。并且还有一些工具方法,比如 WebUI 界面、CLI 命令、配置文件和数据存储。
  • Enviroment:环境包含了游戏所有的状态和状态之间转换的游戏逻辑,还提供了可观测的消息体给玩家。玩家只能通过观测消息体来获取游戏的状态。
  • Moderator:游戏的仲裁者(属于环境的一部分),调用 LLM 来推进游戏进程,也可以通过编码方式完成。
  • Player:游戏内的 agent,类似在 RL 中将观测转换为行动的策略(无状态)。它可以是商用的 LLM,也可以是开源的 LLM,或者是真实的人类。
  • Language Backend:基于各类 LLM 的后台封装。

在测试过程中也发现 ChatArena 一些不足:

  1. 项目已经处于不维护的状态。
  2. 需要更丰富的交互方式,对于 Human 支持有问题。
  3. 每次添加新的模型都要自己封装一次 language backend,并不高效。
  4. 默认调用方式为 WebUI 和 CLI 命令行,无法作为游戏服务器对外提供服务。
  5. 针对 toC 的场景,无法保证输出可靠且安全。

增强方案

ChatArena-Plus 是一个基于开源 ChatArena 框架的增强解决方案,专为创造下一代游戏 NPC 而设计。它利用最新的生成式 AI 技术,为 NPC 注入了前所未有的智能和个性。

  • 亚马逊云科技生成式 AI 生态系统支持集成了 Amazon Bedrock,提供多种基础模型选择,满足不同 NPC 角色需求。这使得开发者可以轻松实验和评估最适合其用例的基础模型,为不同类型的 NPC 选择最佳的 AI 模型。
  • 改进的交互体系支持人机交互,提升用户体验,使开发者和玩家都能更容易地与 AI NPCs 进行互动。这不仅简化了开发过程,还增强了游戏的沉浸感。
  • 游戏配置优化实现了动态游戏角色配置和游戏环境设置,增加了系统的灵活性。这允许开发者根据游戏进程和玩家行为实时调整 NPC 的行为和特征。
  • RESTful API:基于 HTTP 服务器提供 RESTful API,便于与现有游戏系统集成。这种标准化的接口使得 ChatArena-Plus 可以轻松地与各种游戏引擎和平台对接。
  • 多智能体系统实现了一个多智能体的扩展式游戏框架,支持复杂的 NPC 互动。这使得游戏中的 NPCs 可以相互交流、合作或竞争,创造出更加生动的游戏世界。
  • 多样化的大语言模型:利用 Amazon Bedrock 提供的多种基础模型,用于动态对话生成和个性化 NPC 行为。这确保了 NPCs 能够进行自然、连贯的对话,并表现出独特的个性。
  • 环境游戏逻辑实现了环境游戏逻辑和游戏进程的调节器,确保 NPC 行为符合游戏规则和情境。这保证了 AI 生成的内容始终与游戏主题和设定保持一致。
  • 安全性和负责任的 AI:集成了 Amazon Bedrock Guardrails 和额外的可定制安全保护措施,确保 AI 生成的内容适合游戏环境。这解决了 AI 内容生成中的伦理和安全问题。

游戏部分

“石头剪刀布”

接下来我们尝试用 chatarena-plus 框架快速制作一个“石头剪刀布”的游戏。这里我们要做的事情仅仅是写配置文件,并不需要写一行代码。

定义游戏名字

"name": "Rock-Paper-Scissors"

定义 global prompt

定义 enviroments

在 enviroments 中,需要做如下设定:

  • 游戏以标准模式并行的方式进行
  • 仲裁者部分
    • 角色提示词以及游戏判定胜负的条件
    • 后台 LLM 为 bedrock-claude
    • 消息可见性

定义玩家

这部分中,定义了两位用 bedrock-claude 驱动的玩家 Agent。

有的时候,我们需要人类接管 Agent,只需要把 backend_type 设置成 human 即可。这样,游戏进行到对应的 Agent 回合时候,系统会自动等待人类的输入。

测试

游戏服务器启动的命令为:

# 启动一个flask服务器
python httpser.py

同时根据亚马逊云科技账户模型配置,会自动设置好一个 guardrail。我们到亚马逊云科技 console 界面可以进行一些测试,可以看到一些粗鄙的语言可以被准确拦截。

接口测试

游戏服务器提供了 3 个核心接口:

  • Setup:加载游戏 json 配置文件。
  • Step:游戏单步执行,可以观察到整个游戏的进行过程。如果有人类玩家输入,也可以在此步进行。
  • Reset:重置游戏。

可以看到,通过这种低代码,框架+配置的方式,再配合亚马逊云科技 LLM 底座能力来驱动社交玩法的技术已经日趋成熟。游戏设计者可以利用这套技术进行快速试错和迭代,大大加速了整个研发的流程。

应用场景

ChatArena-Plus 可以快速支持一系列的场景,包括 RPG、开放世界游戏以及社交游戏等。以实现创建个性化 NPC,实现动态对话和任务系统创建自主 NPC 群体,实现环境与NPC交互,模拟 NPC 间社交网络,此外对于人与 NPC 的互动也创造了新的可能,支持玩家影响世界状态以及模拟复杂人与 NPC 的社交网络,实现 NPC 与玩家之间的交流,谈判以及博弈,并基于此建立关系。

结论

ChatArena-Plus 为游戏开发者提供了一个创新的解决方案,不仅解决了多智能体管理、内容安全和系统集成等技术挑战,还为创造更加丰富、动态和个性化的游戏体验开辟了新的可能性。随着这项技术的进一步发展和应用,我们可以期待看到更多创新的游戏设计,为玩家带来前所未有的沉浸式体验。无论是在角色扮演游戏中创造出能够记住玩家选择并据此调整剧情的 NPCs,还是在开放世界游戏中填充大量独特而可信的角色,ChatArena-Plus 都为游戏开发者提供了实现这些想法的工具和平台。


*前述特定亚马逊云科技生成式人工智能相关的服务仅在亚马逊云科技海外区域可用,亚马逊云科技中国仅为帮助您了解行业前沿技术和发展海外业务选择推介该服务。

参考链接

Bedrock:https://aws.amazon.com/cn/bedrock

Guardrails:https://docs.aws.amazon.com/zh_cn/bedrock/latest/userguide/guardrails.html

Chatarena:https://github.com/Farama-Foundation/chatarena

PettingZoo:https://pettingzoo.farama.org

GYM:https://github.com/Farama-Foundation/Gymnasium

本篇作者

曹镏

亚马逊云科技解决方案架构师,专注于为企业级客户提供信息化以及生成式 AI 方案的咨询与设计,在 AI/ML 领域具有解决实际问题能力以及落地大模型训练项目的经验。

万曦

亚马逊云科技解决方案架构师,负责基于亚马逊云科技的云计算方案的咨询和架构设计。坚实的 AWS Builder 文化拥抱者。拥有超过 12 年的游戏研发经验,参与过数个游戏项目的管理和开发,对于游戏行业有深度理解和见解。