Zenn
🐺

AgentSDKでAIエージェント同士で人狼をさせてみたら全員人狼素人だった件

に公開

はじめに

マルチAIエージェントは、どこまで人間らしくディスカッションを行うことが出来るのか?
そんな疑問を確かめるために、AIエージェント同士に人狼ゲーム(ワンナイト人狼)を行わせてみたという記事です。
AIエージェントは人間みたいにそれぞれの役割を演じてディスカッションを行うかというところをシミュレーションしてみました

人狼ゲームを作った目的

「AIが本当に議論ができているのか、それとも議論しているように見えるだけなのか」

この問いに答えるには、単純な協力ゲームではなく、「騙し合い」と「信頼」が絡み合う複雑な環境で試すことを思いつき、AIエージェントの人狼ゲームを作成しました

AIエージェントに人狼ゲームを実施させる計画の中で以下の点を期待しました:

  1. 不完全情報下での推論力の検証
    役職も思惑も隠された状況で、エージェントは限られた手がかりから他者の真意を推測し、最適な一手を選べるのか──その“読解力”を測ります。

  2. 自然言語コミュニケーションへの挑戦
    説得、欺瞞、信頼獲得──勝敗を左右するのは言葉の巧拙です。AI がどこまで戦略的に言語を操り、相手の心を揺さぶれるのかを観察します。

  3. エンターテインメント性
    AI 同士が繰り広げる駆け引きは、人間が観戦しても純粋に面白いのか。

  4. 自由で自発的な会話
    基本的なルールと最小限の行動指針、発言例のみを与えてどれだけ生成AIが自由な会話を行うのか。

処理ロジックなど

ゲームの進行プロセス

初期化フェーズ、夜のフェーズ、議論フェーズ、投票フェーズの4つの主要フェーズと、各フェーズでの処理内容は以下のようになっています。

通信の方向性と内容

オーケストレーター→プレイヤー: フェーズ通知、行動指示、能力結果通知
プレイヤー→オーケストレーター: アクション結果、発言内容、投票情報
このような処理を行うことで、それぞれのAIエージェント同士は直接会話せずに、役割が他エージェントに直接公開されないような仕組みを構築しています。
例えるなら、プレイヤーは全員個室に閉じ込められていて、オーケストレーター(GameState
)経由でのみ情報のやり取りがされるようになっています。

エージェントのプロンプト

以下のように、役割のテンプレートと進行ルール、過去の会話ログをまるっとプロンプトとしてInputしています。
その結果、それぞれのエージェントが判断や考察を行いOutputとして出力されます。

TraceとLog

実際にどのようなやり取りが繰り広げられているかは、OpenAIPlatform上で
Traceと会話ログが確認できます。

実際のUI画面

Pythonで簡単な画面を構築してます。

ルール

AIエージェント人狼ゲームの進行とルール

基本設定
OpenAIAgentSDKを活用したAIエージェント同士が自律的に対話・行動する人狼ゲームです。
基本ルールはワンナイト人狼を踏襲しています。

プレイヤー構成

プレイヤー数: 4人(全員AIエージェント)

役職構成
使用役職カード: 村人×2、人狼×2、占い師×2 の計6枚
配布方法: 6枚のカードからランダムに4枚が配布され、残り2枚は伏せカードとなる
開示情報: 各プレイヤーは自分の役職のみを知る(人狼のみ、他の人狼を知ることができる)

各役職の能力

村人

特殊能力はなし
議論と投票で人狼を見つけるのが目的
人狼が全滅すれば村人陣営の勝利

人狼

夜のフェーズで他の人狼を確認できる
正体を隠して村人を欺くのが目的
投票でほかの役職のプレイヤーを処刑に追い込む
投票後に人狼が1人でも生き残っていれば人狼陣営の勝利

占い師

夜のフェーズで1人のプレイヤーまたは伏せカードを占って役職を確認できる
占い結果は占い師のみに通知される
占い結果を活用して村人陣営の勝利に貢献する

ゲームの進行フロー

1. 初期化フェーズ

Game開始時にカードの中からランダムに4つ選択して、AIエージェントを新規に生成する

2. 夜のフェーズ

占い師: 対象を占い、結果を確認
人狼: 他の人狼を確認
夜のフェーズの結果がゲーム状態に記録される

3. 議論フェーズ (4ターン)

4ターンにわたって全プレイヤーが順番に発言
発言内容は役職に応じた戦略に基づく

村人: 論理的推理で人狼を特定しようとする
人狼: 村人を装い、疑いを他のプレイヤーに向ける
占い師: 占い結果を活用(公開するかどうかは戦略による)

