見出し画像

OpenAI GPT APIを用いたAI小説生成環境の作成(序)

ChatGPTを使えばどんな文章もどんどん書けるという話題がSNSのタイムラインを埋め尽くしています。
筆者も雑な2万文字程度の起業入門書を半日ほどで書きあげてみたり、

恋愛小説と称した読みにくい文章をダラダラ書いてみたり、

タイムラインに流れる先駆者の方々のお言葉を信じてトライしてみました。

しかし、ほとんどの方が単発のポン出しを何度も試して、たまたまうまくいった例だけを挙げておられるので、そのまま真似をして、ある程度の分量のテキストを作ろうとすると、どうしてもつまずいてしまいます。

特にストーリーのある長めの文章を書こうとすると、ChatGPTでは無理……とはいわないまでも、普通に人間が作文したほうが圧倒的に楽です。

GPT4になって、ある程度長い文章を出力してくれるようになってはいますが、え~、こんな長文なのに辻褄が合ってる~。人間みたい~。という驚きはあるものの、まだまだ、面白い短編小説が丸ごと一本ポンと出てくるわけではないので、AIにそれなりの長文を書かせよとすると、結局は繰り返しプロンプトに指示を出し続けなければならないわけです。

しかも、その指示内容も自然言語で普通にお願いすればいいわけではなく、「プロンプトエンジニアリング」なんていう言葉が生まれるぐらい癖があって、そのうえ結果が一意に定まらない。

結果が定まらないものをエンジニアリング(工学)と呼んでいいのかという気もしますが、納得いく300字程度の出力を一回得るために、300文字を超えるプロンプトを何度も何度も書き直していたのでは本末転倒。AIいらねぇわという話になってしまいます。

このあたりは、同じジェネレーティブAIとはいえ、画像生成AIと大きく違うところだと感じます。画像生成では、文字を入力して画像を得るので、絵を描くことができない人が、自分の好み且つこれまでにない絵をAIからの出力として受け取ることができます。
つまり、人間が出来ないことを肩代わりしてくれるので、何度も何度も呪文を書き直してトライするだけの意味があるわけです。

しかし、これが文章生成となると、欲しい文章の中身をあれこれ説明する文章を、わざわざAIに向けてAIが解釈しやすいように長々と書くぐらいなら、その時間で自分が欲しい文章を直接書きますよね。だって文章は書けるんだもん。

残念ながら今のChatGPTのようなUIからLLM(Large Language Model:大規模言語モデル)を使っているだけでは、面倒な人間の作業を目新しい面倒くささに置き換えているだけなんですよね。「AIを使っている!」「これが最先端テクノロジーだ!」っていう高揚感はあるものの、まだまだ「人間が楽になる」という方向には向かっていないわけです。

……と、ここで「なんだかんだいって、ChatGPTもまだまだ使えねぇな。一次の流行りで終わるんじゃねぇの?」と毒づいて終わってしまっては、自分がテクノロジーについていけないのをテクノロジーが未熟なせいにしてしまう単なる負けず嫌いのジジイになってしまうので、何とかならないものかと考えました。

AI小説生成環境の作成

筆者のような昭和生まれのEXPO'70経験者にとって、GPT3.5にせよGPT4にせよ、LLMを使うときにチャット型のUIからプロンプトに指示を流し込んで出力を受け取るという作業は、昔のTSSにつながったTTY端末の前に座って、ラインエディタでプログラムやデータを書き込んでいる姿とオーバーラップします。なんか、もっとうまいインターフェースはないものでしょうか。

Notion AIや、このNoteに最近リリースされたAIアシスタントような、単純化されつつも汎用化された仕組みもすばらしいとは思うのですが、これらは、あくまでも文章を書くという「作業」をするのが人間であるという前提で作られているようです。AIができる作業は思いのほか少なく、AIを「人間に対して知恵を授ける存在」として位置づけられているように感じます。

筆者の頭が古いのかもしれませんが、AIが知恵を出して人間が作業をするというのは、どうも素直に納得できません。どうにかして、人間が知恵を出してAIが作業をするか、理想的には、人間は指示するだけで、AIが知恵を出すのも作業するもやってくれる状況に近づけたいわけです。

そこで、それっぽい小説を書くことを前提に、OpenAI APIをコールするUIのプロトタイプを作っています。

中身は結局、例の「プロンプトエンジニアリング」ではあるのですが、このようなUIを作っておけば、同じような呪文を何度も人間が書くのを避けることができます。

まだ作成中なので、大きく変更が入るかもしれませんが、とりあえずいま作っているものの外観をザックリ公開します。

はじめに、ウェブブラウザでGradioで作られたUIを立ち上げます。

「物語概要作成」タブの「物語のテーマ」の欄に、物語のテーマを1行書いて、「あらすじ作成」ボタンをクリックすると、あらすじが出力されます。

あらすじ作成

次に、「登場人物の作成」ボタンをクリックすると、登場人物の設定が出力されます。

登場人物の作成

「タイトルの作成」ボタンをクリックすると、この物語に合ったタイトルが作成されます。

タイトルの作成

ここまでが下準備になります。

ここからが本番。「詳細執筆」タブに移動して、詳細を作り込んでいきます。

詳細執筆

画面は、3カラム構成になっていて、左のカラムで、チャットのAPIをコールする際にsystemに渡す設定を決めます。AIはこの設定を守りながら応答を返そうとします。

真ん中のカラムでチャットを行います。設定次第ではChatGPTと同じような会話ができますが、楽しく会話するのが目的ではないため、単発で指示を与えて結果を得るのが基本動作になります。
同じ指示に対して、少しずつ違う結果を同時に最大4つ受け取ることができて、そのうちのどれかを採用して右のエディタに転送します。

真ん中のカラムにある「文章中の[insert]を補完する」というアコーディオンを開くと、下のようなプロンプト作成画面が出てきます。

プロンプト作成

プロンプトを作成して送信。結果を得たら、その中から良いものを選んでエディタに送る。
これをできるだけ人間が手間をかけないですむように繰り返して、文章の量を増やしながら全体を作り上げていく仕組みです。

……とはいえ実は、文章を増やすフローはそう簡単にはいかなくて、まだまだ試行錯誤の真っ最中。APIをコールするときのプロンプト以外のパラメータをいじったら、少しうまく動作するようになりましたが、まだまだ調整が必要です。

騙し騙しでもうまく使えるものになったら公開しようと思いますが、こりゃダメだと思ったらこの話題には触れなくなりますので、ああ、そういうことなんだなと理解して、そっとしておいていていただければ幸いです。

頂いたサポートは今後の記事作成のために活用させて頂きます。