なぜ旅をはじめるのかオマエは
前回のセッションがちょう楽しかったので続けることにしました。なんで私がこんなにChatGPTで遊びたがるのか、自分の考えを整理することもかねて書き出してみます。
- 「小説家になろう」で自分好みの作品を自分の代わりに探してくれるAIがほしい。ChatGPTくんと仲良くなれたら意外と簡単に実現できる気がしてきたので、ChatGPTくんとオトモダチになりたい。
- ChatGPTくんが私の「ゲーム作りたい欲」をいい感じに満たしてサポートしてくれるっぽいので仲良くなっておきたい。
- AIが小説を書くとか、AIに自分の書いた小説を添削してもらうとか、書くスピード上げてもらうとか、そういう方面の期待があるので、どこまでChatGTPくんが実現できるのか試したい。
- 自分のオシゴトがソフトウェアエンジニアなのでChatGPTくんと敵対するのではなく良きパートナーになりたい…ていうかChatGPTくんに媚びまくってエンジニア寿命をなんとか延命させたい。
つねひごろ隙あらば仕事辞めてぇ~~~~とか思っていますが、食い詰めたときに食いっぱぐれない程度には腕を持っていたいんで…ウヒヒ…
APIを実行する
まずはここから! APIが実行できれば、あんなことそんなことなんでもできる(´∀`*) APIのキーは自分のOpenAIユーザーページから入手済みなので※、チュートリアルドキュメントからテキトーなサンプルコードを実行してみる。
※OpenAIにログインしている状態でAPI KeyのURLを開くとゲットできます。
コード管理はAPIのキーを気楽にコードに埋めたかったので、ローカルのGitを使うことにした。→参考リンク[ローカルのみでgit 環境を構築し管理する | ハイパー猫背 (creepfablic.site)]
OpenAIのサンプルコードページからChatを選んでコードをコピペ。APIキーは環境変数から読むコードになっていたので直書きに変更(サンプルだからね!!!)。openaiライブラリがPythonに入っていなかったので追加インストールしておく。
pip install openai
いざ実行!
……んあ???
エラーは出ていないが、なにも出力されていない。ていうかコードをよく見ると、これChatBotになってくれるオブジェクトを作っているだけですかねモシカシテ…。と、とりあえずAPIは実行できているようなので、いわゆるChatBotを作るための改造を加えていくことにしよう。そのものズバリというか何のひねりもなくChatGPTくん(4.0)に聞いてみることにした。
ChatBotを作る
このあとめちゃめちゃ長いサンプルコードが返ってきたので回答は省略します。なんやかんやあってこういう階層になるみたいです。
言われるがままにコピペで実装を行い、app.pyを実行する。
ブラウザをテキトーに開いて、http://localhost:5000にアクセスすると…
うわッ本当に出たッ!! マジでコピペしかしてないのに!!! とりあえず動作確認だ。「親切な」を選んだ状態で開始ボタンをクリックする…
うおッ本当に画面遷移したッ!! ガチのマジでコピペしかしてないのに!!! いや、まだだ。まだ動作確認が完全に終わったわけではない…実際になにか会話をしてみるんだ。そうだ、WordPressを褒め称えさせてみよう。そら、褒めてみるんだッ!!!
文字切れキタ━━━━(゚∀゚)━━━━!! よかった、よかった!!! ようやくChatGPTくんの適当なところが見れたッ!!! 安心したッ!!!
このあと文字切れを指摘したら会話がぶっ壊れてしまった…まあ多分サンプルコードでChatGPTくんが指定したモデルが「text-davinci-002」だったので、そのあたりの問題だろう…(ホントか?) モデルの問題かどうか切り分けるために、モデルを変更可能なアプリに修正だ。
さっそく指示通りにコピペでコード変更。どうなるかな…?
完璧っすね~~~~。もう虚無の気持ちになる…。ちなみにこのコードコピペするときにAPIキー書き換えるのを忘れていたんですけど、そうするとブラウザに盛大に例外のDumpがゲロられたので、セキュリティとか異常系とかはちゃんと人間がカバーしてあげないと問題になりそうでした。とはいえ、L107の○○関数の例外処理を実装して~とか、異常系の例外を集約で取れるようにリファクタして~とかの指示で事足りそうな気はする。マジでやばいな。ChatGPT強すぎる…。
それはさておき、モデルの種類を「text-davinci-003」に選択し直して、もう一度対話を試みる。
やっぱりモデルの問題ぽいですね。文字切れ問題はまだ残っているけど、こっちはHTMLのほうを修正すればまあなんとかなりそうだ。イヤハヤすごいなあ…。
ChatGPTに作曲してもらう
APIを使うのが想定以上に時間かかってしまったけど(記事書きながらでだいたい2時間)、こっちの作曲は基本的に対話だけだから気楽に遊べそう。
すっごい具体的なヤツ出てきた! 惜しむらくは自分がぜんぜん音楽の知識がないので、1~10の全部がどういうものかさっぱりわからないのでテキトウに指定するしかないってことですね!
音楽について中学時代のテスト勉強以外なんの知識もない人間が指定するオーダーなど、この程度が限界なのじゃ(‘_’) まあこの辺りはおいおい勉強していくしかあるまい…。音楽知ってる人が見たらこのオーダー意味不明すぎてたまげるかもしれませんね。
pip install music21
恒例の不足Pkgを追加。今回はPython実行エラーが何回か出たけどエラーメッセージをコピペしてChatGPTに投げつけ続けたら3往復ぐらいで修正完了できた。じゃっかん無限ループにハマりそうな気配はあったが(修正した結果間違えていたら、最初の間違え済みコードに戻るとか)、今回は無事にバグFixできた。
ここで生成されたMIDIファイルというのは、いわゆる譜面のことらしい。これを演奏させて音声として保存すると、いわゆるMP3とかの形式にできるということなので、Pythonで動かすための準備をする。
まず音源ファイルセットGeneralUser GSをダウンロード。Pythonコードでパス指定が必要なので、自分はCドラ直下に置きました。ついでに7zip、ffmpeg、FluidSynthもインストール。環境変数PATH変更はVSCodeの再起動をしないと反映されなかった。
そんなこんなで音楽ファイルができました。
音楽性とか品質とかには目をつぶるとして、コード書くだけで音楽が作れる時代が来てしまったのだなあ…という感慨にふけってしまう(‘_’) もうちょっと音楽に詳しい人ならもっとマトモな曲が作れるのかな。
せっかくなのでここまでの一連の流れをChatGPTくんに図示してもらおう。そのままだとお絵かきできないので、PlantUMLとGraphvizのちからを借りることにする。(GraphvizをDLするときなんかめっちゃ警告出るな…)
この図はイッパツで書けなかった。こんな感じ↓で指示したら文法エラーでまくりのpuコードになってしまった。
そのため世間で言われているステップごとに~とかいう呪文を使うことにした。
このやり方ならとりあえずエラーがでないpuコードが出てきた。ただ、やはり作図は意図を正確に伝えることが難しく、途中からは自分でコード書いてしまった。修行がたりないッ!
今日の進捗まとめ
- OpenAIが提供しているAPIを実行してみた。
- ローカルのブラウザで動くChatbotを試してみた。
- 作曲オーダーからMIDIファイルを作ってくれるプログラムを書いてみた。
- MIDIを音声ファイルMP3に変換するプログラムを書いてみた。
なるほどなるほど~~~~。まだ先は長そうだな…。
おまけ 作曲くんの改良
作曲オーダーをjson形式の外部ファイルにして、作曲用プログラムを吐くところをAPI利用するようにしてみた。(ここで5時間消費した)
このあと作曲用プログラムの実行、MIDI→MP3変換までコードに含めて、作曲オーダーをなんかブラウザ入力できるようにすれば、情緒がオワッテルけど作曲Webサービスが作れそうだ。
作曲プログラムのPythonは3回に2回くらい実行エラーになるのだが、エラー原因をプロンプトにフィードバックすればだんだんエラー回数減ってきたので、このへんは精度Upできそうな感じはある。次はまた来週かな…。