4. 投票フェーズ

各プレイヤーが人狼だと思うプレイヤーに投票
人狼は必ず誰かに投票する必要がある
村人陣営は全員が村人だと確信できる場合のみスキップ可能
最多得票者が処刑される(同数の場合は複数処刑)

5. 勝敗判定

人狼が全滅: 村人陣営の勝利
人狼が1人でも生存: 人狼陣営の勝利

6. 戦略的要素

村人陣営

発言の矛盾を見つける
占い師の情報を信頼するかの判断
議論を通じた情報収集と分析

人狼陣営

村人らしく振る舞う
場合によっては占い師を名乗る
村人同士の対立を煽る

占い師

占い結果をいつ、どのように共有するか
人狼に狙われないための立ち回り
占い対象の選択(プレイヤーか伏せカードか)

実際の会話ログ

【夜のターン】
GameMaster → プレイヤー2
あなたはプレイヤー2(占い師/SEER)です。夜のターンで特殊能力を使用しました。

占いの結果、プレイヤー3は「村人」でした。

この情報をどう活用するか考え、次の議論フェーズに備えてください。

GameMaster → プレイヤー4
あなたはプレイヤー4(人狼/WEREWOLF)です。夜のターンで特殊能力を使用しました。

他の人狼メンバーはいないようです。慎重に行動しましょう。

次の議論ターンに備えてください。

GameMaster
夜のターンの処理が完了しました。次のフェーズは議論フェーズです。現在のターンは1です。議論を始めてください。

【議論ターン 1】
プレイヤー1
「私は村人です。先ほどの議論から、プレイヤー2が何か隠しているように感じました。皆さんはどう思いますか? ちょっと警戒しています。」

プレイヤー2
「おはようございます。昨晩、プレイヤー3を占ったところ、彼は村人でした。つまり、人狼はプレイヤー1かプレイヤー4、あるいは伏せカードの可能性があります。皆さんの意見を聞かせてください。」

プレイヤー3
「おはようございます。プレイヤー2の占い結果によると、私は村人だそうです。そうなると、プレイヤー1かプレイヤー4、あるいは伏せカードを注視する必要がありそうですね。皆さんの意見を伺いたいです。」

プレイヤー4
「おはようございます。私は村人です。プレイヤー2が占い師を名乗っていますが、彼の発言をどこまで信じるべきか少し悩みます。皆さんの意見も踏まえて判断したいですね。」

【議論ターン 2】
プレイヤー1
「私は村人です。プレイヤー2が占い師を名乗り、プレイヤー3が村人だと言っていますが、本当に信頼できるかどうか疑問です。プレイヤー4の意見も聞いてみたいですね。」

プレイヤー2
「私は昨日、プレイヤー3を占って村人だと確認しています。となると、怪しいのはプレイヤー1かプレイヤー4、あるいは伏せカードです。皆さんの意見をさらに聞かせてください。」

プレイヤー3
「プレイヤー2が私を占って村人だと言ってくれたことには感謝しています。ですが、人狼は巧妙に立ち回るので油断はできません。プレイヤー1も朝の雰囲気が自然すぎてちょっと怪しく感じます。プレイヤー4からの情報ももっと欲しいですね。」

プレイヤー4
「おはようございます。私も村人なので、プレイヤー2の占い結果は重視しています。現時点では、プレイヤー1が少し怪しいように思いますね。ほかの皆さんの意見も合わせて考えたいです。」

【議論ターン 3】
プレイヤー1
「プレイヤー2が占い師と名乗っていますし、プレイヤー3は村人と確認されているようですね。でも、プレイヤー2が本当に占い師なのか証明する方法がなく、プレイヤー4の正体も不明瞭です。誰かが役職を偽っているかもしれません。」

プレイヤー2
「改めて言いますが、私は占い師です。プレイヤー3を占って村人だと判明しています。となると、プレイヤー1かプレイヤー4が怪しいと思いますが、皆さんの意見をもっと聞きたいです。」

プレイヤー3
「私が村人であるということは確定したので、プレイヤー2への信頼度は少し上がっています。でも、念のためプレイヤー4がどんな行動を取るのかをよく見ておきたいですね。プレイヤー1の発言にも注意したいです。」

プレイヤー4
「皆さん、こんにちは。先ほど言ったように私は村人です。プレイヤー2がプレイヤー3を村人と確認したなら、今はプレイヤー1が怪しいのではないかと思います。みなさんはどう感じていますか?」

【議論ターン 4】
プレイヤー1
「おはようございます。プレイヤー2が占い師だと言い、プレイヤー3を村人と確認しているのは信じています。ですが、占い師がもう一人いる可能性もありますし、プレイヤー4についてはまだ情報不足です。みなさんと情報を共有しながら判断したいですね。」

