LLMの課題、Geminiで「ソフト・シンセサイザー」を作ってみました。
Geminiでソフトシンセサイザーを作ってみました。
多少専門知識が必要ですが、シーケンサーやエフェクターを搭載した本格的なシンセサイザーがほぼ一発で作れます。AIを利用すれば誰でも無料でシンセサイザーを入手できます。
凄いですよねー、昔はエフェクターのリバーブだけでも単体で10万円はしましたからね。それがタダでしかもすぐに手に入ります。もちろん音もクリアーで市販品レベルのクオリティの音が鳴ります。
もちろん以前作っていた「Cardputer-Adv」のシンセに比べると音のクオリティーは格段に上です。その要因はパソコンの処理能力と小さなマイコンの処理能力の差で、音声波形をリアルタイムにシミュレーションしているので、これはどうしようもない処理能力の問題です。やはりマイコンは非力で能力的には格段に劣ります。それでも挑戦する意義はあるのですが、今回あまりにもあっさりと高級シンセが作れてしまったことで戦意を消失しています。
システム開発を行った事がある方ならわかると思いますが、一つのシステムを構築するためには機能要件の整理から始まって、概要設計や仕様設計、詳細設計やテスト設計等々、コーディング以前に膨大な設計の整理が必要ですし、システムを稼働させる環境設計やソフトプロダクトの選定などやることは膨大です。こういった膨大な作業をAIがやってくれたら大変助かりますが、残念ながら現状のAIモデルはこのような複雑な作業には向いていません。というかほぼ無理です。
やってみるとわかりますが、3手目までは普通に進むと思います。でも4手目でほぼバグります。GeminiもGrokも4手目でバグって、オセロ盤の状態を維持することもできなくなって思考が止まりました。
LLMの構造はプロンプトに入力された文字列情報を整理して、それに関連する情報の確率マップから返信すべき文字列をサイコロを振って一番確率の高い一文字を返すということを繰り返しているだけです。つまり人間のように文章の全体を捉えて意味を理解して返信しているわけではなく、あくまでも文字列の確率の問題を1文字ずつサイコロを振って返しているだけです。これがLLMなんです。
現状のAIは一つのセッションが始まった冒頭から毎回入力したプロンプトや返信の文字列を読み返して次の一つ文字を探し続けるわけですが、オセロ盤のようなよく似た文字列が続くと段々と状況が掴めなくなって、3、4回続けると何が最新の状態なのか?何を返信すればよいのか?混乱して暴走するようです。
そのことはGeminiもGrokも正直にそんな状態になって混乱したと答えました。つまり8*8のたった64個のデータも保持して管理できないという構造的欠陥です。
実はこれが今のAIの最大の課題で、LLMは簡単なスタックメモリすら持っていないので、現状の状態を維持できないという制限があります。そのために常にプロンプトと返信を毎回読み返すことで次の一文字を探すわけですが、同じような文字列が連続で続くとその区別が難しくなるようです。
だから以前の「Cardputer-Adv」でのシンセ開発には時間もかかって苦労しました。序盤に生成したコードを無視して全然別のコードを生成するなんてことは頻繁にありました。今何をやっているのか?という認識がとても苦手だということです。なので大規模なシステム開発ではセクションを細かく区切りながら、目的を絞って使わないとうまくいかなくなります。AI動画などで途中でキャラが変わっているものをよく見かけますが、まさにあのような混乱状態に陥る可能性が高いということです。
だからAIに処理を指示するなら3手以内に収めるほうが無難だと思います。それでも途中で混乱することはあるので、できれば1発で回答を引き出すようなプロンプトが安全です。コード開発の場合は、途中で一旦成果物を保存するために「これを(成果物1)とする」といったプロンプトを間に入れておくとAIの混乱は少なくなります。
今回Javascriptで作ったブラウザで動作するソフト・シンセサイザーは、そもそものオーディオ・ライブラリーが優秀なので、簡単なパラメーターを繋ぐだけでシンセサイザーが作れます。コード的には300行ほどでシンプルです。現状は単音ですが、ポリフォニックや複数トラックにも改造は可能かと思います。
