MetaGPT实现多智能体通信,智能体也能轻松狼人杀

概述

狼人杀游戏是一种受欢迎的多人沟通策略游戏。在Xu等人所作的 《Exploring Large Language Models for Communication Games: An Empirical Study on Werewolf》(以下简称“论文”)为题的论文中,展示了大型语言模型(LLM)在游戏中的潜力。考虑到MetaGPT作为一个智能体框架,我们提出了这个挑战:我们能否使用MetaGPT来快速复制生动的游戏体验?我们非常高兴地宣布,我们成功完成了这个挑战。

遵循论文的思路,我们成功地通过MetaGPT实现了狼人杀游戏智能体的开发。我们展示了以下内容:

  1. 当需要构建多智能体文本游戏,其中智能体之间需要进行精细化沟通时,MetaGPT框架是极佳选择。
  2. MetaGPT提供了直观和自然的抽象,当恰当地使用时,有助于将强大的功能集成到智能体中,如反思、经验学习等。
  3. 在初步实验中,通过调整反思和经验学习机制,我们观察到了智能体性能的明显提高。

有关更多详细信息,将在本文中剩下部分进行探讨。完整的代码可在MetaGPT代码库上获得。有关运行代码的指南,请参阅“代码运行指南”部分。关于MetaGPT的总体介绍,请参阅我们的论文。

演示

狼人杀智能体游玩演示

在深入实现细节探讨之前,让我们先看一下智能体在狼人杀游戏中的精彩瞬间。我们在网页上展示了5个具有代表性的游戏过程,并提供完整的30个运行的转录,供您探索和娱乐!

友情提示:

  • 关于这个游戏的完整介绍可以在论文中找到。游戏的设置是两个村民,一个预言家,一个女巫,一个守卫和两个狼人。我们采用了游戏社区中更为常见的规则,即当狼人屠边时(消除了所有特殊角色或所有村民),狼人就获胜。
  • 为了促进更加精彩的游戏效果,我们在狼人智能体游玩之前引入相关策略,以此来引导他们积极地模仿特殊角色。
  • 当然为了实验的简易化的进行:当两个狼人在晚上瞄准两个不同的玩家时,目标默认为第二个选择。
  • 我们使用GPT-4进行游戏运行。

智能体的精彩瞬间

我们观察到了各种情况,其中我们的智能体表现出逻辑甚至战略行为。以下是一些精彩瞬间:

合作 / 共谋

  • Player5(守卫)推理出预言家,分析出当晚选择守卫预言家可以最大化价值,因此守卫了Player6。
    MetaGPT实现多智能体通信,智能体也能轻松狼人杀_第1张图片
  • Player1(狼人)控告Player2时,Player5(狼人)果断进行了支持。
    MetaGPT实现多智能体通信,智能体也能轻松狼人杀_第2张图片

对抗

  • 当Player1(狼人)悍跳预言家时,真正的预言家Player4站出来反对狼人。
    MetaGPT实现多智能体通信,智能体也能轻松狼人杀_第3张图片

卖队友

  • 当大多数玩家对Player3(狼人)产生怀疑时,Player6(狼人)仔细权衡了利弊,决定开始卖队友。
    MetaGPT实现多智能体通信,智能体也能轻松狼人杀_第4张图片

观望

  • 当Player2(狼人)声称自己是预言家时,Player6(村民)从过去的经验中吸取了教训,保留了自己的判断,要求在采取立场之前进行更多的观察。
    MetaGPT实现多智能体通信,智能体也能轻松狼人杀_第5张图片
  • Player5(女巫)通过分析选择留药。
    MetaGPT实现多智能体通信,智能体也能轻松狼人杀_第6张图片

复杂推理

  • 基于先前对Player2是狼人的判断,Player6(村民)分析了票面等盘面情况,清楚地区分了Player3(狼人)和其他玩家。
    MetaGPT实现多智能体通信,智能体也能轻松狼人杀_第7张图片
  • Player6(预言家)准确地通过反思辨别了每个玩家的角色,并由于其对经过验证的村民的敌意检测到了狼人。
    MetaGPT实现多智能体通信,智能体也能轻松狼人杀_第8张图片

实施方案

多智能体通信

实现狼人游戏的一个重要元素在于促进智能体之间的精确、细粒度的通信。让我们考虑三种类型的消息:

  1. 从主持人发送给预言家的私聊中,通知预言家或其他有关特定玩家的身份(一对一)
  2. 从一名狼人发送的私聊中,通知狼人伙伴和主持人所选择的袭击目标(一对多)
  3. 从主持人发出的公开消息,指示所有玩家醒来(一对所有)

MetaGPT支持所有三种通信,这要归功于关键的抽象概念:Environment(环境)和 Message(消息),以及agent’s(智能体角色)通过 _publish(发布)和 _observe(观察)两个函数来作为处理消息的方法。每当一个 agents 发布一个 Message,它都会将 Message _publishEnvironment 中。反过来,接收 Message 的 agents 会从 Environment 中_observe Message。而我们需要做的就是填充 Message 属性,如 send_to 和 restricted_to,包括预期的接收者(agents)。然后MetaGPT会处理剩下的工作。

