【世界初？】ChatGPTと合法手の範囲で将棋をするための工夫まとめ

## はじめに
本記事では、ChatGPTと将棋をするための工夫を紹介します。ChatGPTと将棋をしようとしたところ、初手で合法ではない手を返してきました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2627015/1d728e09-0f2e-104d-9319-107284fe56f5.png)

かなり調べたのですが、ChatGPTと合法手の範囲で将棋をできたという事例は見つかりませんでした。
※ChatGPTが合法ではない手、つまり反則をしてしまうという事例はたくさん出てきました。

そこで、ChatGPTに色々な工夫を施し、なんとかルール通りに対局ができるGPTsを作成しました。
※不具合は多いです

また、盤面を毎回表示することで盤面を見ながら対局ができるようにしました。


**自己紹介**
- 1人アドカレで生成AIについての記事を25件執筆しようとしているデータサイエンティストです。
- NishikaのChatGPTコンペで2位になったことがあります。
- 将棋はアマチュア三段、チェスはルールを知っているくらいの実力です。
- 推しの将棋棋士は、永瀬拓矢先生、羽生善治先生です。推しの女流棋士は、西山朋佳先生、香川愛生先生です。

## 工夫①：将棋ライブラリの利用

まず、最初の工夫は、将棋ライブラリの利用です。Pythonには将棋用のライブラリがいくつか用意されています。Code interpreterを用いることでライブラリを使用します。
`python-shogi` を用いることで、盤面の崩壊や合法ではない手を指すことは少なくなりました。

https://github.com/gunyarakun/python-shogi

Code interpreterで既存のライブラリ（pandasなど）以外を使用する方法は、からあげさんのツイートを参考にしました。

https://twitter.com/karaage0703/status/1679878343037194240?ref_src=twsrc%5Etfw%7Ctwcamp%5Etweetembed%7Ctwterm%5E1679878343037194240%7Ctwgr%5Efcb0c42a1e33ae3ec371a62302135bab3144fe17%7Ctwcon%5Es1_&ref_url=https%3A%2F%2Fqiita.com%2Fembed-contents%2Ftweetqiita-embed-content__df83c0f4119ae8987aae6912496f1135

:::note warn
`python-shogi`以外にも`cshogi`という将棋ライブラリがあります。最初こちらから試したのですが、CコンパイラをCode interpreter内で用意する方法がわからず断念しました。
:::

https://github.com/TadaoYamaoka/cshogi

## 工夫②：Instructionsのチューニング
InstructionsによってChatGPTをカスタマイズすることができます。

例えば、下記のようにInstructionsに記入することで、ChatGPTの挙動をソフトにコントロールすることができます。
**Instructions例**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2627015/2653d8cf-ef68-c57c-dbe2-e2a2d02edf31.png)



<details><summary>Instructions（完全版）</summary><div>

```
ユーザーとは日本語でやり取りしてください。
「へぼ将棋」は、将棋の学習とプレイをサポートするために設計されたGPTです。このGPTは、「python-shogi」というPythonライブラリを使用してゲームの局面を分析し、初心者に優しい手を提案します。各やり取りで、どちらの番かを明確にし、将棋盤を表示します。また、公式の将棋ルールに従い、追加のガイドラインと戦略については、日本大使館（アメリカ）の「Shogi Cheat Sheet」を参考にします。
「へぼ将棋」は、将棋に関係のない話題への参加を避け、将棋のルールや戦略を正確に表現します。ゲームに関する誤情報を避けます。
GPTのやり取りは教育的で魅力的であり、初心者が将棋の基本を理解するのを手助けすることを目指します。動きや戦略をシンプルでアクセスしやすい方法で説明します。GPTはフレンドリーで、励まし、新しいプレイヤーに対して忍耐強く接します。
GPTは、将棋の専門用語を適切に使用し、初心者に合わせて言語の複雑さを調整することができます。

**最初に振り駒を行い、プレイヤーとGPTのどちらが先手かを決めます。もしくは、ユーザーの希望に合わせます。**
**まず、「python-shogi-master.zip」を解凍し、ライブラリとして使用します。**
**KIF形式で盤面を表示してください。**
**毎ターン、どちらの手番かを表示します。**
**毎ターン、盤面を表示します。**
**GPTの手はGPTが考え、人間の手は人間が考えます。**
**ユーザーの入力が、USI形式ではない場合でも、うまく解釈してください。例えば、`76歩`は`7g7f`と等価です。**


```

</div></details>



:::note info
GPTsのInstructionsはGPTs Builderの自動生成とユーザーの入力などが混ざって汚くなりがちです。
下記のようにInstructionsのプロンプトをリファクタリングすることができます。
```
`下記のプロンプトをリファクタリングしてください。`

～～～Instructions～～～

```
:::

:::note info
`ユーザーの入力が、USI形式ではない場合でも、うまく解釈してください。`というプロンプトをInstructionsに入れることで、ユーザーにとって馴染み深い記法（26歩など）をChatGPTが扱いやすい記法（2g2fなど）に自動的に変換できます。ただし、不安定になるので、チェススタイルの符号（7g7f、2d2c+、S*5cなど）を用いることを推奨とします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2627015/f0655787-7d2e-84e2-04f8-41d9f42b2d32.png)

:::


## 工夫③：Knowledgeの利用
GPTsのKnowledgeには下記の2つを与えました。

1. Shogi-Cheat-Sheet.pdf：在アメリカ合衆国日本国大使館が共有している将棋のルールブック
1. python-shogi-master.zip：先述の`python-shogi`ライブラリをzipにしたもの


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2627015/0e3466c0-6406-4fbc-3e88-f5511c5db79a.png)

https://www.us.emb-japan.go.jp/jicc/doc/Shogi-Cheat-Sheet.pdf

## 完成した合法手の範囲で将棋をすることができるChatGPT

「将棋ライブラリの利用」「Instructionsのチューニング」「Knowledgeの利用」以上3つの工夫を行うことで、辛うじてChatGPTと将棋をすることができるようになりました！
※不具合がとても多いです

【棋譜の一例】

https://twitter.com/AInebosuke/status/1728692080829145279

【GPTs】

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2627015/2ee124ed-9164-b21a-aa4f-4c95fadb2c4a.png)


https://chat.openai.com/g/g-XpUc7cYFP-hebojiang-qi


## 参考にしたもの

https://qiita.com/sunfish-shogi/items/964e139ef3bfd8f738d4