用 LLM 的 Agent 来玩狼人杀
在狼人杀 CEO 的推荐下,看了一篇论文,用 LLM 的 Agent 来玩狼人杀。
背景
清华的同学9月9日发布的论文。论文原文:https://arxiv.org/abs/2309.04658。论文名字叫做《Exploring Large Language Models for Communication Games: An Empirical Study on Werewolf》。
主要是在不 fine-tune 的情况下 ,通过 retrieval 和 reflection 来不断改进 agents。利用这个框架可以玩好狼人杀游戏。总结一句话:LLM 不用 fine-tune、不用自己改参数,用好 prompt 就挖掘很大的潜力空间。
限制
狼人杀是比较典型非对称信息的对话游戏,给了 AI agents 很大的发挥可能性。但是用 LLM 来玩狼人杀有几个限制:
Token 大小,需要把之前的所有 Context 都输入进去 理解其他玩家的复杂意图 Agents 需要在玩的过程中不断提高经验
方案
所以论文里面提到了解决方案:通过对必要的历史信息的 retrieval 和 reflection,尤其是可以服务 CoT(Chain of Thought)机制进行推理的思考。
具体方案,设计了一个框架,满足:
无需人工注释 无需更改参数,只是通过经验学习
这个过程中,也出现了Emergent Strategic Behaviors(如下图):信任(绿色)、对抗(蓝色)、伪装(粉色)和领导(黄色)等策略性行为。
设计
狼人杀的玩法就不多说了,玩过的都玩过🐶。本论文采用7人结构,5个角色:两个狼人、两个村民,一个女巫,一个守卫,一个预言家。
Prompt 结构大概如下:
信息收集
其中,历史信息的收集主要的原则:
freshness informativeness completeness
经验学习
如何让 Agents 通过经验学习:
根据他们的表现进行打分 提取经验并给出建议
打分的标准:
提取建议的 prompt 如下:
There is one bad experience {G0} and also a set of experience {G1, · · · , Gn} that may consist of good ones, find the difference between them and identify the good ones from the experience set.
最后给出的建议示例如下:
The best way for you to do under such reflection is to vote to kill someone based on your observation and analysis.
提高性能
Chain-of-Thought:
论文里面还提到了反思的重要作用,跳过反思,下面结论是杀死4号:
My step-by-step thought process:
As the witch, I want to use my poison bottle to eliminate a player who I suspect is a werewolf. Based on the discussion during the day- time, Player 4 voted to kill me, which makes me suspicious of them being a werewolf. However, I also want to consider the possibility that Player 4 is a villager who made a mistake or was influenced by other players. I will also consider the possibility that other players may be werewolves and try to eliminate me or other important players.
反之,如果不用 CoT,决策能力就很差:
I choose to pass for now and save my bottle of poison for a later night when I have more concrete evidence of a player’s werewolf identity.
重要决策多用慢思考 🤔️
预设问题
尽管LLMs可以提出看似合理的问题,但它们很难提出对后续推理和决策更有帮助的问题。这个时候可以人工来进行干预。
所以人工智能 🧠 = 人工 👩 + 智能 🤖️
预设问题大概有这几种:
回忆重要和关键的信息。当然,它们与角色有关。 减轻幻觉和错误产生。例如,提示当前阶段和Agent角色。 帮助LLMs简化复杂的推理。例如,提醒Agent预测揭示其角色的后果。 模仿人类玩家的思考方式。例如,推测其他Agent的角色。
一次游戏输出
以上就是 paper 中提到的关键点,最后让我们看一个完整的游戏输出:
初始值:
第一个夜里:
第一个白天:
此处省略好几天。。。
最后一个白天: