LLMと一緒に創作するUIのプロトタイプ

A cute cartoon robot with big eyes and colorful wires, sitting at a desk next to a smiling child. They're both looking at the same glowing computer screen displaying a text editor, typing together happily.  The background is filled with whimsical clouds and stars.  Use a soft pastel color palette

ここ数年は大規模言語モデル(LLM)技術が急速に発展し、AI技術で実現できる領域が日々拡大しています。もし自分用のAIアシスタントを誰もが持てる時代になったら、自分は創作活動を一緒に楽しみたいなと考えていて、AIと一緒に創作を楽しむためにはどんなアプリケーションがあるとよいか、少し手を動かして試作してみました。個人的にちょっと面白い体験のできるUIができたので、簡単にアイデアを紹介したいと思います。

テキスト入出力のモデルを使用し、文字のみでの創作活動ということで、小説の執筆をAIと一緒にやることを目標設定しています。(ちなみに管理人は小説を書いたことはない素人です。)

作ったもの

左にチャットUI、右側にテキストエディタがあるアプリケーションとなっていて、エディタで表示しているファイルをLLMとのチャットで参照させたり、テキストファイルに記載した指示(プロンプト)をボタンから実行する機能があります。テキストファイルの参照は他のエディタでもよく見かけますが、手順書のような形で段落ごとに指示を書いて、それをボタンから実行できる、というのが面白いポイントです。

1. ファイルの内容をチャットで参照する

選択したファイルの内容を参照し、それに関する対話ができる機能です。以下の例では、作りかけの構想資料を参照させて、それの内容を説明してもらいました。内容がスカスカすぎて「もっとこういう内容も考えてみて!」とアドバイスしてくれています。このファイル参照の機能自体は他でもよく見かけるものですが、作品の構想資料を共有しつつアイデア出しをしたり、改善点の議論ができるのでとても気に入っています。Cursorなど他のアプリでも用意されていて、これ自体はよく見かける機能であり必須機能だと思います。

2. テキストに書いたプロンプトをボタンで実行

テキストファイルを手順書のように考え、各段落に指示を書いておくと、下部のボタンからその指示をユーザーの発言としてチャットUIに入力し、LLMのテキスト生成をキックすることができます。## 1. タイトル のような見出しを目印に手順を記載した段落を見つけ、テキストファイルを保存すると画面下部に対応したボタンを表示する形にしています。テキストファイルを編集してプロンプトを調整できることと、プロンプトを手入力やコピペせずにボタンを押すだけで実行できる、というのが個人的に気に入っているポイントです。目的に応じていい感じの手順書を作ることができれば、別の作品を作るときにも再利用できて良さそうです。

3. チャット形式で追加の依頼をする

テキスト生成部分がチャット形式なので、続きでさらに別のボタンを押して追加の指示を送ることもできます。これにより、「アイデアを考えて!次にこの観点で評価して!そしたらいいやつを選んでさらにブラッシュアップして!」みたいな処理フローがインタラクティブに実行できます。通常のチャットの入力UIもあるので、そちらから追加の依頼ももちろんできます。

いくつかのユースケース

複数のアイデアを出して良いものを選ぶ

現在の構想に基づいてたくさんのアイデアを列挙したり、指定した評価観点で全てのアイデアを評価する、というような使い方はLLMは強いと思います。面白いと感じるアイデアが出てくる確率はまだそれほど高くはない印象ですが、「20個考えて」とお願いすると即座に20個アイデアを出してくれるし、出したアイデアを全て読んで一通り評価することもすぐに実行してくれます。今回試作したアプリでは最後の指示を再実行する機能などもつけているので、気に入ったのが出るまでひたすら生成してもらう、という使い方もできます。淡々と物量をこなせるのは人間よりコンピュータの方が得意な領域ですね。

また、手順のテキストの段落ごとに実行ボタンが作成されるので、アイデアを出す、全てのアイデアを評価する、評価の高かったものを選んで改善点を出す、などの連続した依頼も実行しやすくなっています。「今の回答は60点です。100点になるように見直してください」みたいな指示を複数回繰り返す、みたいな使い方もできます。

LLMの出してくれた意見を見ながら最後は人がアイデアを出すのが良いと思いますが、自分みたいな素人にとっては何もないところから考えるよりは作業が捗りそうです。