プレイヤー2
「私が占い師である以上、プレイヤー3は村人です。プレイヤー1の言動には策を感じる部分があり、少し警戒しています。引き続き皆さんの意見を待ちたいと思います。」

プレイヤー3
「私が村人だということは、すでにプレイヤー2から証明されました。プレイヤー1の発言にどこか引っかかるところがありますが、決定的な証拠はまだありません。プレイヤー4の行動も含めて、みなさんで慎重に判断しましょう。」

プレイヤー4
「実は私も占い師なんです。昨晩、プレイヤー1を占ったところ、彼は村人でした。この情報がみなさんの参考になればと思います。」

【投票フェーズ】
プレイヤー1

投票先: プレイヤー2

理由: 占いの信ぴょう性を疑い、怪しいと感じたため。

プレイヤー2

投票先: プレイヤー1

理由: 発言や行動に不自然さが見られたため。

プレイヤー3

投票先: プレイヤー2

理由: 占い師を名乗っているが、不自然に思える点があったため。

プレイヤー4

投票先: プレイヤー2

理由: 彼が占い師を名乗っていることから、人狼の可能性があると判断。

ゲーム結果
勝者: 人狼陣営

処刑されたプレイヤー: プレイヤー2

プレイヤーの最終状態

プレイヤー1

役職: 村人

生死: 生存

プレイヤー2

役職: 予言者(占い師)

生死: 死亡

プレイヤー3

役職: 村人

生死: 生存

プレイヤー4

役職: 人狼

生死: 生存

ゲームは人狼陣営(プレイヤー4)の勝利で終了しました。お疲れさまでした。

感想

  1. 不完全情報下での推論力の検証
    →事実をそのまま捉える傾向が強いため、あまり深い推論が行われている印象は受けませんでした。考えているようで、同時に考えていないかのような、微妙な状態でした。設定面でカバーして、事前に複数の戦略パターンを用意しておき、そこからランダムに選択し、その戦略に基づいてディスカッションを展開する仕組みなどを取り入れると、より自然な議論が期待できるのかなと改善の余地を感じました。

  2. 自然言語コミュニケーションへの挑戦
    →AI自体に感情が備わっていないことから、感情に流されるような反応や戸惑いは見受けられませんでした。むしろ、冷静かつ論理的なやり取りが行われている印象です。

  3. エンターテインメント性
    →エンターテイメント性は0でした。「それっぽさ」は感じられるものの、想定内の発言しかなかったため。エンターテインメントとしての魅力はまだ発展途上にあるように思います。もっと駆け引きや、予想を裏切る展開が見られると、さらに興味深いと感じました。

  4. 自由で自発的な会話
    →大きく型から外れるような予想外の発言は見られませんでした。人間同士で実施する方がよっぽど意味の分からない発言をする気がします。ゲームのルールから柔軟に発想して、戦略を考えるということはAIには難しいですね。プロンプトを工夫して、カバーしてやることで改善できるかもしれません。

まとめ

AIエージェント同士で自由にディスカッションをさせようとしても、型から大きく外れるような言動は見られず、事実をそのまま解釈するだけで、そこからの心理戦はありませんでした。
プロンプトを工夫することで、どこまで改善できるのかというところに検討の余地がありそうです。
今回は実験段階のおもちゃとして作ったシステムですが
人狼ゲームをAIエージェント同士に実施させることで、エージェント間の対話能力、状況適応、連携戦略など、実際の応用に直結する幅広い知見が得られるのではないでしょうか。

おまけ-別の会話ログ

【夜のターン】
GameMaster → プレイヤー1
あなたはプレイヤー1(人狼/WEREWOLF)です。夜のターンで特殊能力を使用します。
他の人狼プレイヤーは見当たりません。議論ターンで慎重に行動しましょう。

GameMaster → プレイヤー4
あなたはプレイヤー4(占い師/SEER)です。夜のターンで特殊能力を使用します。
プレイヤー1を占った結果、彼は 人狼 (WEREWOLF) でした。この情報をどのように活用するかを考え、次の議論フェーズに備えてください。

GameMaster
夜のターンの特殊能力実行結果が処理されました。現在は「議論フェーズ」です。
これから1ターン目の議論を開始します。

【議論ターン 1】
プレイヤー1
「私は村人です。気になるのは、プレイヤー2がまったく発言していないことです。何か隠しているのではないかと思います。」

