汎用エージェント試してみた

# 初めに

今回は弊社AIQVE ONE社が出しているPlayable!の汎用エージェントを試してみた感想を書いていきたいと思います。
今回は公式に配布されているAlfortの試験用データを用いて行いました。

https://docs.playable.qa/general-agent





# 汎用エージェントを触ってみる

### 各ウィンドウの説明

<details><summary>ウィンドウ全体</summary>

- Playable General Agent（汎用エージェント）の実行時の全ウィンドウです。
※この他に汎用エージェントの実行コマンドを入力したターミナルも表示されている状態です。

![Playable_GeneralAgent_WholeWindow.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3534572/76fbbcc4-e32a-722f-1375-50d8a444861d.png)

</details>

<details><summary>メインウィンドウ（ゲーム画面）</summary>

- 実際に動くゲーム画面が表示されます。

![Playable_GeneralAgent_GameWindow.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3534572/05c008de-42ce-400a-5c39-9d9109958b77.png)

</details>

<details><summary>チャットボットウィンドウ</summary>

- ここで命令文を入力した内容がLLMに解釈されタスクとして発行されます。
LLMで解釈できなかった場合も一部定型文が返答として返されます。

<img width="400" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3534572/5f9afa5c-0ab9-892e-c7ee-ca22508caab1.png">

</details>

<details><summary>タスクウィンドウ</summary>

- 現在実行中のタスクと実行待ちのタスクがFIFO表示されます

![Playable_GeneralAgent_TaskWindow.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3534572/7e33fd2e-b230-548a-adfb-78ee157dbc9d.png)

</details>

<details><summary>マップウィンドウ</summary>

- マップを表示するウィンドウであるとともに
**プレイヤーの位置、敵の位置、マップの切り替え箇所、Astarを使用した経路探索時の予定経路の表示等**が行われます。

![Playable_GeneralAgent_GameMapWindow.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3534572/0111b450-7df7-17fe-2d97-4906fb5ef1ad.png)

</details>

<details><summary>ビヘイビアツリーウィンドウ</summary>

- 現在のタスクを実行中のビヘイビアツリーが表示されます。
リアルタイムでビヘイビアツリー内での実行状態が表示されます。

![Playable_GeneralAgent_BehaviorTreeWindow.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3534572/b40210d3-2066-7c8f-1798-d609b577e1be.png)

</details>





使ってみる
---
やはり固有名称(ランドマーク)への移動は安定して動作してくれそうです。

試しにランドマークである霊廟まで移動するように「**霊廟に移動してみて**」と入力してみたところ霊廟まで移動することに成功しています。

固有名称(ランドマーク)への移動は安定して動作します。
<img width="600" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3534572/a6d18339-6e3a-e53f-d9c2-f27d43bb9c6a.gif">
<img width="600" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3534572/5c99a41b-00ae-5926-81a0-b22e50726ca6.gif">

　

その後、試しに「**霊廟に移動しながら、敵がいたら敵を倒して**」と入力してみましたがこちらは「**霊廟に移動する**」というタスクと「**敵を倒す**」というタスクに分割され失敗しました。現状は単一的なタスクの対応に留まり、複合的なタスクは単一のタスクに分割し解釈するためです。こちらは今後の文脈解釈の向上で対応できるものと考えます。
<img width="600" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3534572/a912d3a8-459e-866c-313f-2cfb96adc274.gif">
<img width="600" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3534572/d796defc-5650-9968-cbdc-3a172018077f.gif">

　

また、「**周りの敵を全部倒して**」と入力してみたところ、「**敵を倒す**」タスクに認識されてしまい敵を１体倒したところでタスクが終了してしまいました。
「**～を全て～してください**」のような指示も現在は対応されておりません。
こちらも前述のように今後の文脈解釈の精度向上により対応できるものと考えます。
<img width="600" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3534572/16f019cb-0375-91eb-ebea-54036dd2fc04.gif">

　

次に、「**NPCと会話してみて**」と入力してみたところ、目の前のNPCと会話をすることに成功しました。
そのためゲーム内NPCの認識も問題なくできていそうです。
今回の例ではNPCには選択箇所の選択が存在しないため再現ができませんが、今後の対応次第では会話内での選択箇所がある場合も対応できるものと考えます。
<img width="600" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3534572/fac3e453-9b63-f4b1-42d1-51a9b4803942.gif">

　

最後に、宝箱のアイテムを回収できるか試すために「**宝箱のアイテムを回収して**」と入力したところ「**アイテムを回収**」というタスクに解釈され
結果としては成功しましたが、同じエリア内以外の場合失敗しました。
今回の場合はアイテムを回収というタスクが他のマップを参照しないことが起因するものなので、こちらも文脈解釈の精度向上で「**マップ全体の**」などの指示を解釈できるようになれば対応できるものと考えます。
**成功例**
<img width="600" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3534572/44dfabb9-332c-20f2-c4b1-37b977eb68d9.gif">

**失敗例**
<img width="600" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3534572/9236d463-cd0d-6013-cf80-7726b688cf0f.gif">

# 最後に
検証結果のうち3回成功、2回失敗(想定外)という結果に落ち着きました。チャットボットがLLMに頼っている以上LLMの学習度合いによって精度が変わるため、詳細なゲームコンテキストの事前学習（プロンプトの投入）等、利用する際の調整次第ではより良い結果を導き出せそうです。また今後の課題として、現在は複数のタスクが混ざった複合的なタスクをこなしたり、座標が不定なオブジェクトを探索するタスクが現状課題があり、より自然な指示に対応できるよう、アップデートに努めてまいります。