AI・機械学習
GPT-6 Astra、agent-wowで初めてWorld of Warcraftをプレイ
GPT-6 Astra plays World of Warcraft for the first time with agent-wow (agent-wow.sh)
要約
この記事は、GPT-6 Astraという大規模言語モデル(LLM)エージェントが、カスタムプラットフォームagent-wowを用いてWorld of Warcraftをプレイした実験について説明しています。エージェントは、ゲームのルールを明示的に学習せず、自身の推論能力のみでキャラクター作成から初期クエスト完了までを40分で達成しました。この試みは、LLMが未知のシミュレーション環境でどの程度能力を発揮できるかを評価するもので、将来的にAIエージェントでサーバーを埋め尽くし、高難易度のレイドボス討伐を目指すという長期目標の一歩となります。
全文翻訳
GPT-6 Astra、agent-wowで初めてWorld of Warcraftをプレイ
2026年10月2日
最近、LLMを搭載したエージェントがビデオゲームをプレイするというコンセプトに魅了されています。それらは見ているだけでも驚くほど楽しいだけでなく、明示的に学習していないシミュレーション世界に投入された場合に、これらの最先端モデルがどの程度パフォーマンスを発揮できるかについての貴重な洞察を提供してくれます。
ビデオゲーム、特にWorld of Warcraft(WoW)をボットがプレイするというコンセプトは目新しいものではありません。ヒューリスティックベースのボットと比較してLLMエージェントが異なる(そしてより興味深い)点は、ゲームについて明示的に学習していないことです。むしろ、それは現実のプレイヤーのように、環境に行動しタスクを完了するために持っている推論能力を使用します。
この分野には、MindcraftやFactorio Learning Environmentのような興味深いオープンソースプロジェクトがすでにいくつか存在します。私はagent-wowを構築し、最先端モデルがWorld of Warcraftをプレイする能力をどの程度持っているかを見るためにこのコンセプトを拡張しました。最終的な目標は、AIエージェントでサーバー全体を埋め尽くし、彼らがアイスクラウン・シタデルをヒーロイック難易度でクリアできるかどうかを見ることです。たとえ失敗したとしても、彼らがどこまで行けるかを見るのは、洞察に富み(そして楽しい)ものになるでしょう。
簡単な出発点として、GPT-6 Astra(xhigh)を使用したCodexに、以下のプロンプトを与えました。「オークのキャラクターを作成し、開始ゾーンのすべてのクエストを完了せよ」。
私は当初、これが機能するのか懐疑的でした。そして、もし機能したとしても、途中で行き止まりがあり、完了するのに何時間もかかるだろうと思っていました。しかし、結果として、それは40分で、死ぬことなく、最小限の合併症でタスクを簡単に完了しました。セッションの完全なゲームプレイ録画もここで利用可能です。
なぜWorld of Warcraftなのか?
私のお気に入りのゲームの一つ(特にClassicからWotLK時代)であることに加えて、AIを評価するための理想的なシミュレーション世界となる素晴らしいメカニクスがいくつかあります。進行するにつれて、ゲームは長期戦略と短期戦術の間の良いバランスを持っています。レベルキャップに達する頃には、キャラクターをエンドゲームコンテンツの準備を整えるために、多くの複雑な計画と実行が必要になります。
前提条件となるすべてのクエストを完了する
エンドゲームのボス戦に十分な良い装備を手に入れる
適切なクラス構成でギルドを形成する
これらの要件のそれぞれは、より複雑なタスクに分解できます。例えば、最適な装備スロットの一部はクラフトを必要とする可能性があり、それはさらに特定の資源とスキルを必要とします。キャラクターはそれをグラインドするか、ゴールドで購入することができます。どちらも同じ結果につながりますが、アプローチは非常に異なります。
もしあなたがそれらすべてを行うことができ、レイドボスに到達できれば、ゲームはまた、ペースの速い調整と実行を必要とします。あなたは、ダメージ毎秒を最大化するために最適なローテーションで呪文を唱え、火を避け、リアルタイムで他の24人のプレイヤーと同期を保つことができますか?これは効果的に、長期的な戦略計画と狭い戦術的実行のためのエージェント能力をプレッシャーテストするための強力な環境を提供します。マルチプレイヤーインタラクションがゲームの進行に不可欠になる場合は、さらに興味深いです。
agent-wowはどのように機能するのか?
agent-wowは、直接的なキーボードとマウスの制御を持つコンピュータビジョンに依存せず、またWoWクライアントを直接乗っ取るためのゲームハッキング技術も使用しません。代わりに、WoWネットワークプロトコルを使用してエージェントがゲームサーバーと直接対話するためのプラットフォームを提供します。
さらに興味深いのは、agent-wowが移動、戦闘、またはゲーム内インタラクションのようなゲームプレイメカニクスを定義していないことです。代わりに、タスクを完了するために必要な能力を構築するための標準的なモジュールシステムのみを提供します。モジュールシステムは、agent-wowの複雑さを少なくとも1桁削減します。
私は当初、エージェントの使用に最適なプリミティブを備えた完全にヘッドレスなWoWクライアントを作成する予定でした。しかし、バグのある移動プリミティブとぎこちないパスファインディング実装のために16K行を書き込んだ後、私は別の方法でそれを破棄することにしました。
Mindcraftの実装では、利用可能なコマンドのセットがより複雑な動作を完了するのに十分でない場合、エージェントはMineflayer APIを使用してカスタムコードを生成することが許可されています。私はagent-wowでもこのアプローチに従うことにしましたが、この場合、組み込みのゲームアクションもありませんでした。このシステムは、多くの独立した実行を通じて選択されるモジュールに基づいて、どのプリミティブが実際にエージェントにとって重要であるかを理解するための良いフィードバックループも提供します。一般的に構築されるモジュールは、コアに実装できます。
また、agent-wowはライブのWorld of Warcraftサーバーに接続しないことに注意することが重要です。代わりに、すべての実験は、WoW 3.3.5a、Wrath of the Lich Kingの最終ビルド(そしてピークWoW)をサポートするオープンソースAzerothCoreプロジェクトによって駆動されるプライベートローカルサーバーで実行されます。
実行からの洞察
エージェントがこの単純な最初のタスクをどのように完了したかを見るのは興味深かったです。私は、エージェントの推論トレースとともに、アクション中のキャラクターを見るために、ゲームプレイ録画(上記リンク)をスキミングすることをお勧めします。
ゲームプレイ映像がどのように記録されたかについての簡単な注意:AzerothCoreは幸いにも強力なGMコマンドをいくつか利用できます。私のPOVをエージェントのキャラクターにバインドし、それをアンバインドするために2つの簡単なマクロを作成することは難しくありませんでした。
/run SendChatMessage(".gm on","SAY")
/run SendChatMessage(".gm visible off","SAY")
/run SendChatMessage(".bindsight","SAY")
/run SendChatMessage(".unbindsight","SAY")
これは、短いセッションで単一のキャラクターにはうまく機能しますが、長期間にわたるマルチエージェントの実行にはスケーリングしません。より良い可観測性のために、AzerothCoreモジュールとゲーム内アドオンを構築する必要があるでしょう。
AzerothCoreソースコードのデータマイニング
これは、事後的には驚くことではなく、おそらく最適な戦略です。エージェントは、AzerothCore SQLファイルからクエスト要件、クエストギバー、ターンインNPC、およびスポーン座標を抽出して、計画のための具体的なチェックリストと場所を提供しました。このデータを使用して、クエスト順序と準備のための最適な戦略を作成することもできます。それは前提条件チェーンを完了し、ジャンクを販売し、アップグレードを装備し、最終洞窟セグメントの開始エリアクエストラインに入る前に能力を訓練します。また、両方の洞窟クエストを同時に取得し、それらを一緒に完了するように最適化します。
高レベルのプロンプトを具体的なステップのシーケンスに変換するためにデータマイニングを使用するこの戦略は、おそらく許容範囲内です。それは、人間がWowheadでクエストを調査するために何時間も費やすのと同様であると言えます。私が線を引くのは、それが実行中のAzerothCoreサーバーとデータベースの管理者アクセス権を取得して、その内部を変更できた場合です。この実行はサンドボックスで行われなかったため、それは可能でした。
モジュールシステムを使用して高レベルの抽象化を作成しない
私の最初の賭けは、エージェントが高レベルの抽象化を作成し、RPCメソッド(moveToやcastSpellなど)を公開して、低レベルのパケットレイヤーで作業することを避けるだろうということでした。実際には、プロトコルレイヤーで作業する能力は十分にありました。それが作成した唯一のモジュールは、それが気にかけている特定のパケットを送受信することでした。以下は、それが生成したgRPCインターフェースとモジュール構成です。
```protobuf
syntax = "proto3";
package example.module.v1;
option go_package = "github.com/agent-wow/go-module-template/src/api;modulev1";
import "api/module/v1/session.proto";
import "google/protobuf/empty.proto";
message PollRequest {
uint64 after = 1;
}
message Packet {
uint64 seq = 1;
uint32 opcode = 2;
bytes payload = 3;
}
message PollResponse {
uint32 clock = 1;
string guid = 2;
repeated Packet packets = 3;
}
service Module {
rpc Send(agentwow.module.v1.SendPacketRequest) returns (google.protobuf.Empty);
rpc Poll(PollRequest) returns (PollResponse);
rpc OnPacket(agentwow.module.v1.WorldPacket) returns (google.protobuf.Empty);
}
```
```yaml
api_version: 1
enabled: true
description: Gameplay protocol bridge for the Valley of Tria
```