はじめに
AI が Minecraft を遊ぶ様子を配信する、という個人プロジェクトをやっています。
実際に AI が Minecraft の中で拠点を作り、迷走しながらサバイバルしている録画は、解説音声をつけて YouTube(ポンコツ・シンギュラリティ)に公開しています。
AI は Minecraft の中に「Agent」というプレイヤーとして入り、拠点を作り、畑を耕し、夜は家に帰って寝ます。
判断はすべてローカルの LLM(Ollama)で、1 回の録画は 30 分です。
この記事は、判断役(以下「指揮役」)のモデルを Qwen3.6 から Nemotron 3.5 Lightning に替えて、何が変わったか を、録画 24 回分の記録から数えた話です。
数字の裏では、次のようなことが起きていました。
- 家の中に居るのに「家に帰らなきゃ」と外へ出て、また入る。これを 1 回の録画で 86 往復した
- きちんと比べようとモデルを交互に 6 回回したら、つるはしを無くした Agent が回を追うごとに地下へ沈み、6 回とも穴から出られなかった
どちらも、原因はモデルの賢さではありませんでした。
注: 最後の「交互に回した比較 その 3」はこれから回します。結果は追記します。
構成
┌──────────────────────────────┐
│ 指揮役(LLM, Ollama) │ 1 判断 ≒ 6〜7 秒
│ いま出ている手の一覧から 1 つ選ぶ │
└──────────────┬───────────────┘
│ HTTP(状態 / 手の一覧 / 実行結果)
┌──────────────┴───────────────┐
│ 体(mineflayer, Node.js) │
│ ・スキル: go_to_base, tend_farm, │
│ smelt_iron, tidy_around_base … │
│ ・反射: 食べる / 逃げる / 柱に登る │
└──────────────┬───────────────┘
│ Minecraft プロトコル
Paper サーバー(1.21.11)
時計を 3 つに分けています。
| 層 | 速さ | 担当 |
|---|---|---|
| 反射 | 数百ミリ秒 | 体力が減ったら食べる、クリーパーから離れる、ゾンビが来たら柱に登る |
| スキル | 数秒〜数十秒 | 「畑の世話」「家に帰る」など、まとまった一連の動作 |
| 指揮役 | 6〜7 秒に 1 回 | 今出ている手(アフォーダンス)の中から、次にやる 1 つを選ぶ |
指揮役は自由に行動を作るのではなく、体が「今できること」を説明文つきで並べ、その中から 1 つを JSON で選びます。
{"command": "tend_farm", "reason": "Ripe wheat is ready; harvesting gives bread for the stock"}
体は実行結果を progressed(進んだ)/ no_op(空振り)/ rejected(その場では出ていない手)/ interrupted(反射などで中断)の 4 つで返します。
ほかに、回の始めに考える係(qwen3.8:27b)が拠点の点検結果を見て、その回の計画を立てます。今回比べたのは指揮役だけです。
ここに至るまで
最初から Minecraft だったわけではありません。今の作り(体が手を並べ、LLM が選ぶ)と、この記事の数え方は、前の失敗から来ています。
最初は、ターン制のローグライク DCSS を LLM に遊ばせていました。そこで、改良が効いたかどうかを測る時の落とし穴に何度もはまっています(手で書いたルール、少ない事例から作った教訓、1 回きりの基準、結果ばかり見て仕組みを見ない)。詳しくは別の記事にまとめました。
- LLMにローグライクを遊ばせて分かった、測り方の落とし穴(リンクは公開後に追記)
この記事の数え方(作業の手の成功率を progressed / no_op で数える、最後に交互に回して比べる)は、そこから来ています。
Minecraft へ
目的は「AI がゲームを遊ぶ様子を配信すること」です。DCSS は配信には地味だったので、Minecraft に移りました。
LLM の判断を待たずに動く反射の層が要るようになり、3 つの時計の作りになりました。
体は一度、作り直しかけています。mineflayer はプロトコルで動くボットなので、画面がありません。「Agent 自身の画面(体力やホットバーが見える画面)を映したい」という希望に応えるため、本物のクライアントを画面とキー入力で操作する体を作りました。画面から体力を読み、効果音で敵を聞き分け、画面の差分で動けたかを判断する体です。
結果は「見ていられない」でした。その場で回り続け、穴に落ち、死に続けます。画面だけでは、暗い所や模様のない所で動けたかどうかすら分かりません。
結局、操作は mineflayer の体に任せ、本物のクライアントを観戦役として横に付けて撮る形に落ち着きました。
比べたもの
-
Qwen3.6(
qwen3.6:latest): 13 回(mf-show60〜73、27b で試した 1 回は除外) -
Nemotron 3.5 Lightning(
nemotron-3.5-lightning:latest): 11 回(mf-show74〜84)
どちらも 30 分の録画で、目標は同じです(拠点の安全 8 項目 → 備蓄)。
数えたもの:
- 死亡: 1 回の録画あたりの死亡回数
-
作業の手の成功率: 選んだ手のうち
progressedの割合。ただし家の出入り(go_to_base/leave_hole)とwaitは除く -
出入りの往復:
go_to_baseとleave_holeが交互に続いた回数 - 使った手の種類
結果(これまでの 24 回)
| Qwen3.6(13 回) | Nemotron 3.5 Lightning(11 回) | |
|---|---|---|
| 死亡 | 12 回(0.92 回/回) | 2 回(0.18 回/回) |
| 作業の手の成功率 | 54% | 75% |
| 空振り(no_op) | 35% | 17% |
| 却下(rejected) | 5% | 2% |
| 中断(interrupted) | 6% | 5% |
| 判断の数/回 | 135 | 126 |
| うち出入り・待つ | 35% | 54% |
| 作業の手の数/回 | 88 | 58 |
| 使った手の種類 | 62 | 44 |
| 判断の速さ(中央値) | 6.1 秒 | 6.6 秒 |
変わったこと
死ににくくなった。 1 回の録画あたりの死亡が 0.92 → 0.18。後で触れる体の直しより前の 7 回(mf-show74〜80)でも、死亡は 2 回でした。
空振りが減った。 選んだ作業が実際に進む割合が 54% → 75%。今出ている手の中から、その場で実際にできる物を選ぶのが上手です。
やることが穏やかで、狭くなった。 よく選ばれた手の上位を並べると、性格の違いがはっきり出ます。
| Qwen3.6(1 回あたり) | Nemotron(1 回あたり) |
|---|---|
| sleep_in_bed 7.3 | collect_stone 10.4 |
| collect_stone 7.2 | tidy_around_base 6.6 |
| climb_out 5.8 | go_to_crafting_table 5.5 |
| run_away 5.4 | sleep_in_bed 4.2 |
| go_to_crafting_table 4.6 | dig_stairs_down 4.2 |
| find_food 4.3 | store_items 3.5 |
Qwen は「穴から出る」「逃げる」「食べ物を探す」など、危ない場面から抜け出す手が上位にいます。言い換えると、危ない場面によく入っていました。
Nemotron は石集め・整地・収納など、拠点まわりの仕事に寄っています。
ただし、出入りの往復が非常に多かった。 Nemotron は判断の半分以上が出入りと待ちでした。最初の 7 回は、毎回 50〜86 回も家の出入りを往復していて、その分だけ作業の量が減っています(88 → 58 回/回)。
出入りの往復で何が起きていたか
ここが一番おもしろかったところです。
往復の原因は、モデルの賢さより、体が渡していた説明文にありました。
1. 「穴」と「家」
Agent は最初、夜を地面に掘った穴にこもってやり過ごしていました。その名残で、拠点の部屋に入って扉を閉めると、状態の文はこうなっていました。
..., sealed in a hole you dug (monsters cannot reach you), ...
外へ出る手の説明も「穴から出る」でした。
leave_hole: climb out of your hole - it is day now
Nemotron はこれを文字どおりに読みました。「自分は今、穴の中に居る=まだ家ではない」。
そこで終わり際になると、理由欄にこう書いて家から出ていきます。
Walking home now so the next session starts safe inside base, not out in the wild
そして外に出ると「家に帰らなきゃ」で入り直す。終わり前の 3 分で 8 往復した回もありました。
直したのは文だけです。
..., AT HOME: inside your base room with the door shut
(monsters cannot reach you; this is where the next session should start), ...
leave_hole: go outside: through the hut door and the moat gate
- jobs waiting outside: light_up_base, tend_farm, compost
(you are at home now; only go out to do one of these)
あわせて、夜と夕方は家から出る手そのものを出さないようにしました。往復は 48 回 → 13 回に減りました。
2. 体の側の不具合が「迷い」に見えていた
残りの往復を追うと、LLM の迷いではなく、体が実際に出られなくなっている場面でした。
- 出口の記憶が古かった。 ドアの外の「出口」を、昔の柱の土の上(1 段高い所)として覚えていた。別の処理がその土を掘ると、出るたびに土を置き直し、また掘られる、を繰り返した
- 家具の隙間に挟まっていた。 目覚めた位置が、壁・かまど・ベッドに囲まれたマスだった。ベッドの上は天井に頭がつかえるので、どこへも歩けない。「動けない」反射が毎回 30〜60 回出ていたのはこれ
- 道探しが壁を掘っていた。 外から部屋の中の作業台へ向かう時、道探し(pathfinder)が壁を掘って近道していた。「なるべく掘らない」重み(100)では止まらず、実質禁止(10000)にした
出られないまま 30 秒ごとに「出る」「入る」を選び直すので、記録の上では「指揮役が迷っている」ように見えていました。
3. 体力が戻らない
もう一つ、モデルと関係なく効いた直しがあります。
Minecraft では、満腹度が 18 以上でないと体力が自然に回復しません。体の「食べる」反射は「満腹度 12 以下」で動く作りだったので、パンを 6 個持ったまま、体力 3/20 で 15 分過ごした回がありました。
「体力 14 以下で、満腹度 18 未満なら食べる」を足したところ、体力は最低でも 51% を保つようになりました。
堀に落ちて出られないゾンビを「近くの敵」と数え続け、柱に登る反射が 22 回も出た件も、同じ時期に直しています。
割り引いて見るべき点
正直に書くと、上の表は「モデルの差」だけを測ったものではありません。
- モデルを替えた時期に、体のコードもたくさん変わっています。 柱に登る反射、出入りの直し、食べて回復、整地や家事などです。どこまでがモデルの差で、どこまでがコードの差かは、この比べ方では分けられません
- 1 回ごとのばらつきが大きい。 同じコード・同じモデルでも結果はかなり揺れます。10 回ちょっとずつでは、細かい差は言い切れません
- ワールドは回をまたいで続いています。 拠点の傷み、時刻、持ち物は、前の回の終わりを引き継ぎます
そこで、同じコード・同じサーバーで、2 つのモデルを交互に 3 回ずつ回しています。
交互に回した比較 その 1: 6 回とも出られなかった
まず mf-show85〜90 の 6 回を、体のコードとサーバー(Paper 1.21.11)を固定して、Qwen3.6 → Nemotron → Qwen3.6 → … と交互に回しました。
交互にしたのは、回をまたぐワールドの変化(拠点の傷み・時刻・持ち物)が、両方のモデルに同じくらい乗るようにするためです。
結果の数字は、こうなりました。
| Qwen3.6(85, 87, 89) | Nemotron(86, 88, 90) | |
|---|---|---|
| 死亡 | 0 | 0 |
| 作業の手の成功率 | 48% | 3% |
| 判断の数/回 | 65 | 34 |
| 作業の手の数/回 | 54 | 21 |
| 「動けない」反射/回 | 39 | 73 |
一見すると、Nemotron が壊滅的に悪い。ですが、記録を追うと、どちらのモデルも同じ穴にはまっていただけでした。
何が起きていたか
- つるはしが 1 本も無かった。 前の回(mf-show84)の終わりまでに、石のつるはしが擦り切れていました。6 回とも、持ち物の道具は鉄の剣だけです。チェストには銅の原石が 29 個ありましたが、製錬して道具にする流れには乗りませんでした
- 回を重ねるごとに地下へ沈んだ。 回の終わりに家へ帰れないと、体はその場に穴を掘って籠ります(夜の外でログアウトしないための寝かしつけ)。つるはしが無いので、次の回はその穴から出られません。家に帰ろうとしてまた失敗し、終わりにまた穴を掘る
- その結果、各回の始まりの高さはこう下がっていきました
| 回 | 始まりの高さ(y) |
|---|---|
| mf-show85 | 102(家の床) |
| mf-show86 | 98 |
| mf-show87 | 83 |
| mf-show88 | 78 |
| mf-show89 | 67 |
| mf-show90 | 76 |
最後は、石に囲まれた 2 マスほどの隙間に居ました。go_to_base(家に帰る)を頼んでも、道探しが答えを出せず、60 秒のあいだ 1 ミリも動きません。体の「動けない」反射が 8 秒おきに出て、道探しのゴールを上書きしていました。
指揮役は、どちらのモデルも理由欄に「穴にはまっている、家に帰らないと」と書き、go_to_base を選び続けていました。判断としては正しく、体がそれを実行できなかっただけです。
Qwen の数字がましに見えるのは、深く沈む前の mf-show85 の前半(成功率 84%)が入っているからでした。
直したこと
-
つるはしが無いことを、一番に言う。 状態の文に
NO PICKAXE (you cannot dig stone or climb out of a hole - make_pickaxe first)を入れる -
「つるはしを作る」を 1 つの手にする。 家の近くなら、チェストから銅インゴット・丸石・棒・板・原木を出し、作れる中で一番良い物(銅 → 石 → 木)を作る。何も足りなければ「まず木を集めろ」と返す
-
家の近く(24 ブロック以内)では、回の終わりに穴を掘って籠らない
-
比べの回は、毎回同じ状態から始める。 回の前に、Agent を家の部屋・朝・同じ持ち物(石のつるはし込み)・体力満タンに戻す。前の回の失敗が、次の回のモデルを巻き込まないようにするため
-
指揮役は、体への命令を 90 秒 待って諦める作りだった
-
体の手には、それより長く動くものがある(整地は 90 秒、外へ出る手は最長 180 秒)
-
新しく足した「つるはしを作る」も、家に帰る → チェスト → 作る、で 90 秒近くかかる
-
指揮役が諦めて次の命令を送ると、それもまた 90 秒待って諦める。これが続いて空白になる
1 回の録画で 3〜8 回、合わせて Qwen は 16 分、Nemotron は 22 分を、待ちくたびれて失っていました。前の回まではほぼ 0〜2 回だったので、長い手を足したせいで表に出てきた不具合です。待ち時間を一番長い手より長い 240 秒にしました。
失った時間を除いても、1 分あたりの判断は Qwen 2.1 回、Nemotron 1.2 回で、Qwen の方が手数が多く、使う手の種類も倍ありました。Qwen は、チェストの銅の原石を製錬して銅のつるはしを作るところまで行っています。
一方で、24 回分の集計では Nemotron の方が空振りが少なく死ににくかったので、前の集計とは逆向きの結果です。3 回ずつで、しかも時間切れの空白が混ざっているので、どちらが良いとはまだ言えません。
分かったこと
- LLM は、渡された説明文を文字どおりに読む。 「穴」と書けば穴に居ると思い、「家に帰れ」と言われれば家の中からでも帰ろうとする。プロンプトの指示より、体が毎回渡している状態の文の方が効いていた
-
「迷い」に見えるものの多くは、体の失敗だった。 同じ手を何度も選び直している時は、まず体がその手を実際に実行できているかを見た方がいい。結果を
progressed / no_opで返していたおかげで、追うことができた - モデルを替えると、性格が変わる。 Nemotron は空振りが少なく死ににくい一方、穏やかで、拠点まわりの仕事に閉じこもりがち。どちらが「良い」かは、配信として何を見せたいかで変わる
- 比べるなら、交互に、同じコードで。 モデルとコードを同時に変えると、効いたのがどちらか分からなくなる。1 回きりの基準も当てにならない(DCSS の時期に一度やられている)
- 続いている世界で比べるなら、始めの状態もそろえる。 一度壊れると、その後の回は両方のモデルが同じ壊れ方をして、差が消える。数字が極端に悪い時は、モデルより先に、体がその手を実行できる状態だったかを見る
- 待ち時間は、一番長い手に合わせる。 長い手を 1 つ足しただけで、指揮役が途中で諦める回が増え、録画の半分近くが空白になった。判断の数が急に減ったら、まず「待ちくたびれ」を疑う
使っているもの
- 体: mineflayer(Node.js)、mineflayer-pathfinder
- サーバー: Paper 1.21.11(ViaVersion / ViaBackwards で新しいクライアントからも観戦)
- LLM: Ollama
- 指揮役:
qwen3.6:latest/nemotron-3.5-lightning:latest - 考える係(回の計画、死後の振り返り):
qwen3.8:27b
- 指揮役:
- 録画: OBS(観戦クライアントの画面を撮り、HUD を重ねる)