[Minecraft] マイクラ x DeepSeekで建物を自動建築させてみる

Minecraft

ChatGPTによるマイクラ自動建築はこちらの記事にまとめています。
本記事はDeepSeekを使ったマイクラ自動建築を実現する内容をまとめました。
基本的にはAIエンジンをDeepSeekに変えるだけで実現することができます。

本記事では具体的な実現方法から実際動かしてみた結果までを解説していきます。

Python実行環境準備

マイクラ上でPythonスクリプトを実行できる環境を用意します。
環境準備についてはこちらの記事を確認してください。
できるだけ詳しく書いています。

DeepSeek API実行環境準備

PythonからDeepSeek APIを利用するため準備を行います。
環境準備についてはこちらの記事を確認してください。
こちらもできるだけ詳しく書いています。

Pythonスクリプト作成

ここでは「my_deepseek.py」としてファイルを作成します。
場所は%appdata%\.minecraft\minescriptフォルダに保存します。

スクリプト全体

今回のソースコードは以下です。
まずはこちらをmy_deepseek.pyに貼り付けて保存します。
api_key="XXXXXXXX"部分は、DeepSeek APIで取得したAPI KEYに書き換えてください。
見てもらえばわかるように、ChatGPTを使用したときのコードとほぼ同じです。

import minescript
import sys
from openai import OpenAI

if __name__ == "__main__":
    user_content = sys.argv[1]
    (px, py, pz) = minescript.player_position()
    blockpacker = minescript.BlockPacker()

    client = OpenAI(api_key="XXXXXXXXXX", base_url="https://api.deepseek.com")
    response = client.chat.completions.create(
        model="deepseek-chat",
        messages=[
            {"role":"system", "content":"あなたは優秀なマインクラフターです。"},
            {"role":"system", "content":"あなたのプレイヤーは、x座標:%d、y座標:%d、z座標:%d の場所にいます。" % (int(px), int(py), int(pz))},
            {"role":"system", "content":"回答はPython言語で、配置ブロックの(x座標(整数),y座標(整数),z座標(整数),ブロックID(文字列))のタプルの集合を返すchatgpt_work()関数のみを定義してください。"},
            {"role":"system", "content":"回答はできるかぎりfor文やwhile文などを使って効率化してください。"},
            {"role":"system", "content":"回答文にはコメント文を含めないでください。"},
            {"role":"system", "content":"ブロックIDは質問に対して最適なマインクラフト上のブロックID(oak_logなど)を返してください。"},
            {"role":"user",   "content":user_content}
        ]
    )
    r = response.choices[0].message.content
    myf = r.replace("```python\n", "").replace("```", "")
    minescript.echo(myf)
    exec(myf)

    blockpacker = minescript.BlockPacker()
    for d in chatgpt_work():
        if d[3] == "oak_plank":
            blockpacker.setblock((int(d[0]), int(d[1]), int(d[2])), "oak_planks")
        elif d[3] == "door":
            blockpacker.setblock((int(d[0]), int(d[1]), int(d[2])), "oak_door")
        elif d[3] == "leaves" or d[3] == "leaf":
            blockpacker.setblock((int(d[0]), int(d[1]), int(d[2])), "oak_leaves")
        else:
            blockpacker.setblock((int(d[0]), int(d[1]), int(d[2])), d[3])
    blockpacker.pack().write_world()

スクリプト解説

スクリプト解説はこちらの記事を参照してみてください。
ほぼChatGPT時のコードと変わっていません。

DeepSeekを使って建築してみる

実際にマイクラのワールド上で建築してみます。
実行方法は「my_deepseek」の後に、どのような建築物を作りたいかを入力します。
例えば、以下のように入力します。

\my_deepseek ログハウスを作って。屋根、玄関、窓、明かりなども配置してね。

現在のプログラム上、半角スペースが含まれてしまうと切れてしまうので繋げて入力します。
(もちろんプログラムを変更することで対応可能です)

結果はどうでしょうか?
何度か実行してみましたが、ChatGPTの方が若干よさそうな建物ができている気がします。

りお
りお

ChatGPTと比較すると結果が返ってくるまでに時間が掛かる印象です。
もう少しプロンプトを考える必要はありそうですね。

まとめ

ChatGPTに引き続きDeepSeekでマイクラ自動建築を試してみました。
若干ChatGPTの方がクオリティは高そうですが、このような単純なプロンプトでは限界があるのかもしれません。
引き続きこのあたりは改善していきたいと思います。

コメント

タイトルとURLをコピーしました