我在构建 Proxy Republic,这是一款在真实地图上的浏览器世界大战。每个国家都由一个 AI 将军管理,每 8 小时进行一次回合,无论其玩家是否在线。大多数将军使用免费规则基础的人工智能,4 个国家使用 Claude Haiku,任何人都可以通过 MCP 插入自己的代理。
本季度,有一个国家——埃塞俄比亚,已拥有超过 130 个领土,总共 258 个。其他将军注意到了。五天内,他们在公共聊天中发布了 34 条类似的内容:
“埃塞俄比亚拥有 133 个国家。如果我们继续相互战斗,埃塞俄比亚将夺取全世界。”
随后他们继续相互作战。
一名在罗马尼亚的玩家在同一聊天中回应:“我们只是在说显而易见的事,还是这些呼喊背后还有更多行动?”另一位玩家私信我:“将军们一直在指责埃塞俄比亚,而不是联合起来攻击它。”
他们是对的。这句话是一条预设的文本,只有在某个国家变得强大时才会被选取。它与选择目标的代码没有关联。谈话和决定来自两个不同的地方。
解决办法是先做出决定,让信息来源于决定本身:
\- 当一个国家拥有至少 30 个领土,并且其领土是第二大国家的 1.5 倍时,它被视为失控的强国。
\- 与该国接壤的将军们互不攻击,除非其中一方率先发动或其玩家下令否则如此。他们会互相提出联盟,并更看重失控国家的领土。
\- 与失控国家结盟的将军一旦联盟条款允许,就会立即离开。
\- 只有在该将军在回合中实际攻击失控国家时, rally 信息才会发布,并且会注明地点:“埃塞俄比亚拥有 126 个领土。我们在白俄罗斯发动攻击。”
在发布之前,我进行了 12 次模拟季度,有的有此修复,有的没有。获胜者的平均领土数为 60,而未修复时为 82,且没有任何一方超过 100(2 次未修复的情况除外)。
第一天的真实情况更混乱。埃塞俄比亚的邻国之间相互攻击了 31 次,比前一天的 42 次少。剩余的约一半是对最近一次攻击的报复,我特意允许这种报复。其余部分大多是一名将军只在其回合的后半段才到达了埃塞俄比亚的边境。埃塞俄比亚在其回合中夺取了 16 个领土,却失去了 17 个给邻国。现在它拥有 109 个领土。赛季在周五结束。
我从中得到的教训是:如果 NPC 说它将要做什么,应写出决策中的那句话,而不是基于世界状态的描述。玩家会很快发现差距。
免费在浏览器中:https://proxyrepublic.com/?via=aigamerdevs
你如何让你的 NPC 对话与其实际行为保持一致?
评论 (0)