【Dockerでワンパン】PokéLLMonを動かしてみる

PokéLLMonは、ポケモンバトルのゲームにおいて、人間並みのパフォーマンスを実現する最初のLLM（Large Language Model）を体現したエージェントです。この記事では、PokéLLMonを実際に動かすための手順を初心者向けに解説します。Dockerを使用して環境を構築し、ローカルでヒューリスティックボットと対戦する方法までを説明します。


---

こちらの記事もおすすめ

https://hamaruki.com/japanese-translation-pokellmon-human-equivalent-agent-for-pokemon-battles-using-large-scale-language-models/

https://hamaruki.com/japanese-version-of-the-wiki-of-ai-agents-virtual-software-development-company-chatdev/




## 環境構築 

まずは、PokéLLMonを動かすための環境を構築することから始めます。Dockerを活用することで、環境依存を最小限に抑えることができます。


### Dockerイメージの構築 

以下の`Dockerfile`を使用して、必要な環境を構築します。PythonとNode.jsがプリインストールされたイメージをベースにして、PokéLLMonの動作に必要なパッケージをインストールします。

```dockerfile
# Python 3.11とNode.js 21を含むイメージをベースに使用
FROM nikolaik/python-nodejs:python3.11-nodejs21

# 必要なツールをインストール
RUN apt-get update && apt-get install -y git curl

# アプリケーションディレクトリを作成
WORKDIR /usr/src/app

# pokemon-showdownリポジトリをクローンし、必要な依存関係をインストール
RUN git clone https://github.com/smogon/pokemon-showdown.git 
WORKDIR /usr/src/app/pokemon-showdown
RUN npm install
RUN cp config/config-example.js config/config.js

# PokéLLMon環境の依存関係をインストール
COPY requirements.txt .
RUN pip install -r requirements.txt

# アプリケーションがリッスンするポートを指定
EXPOSE 8000
# アプリケーションを起動するコマンド
CMD [ "node", "pokemon-showdown", "start", "--no-security" ]
```


### Docker Composeを使用したサービスの起動 

次に、`docker-compose.yml`ファイルを使用して、サービスを定義します。このファイルを通じて、ポートの設定や環境変数の指定を行います。

```yaml
version: '3'

services:
  pokemon-showdown:
    build:
      context: .
      dockerfile: Dockerfile
    ports:
      - "8000:8000"
    volumes:
      - .:/usr/src/app/PokeLLMon
    tty: true
    env_file:
      - .env
```

### OpenAI APIの設定

GPT-4 APIを [https://platform.openai.com/account/api-keys](https://platform.openai.com/account/api-keys)  から取得します。

### プレイヤーの設定

[https://play.pokemonshowdown.com/](https://play.pokemonshowdown.com/)  でアカウントに登録し、パスワードを取得します。

アカウント登録方法はこちら&#x1f447;

https://aoi428.hatenablog.com/entry/2017/04/25/055853


### 環境変数の設定 

`.env`ファイルには、PokéLLMonを動かすために必要な環境変数を設定します。

```env
USERNAME=XXXX
PASSWORD=YYYY
OPENAI_API_KEY=sk-ZZZZ
```


これらの環境変数は、PokéLLMonを実行する際に、ユーザー認証やOpenAIのAPIを使用するために必要です。

## PokéLLMonの起動と対戦 

環境構築が完了したら、PokéLLMonを起動し、ポケモンバトルを楽しむことができます。

### コンテナの起動 

以下のコマンドを実行して、Dockerコンテナをビルドし、起動します。

```bash
docker-compose up --build
```


### コンテナ内での操作 

コンテナが起動したら、以下のコマンドでコンテナ内に移動します。

```bash
docker-compose exec pokemon-showdown /bin/bash
```

`PokeLLMon`のフォルダに移動します

```bash
root@0efdf8c76f75:/usr/src/app/pokemon-showdown# cd ../PokeLLMon/
root@0efdf8c76f75:/usr/src/app/PokeLLMon#
```

### ヒューリスティックボットとの対戦 

最後に、以下のコマンドを実行して、ローカルでヒューリスティックボットと対戦します。この時、あなたのユーザー名とパスワードを入力する必要があります。

```sh
python vs_bot.py
```


## バトルの可視化

下記の場所にHTMLがあるので、それを開きましょう。
`PokeLLMon\battle_log\pokellmon_vs_ladder_player\win`

![file](https://hamaruki.com/wp-content/uploads/2024/02/image-1707231632847.png)


## バトル動画

<iframe width="560" height="315" src="https://www.youtube.com/embed/kwN2aTfrWoo?si=u7KFmVYXsJdBES2W" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>

## まとめ

これで、PokéLLMonを使用してポケモンバトルを楽しむ準備が整いました。
ポケモンバトルで勝利を目指して、頑張ってください！

## Docker調整済みリポジトリ

https://github.com/Sunwood-ai-labs/PokeLLMon