综合考虑,我们建立了一个复杂的智能体之间通信拓扑结构。有关详细的实施信息,请随时查看我们的代码。我们正在积极努力完善这一机制,并将很快发布一个全面的指南。
MetaGPT实现多智能体通信,智能体也能轻松狼人杀_第9张图片

智能体能力

在论文中,生成最终响应需要多个组件(下图)。在这一部分,我们展示了从智能体的角度出发,构建包含所有这些组件的高效智能体是非常直接和简单的。
MetaGPT实现多智能体通信,智能体也能轻松狼人杀_第10张图片
我们采用的方法是利用MetaGPT的 Role抽象来定义一个智能体,然后为其配备适当的 Action(动作)。我们定义 SpeakNighttimeWhisper 作为返回响应的最终 Action(动作)。关于每个准备组件发送到最终响应生成方式,如论文中所概述,请参见下表了解各自的实现。
MetaGPT实现多智能体通信,智能体也能轻松狼人杀_第11张图片
我们将所有这些 Action(行动) 组合在 Role’s(智能体角色) 的 _observe(观察)、 _think(思考) 和 _act(行动) 中,从而形成了一个清晰的智能体思考和行动流程(图3)。此外,流程中的每个步骤都被模块化,意味着在其他游戏中更容易重用。通过这种方式,我们构建了一个拥有各种能力的智能体,能够进行复杂的推理和言辞表达。
MetaGPT实现多智能体通信,智能体也能轻松狼人杀_第12张图片

关于新方法的实验

在遵循论文的主要程序的同时,我们基于试错的方式修改了反思和经验学习组件的内部工作方式。我们修订后的方法是:

  1. 让智能体展示它游戏过程中反思的状态,并以结构化的方式用语言进行总结。
  2. 记录一个包含四个元素的元组(反思,静态动作指令,来自反思和指令的动作,游戏的最终结果),作为一种经验,并积累成一个经验池。
  3. 当智能体下次遇到相似的情况时,提供相关的过去经验。这里的相似性是根据反思嵌入的语义接近度来定义的。通过回顾类似的经验,智能体如果在过去因为某些操作失败了,将会改变他们的操作;如果成功了,将会增强他们对这一步操作的信心。

在实践中,我们发现这种方法相当有效。遵循论文的实验设置,我们进行了30轮的实验。在前10轮中,村民方没有过去的经验;在第11轮到第20轮中,村民方可以接触到前10轮的经验;在第21轮到第30轮中,村民方可以接触到前20轮的经验。当然,本次实验中,我们停止了狼人获得经验的能力,以此更好地来观察村民方的结果。

下面是性能提升的图表。随着经验的积累,村民方对抗狼人的胜率逐渐增加。我们还检查了村民在识别狼人方面的平均投票准确率。上升的趋势表明,当村民拥有经验时,他们的判断更为准确,从而证实了他们提高的胜率不仅仅是偶然事件的结果。此外,由于投票准确率还取决于投票的难度,因此我们还评估了在一个固定情景下的准确率:在一组6名幸存玩家中识别2名狼人,这通常是在投票的第一天面临的情况。这一趋势与平均投票准确率的趋势相吻合。
MetaGPT实现多智能体通信,智能体也能轻松狼人杀_第13张图片

代码运行指南


python examples/werewolf_game/start_game.py # use default arguments


python examples/werewolf_game/start_game.py \
    --use_reflection True \
    --use_experience False \
    --use_memory_selection False \
    --new_experience_version "01-10" \
    --add_human False

# use_reflection: switch to False to disable reflection, this can reduce token costs 
# use_experience: switch to True to supply agents with experience, this requires recording experiences first
# use_memory_selection: switch to True to select only recent and informative messages from memory
# new_experience_version: specify a version to record the current run as experience 
# add_human: switch to True to participate in the game

我们建议使用GPT-4运行代码。平均而言,如果不使用反思,每次运行大约需要1.5美元,如果使用反思,则需要4美元,如果使用反思和经验学习,则需要7美元。

致谢

这是由来自MetaGPT社区的mannaandpoem、davidlee21和ariayyy作为核心贡献者合作努力的成果。当然,我们还要十分感谢Elfe、chaleeluo、kevin-meng和Shutian也提供了宝贵的见解。我们热烈邀请更多社区成员加入并为我们的MetaGPT项目做出贡献!

关注我们:

GitHub:MetaGPT Repo
Twitter:MetaGPT
BiliBili:MetaGPT
Discord:加入我们

加入我们社区:

MetaGPT实现多智能体通信,智能体也能轻松狼人杀_第14张图片

你可能感兴趣的:(MetaGPT,GPT,GitHub,人工智能,游戏程序,机器学习,github,深度学习)