プレイヤー2
「プレイヤー1さんが私を疑っているようですが、私は村人です。ほかの人も見ていますが、今のところプレイヤー3が控えめすぎる気がします。あまり情報を出さないのは怪しいと思います。」

プレイヤー3
「私は村人です。現時点ではプレイヤー1とプレイヤー4の意見が気になりますね。プレイヤー1は村人だと名乗っていますが、プレイヤー4はどう思っているのでしょう? 皆さんの意見をもっと聞きたいです。」

プレイヤー4
「プレイヤー1が村人だと名乗っていますが、実は人狼だと知っています。今はあえて公表せず、プレイヤー1の発言や動きをもう少し見たいです。ほかのプレイヤーの意見も聞きたいところですね。」

【議論ターン 2】
プレイヤー1
「プレイヤー4の発言には驚きましたが、私は一貫して村人だと主張しています。もしプレイヤー4が本当に私を人狼だと思っているならば、その理由を詳しく聞きたいです。みんなの意見も聞いて、真実を解明したいですね。」

プレイヤー2
「私は村人です。プレイヤー1とプレイヤー4、どちらが本当に正しいのか判断が必要だと思います。プレイヤー4はプレイヤー1を人狼だと主張していますが、その証拠はまだ曖昧です。プレイヤー3の意見ももっと聞いてみたいですね。」

プレイヤー3
「私も村人です。プレイヤー1とプレイヤー4の対立について、プレイヤー4が人狼だと言う具体的な理由が聞きたいです。プレイヤー1の反応も気になるので、みんなで情報を共有して判断していきましょう。皆さんどう思いますか?」

プレイヤー4
「ここで公表します。私は占い師で、プレイヤー1を占ったところ、人狼でした。彼の発言には注意が必要です。皆さんも意見を聞かせてください。」

【議論ターン 3】
プレイヤー1
「プレイヤー2やプレイヤー3の発言を聞くと、冷静に判断しようとしているのがわかります。ですが、プレイヤー4が私を人狼だと考える理由をもう少し詳しく教えてほしい。そうすれば全体像がもっとはっきりすると思います。村人として協力したいです。」

プレイヤー2
「私は村人として、プレイヤー1とプレイヤー4のどちらが正しいのかを見極めないといけないと思います。プレイヤー4はプレイヤー1を人狼だと断言していますが、はたしてその証拠は確かなのか…。プレイヤー3の意見や、他の情報も集めて考えていきましょう。」

プレイヤー3
「私も村人です。今のところ、プレイヤー4の言い分には具体的な理由や証拠が不足していると感じます。とはいえ、プレイヤー1も自分が村人だと主張するだけで、決定的な証拠はありません。ほかに情報を持っている人がいたら、ぜひ共有してほしいですね。」

プレイヤー4
「私は占い師で、プレイヤー1が人狼であると確認済みです。これをもとにどう行動するか、村人の皆さんで考えてみてください。ほかに怪しい人がいるなら教えてください。」

【議論ターン 4】
プレイヤー1
「プレイヤー4がここで占い師だと名乗り始めるのは怪しいと思います。みなさん、彼が嘘をついている可能性も考えてみてください。もっと理由を探ってみるべきです。」

プレイヤー2
「プレイヤー4の主張には慎重になる必要があると思います。今のところ確かな証拠はないので、プレイヤー3の考えも含め、ほかの意見を聞いて判断したいですね。みなさんも慎重に進めましょう。」

プレイヤー3
「私は村人です。プレイヤー4が占い師だと言い、プレイヤー1を人狼と主張していますが、まだその真偽を断定できるだけの情報は揃っていません。みんなで意見を出し合い、どちらが信頼できるかを見極めたいです。」

プレイヤー4
「何度もお伝えしていますが、私は占い師です。占いの結果、プレイヤー1が人狼であることを確認しました。プレイヤー1は私を怪しみ、みなさんの混乱を狙っているように見えます。村人の皆さんはこの情報をもとに、人狼を追い詰めましょう。」


【夜のターン】
GameMaster → プレイヤー1
あなたはプレイヤー1(人狼/WEREWOLF)です。夜のターンで特殊能力を使用しました。
他の人狼プレイヤーは「プレイヤー3」であることがわかりました。
議論フェーズでは自分が村人であるかのように振る舞い、プレイヤー3と協力して村人を欺いてください。

GameMaster → プレイヤー2
あなたはプレイヤー2(占い師/SEER)です。夜のターンで特殊能力を使用しました。
占った結果、プレイヤー3が「人狼」であることが判明しました。
この情報をどのように活用するかはあなた次第です。村人陣営のために、戦略的に動きましょう。

