はじめに
初めて記事投稿します、yamashitaと申します。
私は現在プログラミングスクールRUNTEQでRuby on Railsを中心にプログラミング学習中の初学者です。
今回は、私の趣味である将棋をOpenAIのAPIに解説してもらうアプリを作ったので、開発日誌も兼ねて投稿してみます。更新などあれば追記したいと思います。
アプリは現在公開中で、URLはこちらです:https://shogikaisetukun.com/
経緯
調べてみたところ、ChatGPTと将棋を指す試みをされている方はいましたが、解説させてる方は見受けられなかったので作ってみました。既にいたらごめんなさい。
結果
現行で出てるモデルでは、精度の高い解説は生成できませんでした。
将棋を知らない方からはそれっぽく見え、知っている方からは間違った解説を面白がってもらうジョークアプリみたいになりました。
採用したモデルは「gpt-4-1106-preview」です。現行のChat Completions APIの最新版です。
「gpt-3.5-turbo-1106」ではオリジナルの戦型や囲いの名前を連発しました。
もっと下位のモデルだとそもそも日本語が怪しくボツとしました。
また新しいモデルが出たら随時試してみたいと思います。
画像は「gpt-4-1106-preview」で生成した解説です。それっぽいけど殆ど合ってません。
ちなみに形勢は後手の典型的な大やらかしにより先手勝勢です。
技術面
フロントエンドはReact、バックエンドはRuby on RailsをAPIで使用しています。
将棋UIの作成については、shogi-player-wc(https://shogi-player.netlify.app/)を使用させていただきました。
詳細はGitHubをご確認ください。:https://github.com/yamashita-takahiro-44/shogi-kaisetukun
機能
シンプルに使ってもらえるようSPAで認証などは何も要らない作りにしました。
KIFあるいはSFEN形式の棋譜を読み込む、あるいは手動で一手ずつ盤面を動かして、解説ボタンを押すことで解説が生成されます。
今後の機能追加は検討中です。
まとめ
やっぱり将棋は専門的な知識なのでトレーニングデータを準備してしっかり学習させないと厳しいのかなと思いました。
現行のGPT-4による解説を可愛がってくれる人が少しでもいれば幸いです。
そもそも将棋用のAIじゃないので、個人的にはそれっぽい解説が出てくるだけで凄い技術だと感動してます。
今後も面白そうと思えるアプリを作っていきたいと思います。
ご意見・ご感想はコメント欄あるいはtwitterまでお願いします。https://twitter.com/yamashita_44
追記
12/21 アップグレード第一弾
将棋を知らない方でもなんとなく遊んでもらえるよう、棋譜プリセット、
GPTのバージョン、プロンプトをいくつか選べるようにしました。
12/26 アップグレード第二弾
・見た目をなんかいい感じに。
・トップページ、画像投稿機能、ランキング機能追加
・画像へのコメント機能追加
・URLベタ打ちやリロードしても動くようになった
本筋と関係ないんですが、最後の機能実装に他の機能の10倍ぐらい時間かかりました。
react-router-domでルーティングしたのですがそのままだとリロードとかURLベタ打ちすると動きませんでした。
そこでNginx導入を検討しましたがうまく動きませんでした(Rails-apiへのPOSTリクエストが弾かれ続けた。)。
結局フロントエンドだけVercelでデプロイし、vercel.jsonでリクエストをindex.htmlにリライトしてもらう手法で思った通りURLベタ打ちやリロードしても問題無い実装ができました。
vercel.jsonはこんな感じです。
{
"version": 2,
"builds": [
{
"src": "package.json",
"use": "@vercel/static-build",
"config": { "distDir": "build" }
}
],
"rewrites": [
{ "source": "/(.*)", "destination": "/index.html" }
]
}