長いプロンプトをテキストファイルとして保存して活用する

LLMに依頼して1発で物語のアウトライン(舞台設定や登場人物、テーマ、プロットや章立て)を作成するような少し長めのプロンプトも、テキストファイルに保存しておくことで、ボタン1発で実行できるようになります。今回LLMと一緒に物語を創作するためのUIを考えるにあたり、他の方の取り組みも参考にさせてもらいましたが、例えば ガチャ方式による小説のアウトラインの自動生成 で使われているアウトラインの生成プロンプトをテキストファイルに保存して使用すると、ベースとなるアイデアから一通りのアウトラインを生成してくれて面白いです。

手順を見ながら対話をリードする

あとは、LLM側が手順を実行する使い方とは別で、手順を見ながら人に「次はこれを考えてみて」と対話をリードしてもらうような使い方も良さそうです。手順書のテキストを参照してもらいつつ、「手順に沿って1つずつ会話していきましょう」などと依頼するとそういう動きをしてくれます。(このあたりは、使用しているgemma2が賢いのでいい感じにリードしてくれているのはありそうです。)

気に入っている体験

プロンプトエンジニアリングがしやすい

ボタンから特定のプロンプトを起動するような機能を実装する場合、プログラム側に固定のプロンプトテンプレートを持たせるような形も多いと思いますが、それだと気軽にプロンプトの調整がしにくかったりします。テキストファイルにプロンプトを書いて、それが動的にボタンになるので、新しいプロンプトを追加したり、既存のプロンプトを確認して出力を見ながら調整したり、ということがやりやすいのは良い点と感じました。

手順書として創作のガイドを育てられる

LLMの助けを借りながら物語の構想を固めていく一連のやりとりを、順番に呼び出すプロンプト集のような形で書いていくことで、人間とLLMが共有する手順書のようなものが出来上がります。手順書となるテキストファイル内の指示を使ってLLMの生成をキックするため、出力を調整するには手順書の記載内容を修正することが必要で、「実際に使用したプロンプトと手順書の内容に乖離がある」という状態にならず、手順書が常に最新化されている状態になるのも良いポイントかなと思います。

もともと、創作の流れをLLMにとってもわかりやすい手順書のような形にまとめられたら、安定して創作のサポートをしてくれるようになるのでは?というアイデアを持っていたのですが、今回の試作でそのアイデアを一部試すことができた気がしています。創作の現場で使い込まれるほど、創作のノウハウを詰め込んだ手順書(=プロンプト集)が育っていく、という状態が実現できるのが理想ですね。

対話しながら少しずつアイデアを固める

構想資料を共有しつつアイデア出しをしていく中で、気に入ったアイデアを構想資料に書き足していくと、もう一度アイデア出しをする際には書き足した内容を踏まえてのアイデア出しをしてくれるようになります。今のLLMだと書き足すアイデアが複雑になってくると意図と違うような内容も出てくるのですが、LLMに一発でアイデアを出してもらうのではなく、LLMと一緒に少しずつアイデアを固めていくようなフローの片鱗は見えた気がするので良かったかなと。

終わりに

LLMと一緒に創作をするには?ということをしばらく考えたり試作したりしていて、少し面白い体験を作れた気がしたので、アイデアのシェアをメインに久々にブログを更新しました。テキストエディタとして見ると機能的には全然足りていないし、まだ満足のいく創作体験ができるレベルにはないので、あくまで「こんなUIを作ってみたらこういう良い点があったよ」という程度で受け止めてもらえると幸いです。一応Githubにコードを公開したので、それでもいいや、ちょっと触ってみよう、という方がもしいらっしゃれば以下からどうぞ。

https://github.com/t-hanya/text-editor-with-llm-chat

今回、UI周りはStreamlit、LLMまわりはOllamaを使いました。Streamlitはちょっとクセはありますが、短いコードでインタラクティブなUIが作れるのでとてもありがたかったです。LLMはGemma2 9bを使用しました。軽量で生成が速い割にかなり賢いです。コード自体はMITライセンスにしましたが、Gemma2を使う場合は利用規約に気をつけて使っていただければと思います。

本題と関係ないですが冒頭の画像はFLUX.1 schnellで作りました。画像のプロンプトはGemma2くんに考えてもらいました。

それではまた。