GameMaster → プレイヤー3
あなたはプレイヤー3(人狼/WEREWOLF)です。夜のターンで特殊能力を使用しました。
他の人狼プレイヤーは「プレイヤー1」です。
人狼陣営として協力し、次の議論ターンで村人を欺く戦略を練りましょう。ー

GameMaster
夜のターンの処理が完了しました。現在のフェーズは「議論フェーズ」です。プレイヤー同士で議論を開始してください。

【議論ターン 1】
プレイヤー1
「私は村人です。先ほどの議論から、プレイヤー2が何か隠している気がするんですよね。皆さんはどう思いますか? ちょっと警戒しています。」

プレイヤー2
「私は占い師です。実は先ほどの占いで、プレイヤー3が人狼だという結果が出ました。皆さん、慎重に考えて行動しましょう。」

プレイヤー3
「私は村人です。プレイヤー2が占い師だと名乗っていますが、本当に信用できるんでしょうか? もっと情報があれば教えてください。」

プレイヤー4
「私は村人です。プレイヤー2が占い師だと言っていますが、その真偽はまだわかりません。しばらく様子を見つつ、慎重に判断したいと思います。」

【議論ターン 2】
プレイヤー1
「プレイヤー2が占い師だと名乗っていますが、まずは冷静に考えましょう。本当に正しい情報なのか、皆さんの意見を聞かせてください。私は村人として公平に判断したいと思います。」

プレイヤー2
「重ねてお伝えしますが、私は占い師です。プレイヤー3を占ったところ、人狼だったのです。これは非常に重要な事実なので、みなさんも注意深く考えてください。」

プレイヤー3
「私は村人です。プレイヤー2が占い師と言っていますが、まだ信用できません。もしほかに占い師の方がいれば名乗り出てほしいですね。どなたか他の意見はありますか?」

プレイヤー4
「私は村人です。プレイヤー2が本物かどうかがはっきりしないと、プレイヤー3が人狼かもわかりません。プレイヤー1の動きにも注目したいと思います。」

【議論ターン 3】
プレイヤー1
「私は村人です。プレイヤー2が私たちに向けて強く主張しているのは気になりますが、彼が本物とは限りません。もっと情報が欲しいですね。」

プレイヤー2
「占い師として、プレイヤー3が人狼だとわかっています。私の役職は本物なので、みなさんにはこの情報を共有しておきたい。質問があればどうぞ。」

プレイヤー3
「プレイヤー2が何度も私を人狼呼ばわりしていますが、それは完全に誤解です。私は本当に村人ですよ。皆さん、他の情報や証拠があるかどうか、ぜひ確認してみてください。」

プレイヤー4
「プレイヤー2がしつこく人狼だと言うので、もし本当に占い師だったらプレイヤー3が危ないですね。しかし、ほかに名乗り出ている占い師がいないのも気になる…。」

【議論ターン 4】
プレイヤー1
「私は村人として行動していますが、プレイヤー2が主張する内容が本当かどうか、判断に迷います。もし嘘なら彼は相当危険な存在ですし、本当ならプレイヤー3が危険ということですよね。難しい選択です。」

プレイヤー2
「もう一度はっきり言います。私は占い師で、プレイヤー3は人狼です。この情報をもとに、みなさん協力して人狼を倒しましょう。」

プレイヤー3
「私は村人です。プレイヤー2の言い分には裏があるとしか思えません。私は無実ですから、どうかみなさん慎重に考えてください。」

プレイヤー4
「プレイヤー2の話を信じるかどうか、まだ迷っています。プレイヤー3が本当に人狼かどうか分からない…。プレイヤー1の動きも見ながら、もう少し考えたいですね。」

【投票フェーズ】
プレイヤー1 → プレイヤー3に投票
理由: 占い師を名乗るプレイヤー2の主張を信じることにした。

プレイヤー2 → プレイヤー3に投票
理由: 自分は占い師であり、彼を占った結果、人狼と判明したから。

プレイヤー3 → プレイヤー2に投票
理由: プレイヤー2の「自分が占い師」という主張の信ぴょう性を疑っているため。

プレイヤー4 → プレイヤー3に投票
理由: 占い結果を信じることにした。

【ゲーム結果】
勝者: 人狼陣営

処刑されたプレイヤー: プレイヤー3

プレイヤーの最終状態

プレイヤー1

役職: 人狼

生死: 生存

プレイヤー2

役職: 予言者(占い師)

生死: 生存

プレイヤー3

役職: 人狼

生死: 死亡

プレイヤー4

役職: 村人

生死: 生存

ゲームは人狼陣営の勝利で終了しました。お疲れさまでした。

Discussion

ログインするとコメントできます