ChatGPTはテキストしか出力しませんが、出力形式を工夫することで、グラフや図を描画させることが可能です。出力方法をまとめてみます。
お題はクイックソートです。
結論から書くと、出力形式により作図能力が変わりました。クリックソートに関しては次の通りの結果でした。
テキスト > Mermaid > PlantUML > Graphviz > SVG
default - text
特に出力形式を指定しないと、テキストで図を描画してくれます。
クイックソートのアルゴリズムを図にしたいです。作図してください。
何のひねりもなく指示すると、テキスト上に図を出力します。
SVGで出力
SVGも出力できます。でも、ちょっと座標がおかしいので苦手なのかな?
クイックソートのアルゴリズムを図にしたいです。
出力形式はSVGで作図してください。
それで、SVGをブラウザで表示すると次のようになりました。
自信たっぷりの回答だったので、期待していたのですが。。。
・・・結構壊れていますね。続く会話で以下のようなプロンプトを投げてみます。
レイアウトが崩れています。図が重ならないように配置できませんか?
ChatGPTの謙遜さには、倣いたいと思います。結果はどうでしょうか?
大した変化はありませんでした。残念。
PlantUMLで出力
次に、PlantUMLで出力してみましょう。
ChatGPTはPlanuUMLの作図はそこそこ得意です。
次のようなプロンプトを投げてみました。
クイックソートのアルゴリズムを図にしたいです。
出力形式はPlantUMLで出力してください。
PlantUMLは、Qiitaでもデフォルトでレンダリング可能なので、貼り付けてみたのですが、文法エラーになってしまいました。そこで、改めて再生成すると、次のような図を生成しました。
それっぽいですね。素晴らしいです。
ただし、アルゴリズムを図にしたというよりは、プログラムの構造を図にしたような雰囲気です。
Graphvizで出力
Graphvizの出力精度もPlantUMLくらいありそうです。
次のプロンプトを投げました。
クイックソートのアルゴリズムを図にしたいです。
出力形式はGraphvizで出力してください。
生成されたデータを「qsort.gv」という名前で保存して以下のようなコマンドでPNGファイルを生成しました。
$ dot -Tpng -o qsort.png qsort.gv
すると図は次のようになりました。ただし、あまりアルゴリズムを解説しているという感じはしません。
そこで、ここに来てプロンプトを工夫することにしました。
クイックソートのアルゴリズムを知りたいです。
クイックソートの手順を箇条書きにしてください。
出力形式はGraphvizで出力してください。
なんとなく雰囲気だけは出ているでしょうか。
Mermaidで出力
次に、気軽に図が記述できる、Mermaidで出力してみます。個人的には、かなり期待しています。
クイックソートのアルゴリズムを知りたいです。
出力形式はMermaidで出力してください。
どうでしょうか。すると、次のような図が出力されました。アルゴリズムの説明という点では、これまでで一番優秀でしょうか。
そこで、もう少しプロンプトを工夫しました。
クイックソートのアルゴリズムを知りたいです。
クイックソートの手順を箇条書きにしてください。
出力形式はMermaidで出力してください。
すると、以下のような図を出力します。
ちょっと不正確ですが、それなりの図を出力しています。
ここまでは、モデルGPT-3.5でしたので、GPT-4でも試してみました。
やはり、GPT-3.5よりも、GPT-4の方が結果が良い感じの図を出力しています。
GPT-4 + Show Meプラグイン
餅は餅屋でしょうか。GPT-4と「Show Me」プラグインで描画してみます。
クイックソートのアルゴリズムを知りたいです。
クイックソートの手順を箇条書きにして、図で出力してください。
プロンプトが悪かったのか、意外にもあっさりしています。
先ほど結果が良かったプロンプトで改めて試してみます。
クイックソートのアルゴリズムを知りたいです。
クイックソートの手順を箇条書きにしてください。
出力形式はMermaidで出力してください。
「Show Me」プラグインもGPT-4で生成したものをグラフで出力するだけなので、それほど変わらないようです。
お題が難しすぎた?
なお、「Wolfram」プラグインも試してみましたが、「申し訳ありませんが、クイックソートの視覚化に問題があります。クイックソートの視覚化は、一般的なプログラミング環境では簡単には実現できないかもしれません。それは、クイックソートが再帰的なアルゴリズムであり、その動作を一度に全体として視覚化するのが難しいからです。」とのことでした。
クイックソートでは、お題が難しすぎたようです。
まとめ
ここまでの結果を比較してみて、単純にクイックソートが分かりやすかったのは、テキスト出力したもの、次にMermaidでした。PlantUMLもプロンプトを工夫すればもっと分かりやすくなりそうでした。
また、プロンプトに与える入力を少し変えるだけでも結果が向上するので、いろいろ試してみたいと思いました。