ChatGPTがStable Diffusionのプロンプトを生成してくれるWebUI(AUTOMATIC1111)向け拡張機能を作った
見出し画像は、本拡張機能で「画像生成AI関連記事の見出しに良さそうなイラスト」とリクエストして出力されたプロンプトで生成しました。
はじめに
Stable Diffusion WebUIの拡張機能を作りました。
ChatGPTとStable Diffusionの組合せは、何番煎じか分からないので、あまり需要もなさそうですが、配布もします。
それにしても、ChatGPTが出てきてから、基礎的な積み重ねをある程度飛ばすことができるようになりました(例えば、プログラミング言語ごとの独特な記法を把握したり)。やりたいことがあっても、辿り着くまでの道のりが長すぎてやる気が失せてしまう私のようなタイプの人には非常に助かるツールですね。
さて、既存のChatGPT×Stable Diffusionの拡張機能を調べたところ下記のものが見つかりましたが、既存のプロンプトのバリエーション作成などの方向性が強いように見えました(あと、使い方がよくわからない)。https://github.com/hallatore/stable-diffusion-webui-chatgpt-utilities
日本語の雑な指示で丸投げして、自分では思いつかないようなものができた方が楽しいので、今回はそういう方向性で作成することにしました。
この拡張機能でできること
雑な指示でChatGPTくんがプロンプトを作ってくれます!これが全てです(以下はgif動画)
機能
4つのモードがあります。メインは1番で他はおまけです。
Prompt Generation: ユーザのリクエストからプロンプトを生成
Refine and Enhance: 既存のプロンプトに詳細を追加する形で再生成
Fill-in-the-Blanks: プロンプト内の"____"部分を穴埋め
Title and Points Generation: プロンプトからタイトルと解説を生成
1. Prompt Generation
ユーザのリクエストから以下の内容を生成します。
・プロンプト
・タイトル
・ポイント(工夫点など)
「Prompt request」欄に何かしら入力して、「Prompt Generation」を選んでから実行してください。
リクエスト内容は日本語、英語のどちらでも(おそらく)問題ありません。
非常に曖昧な入力でも何かしら出力してくれます。一方で、細かいコントロールは難しいと思います。一期一会を楽しみましょう。
人が頑張って考えたプロンプトには及ばないと思いますが、アイディアにはつながるかもしれません。
2. Refine and Enhance
入力されたプロンプトの描写を詳細化することを目指した機能です。
「Prompt request」欄にプロンプトを入れて、「Refine and Enhance」を選んでから実行してください。
短くなってしまったり、そのまま返ってきたりと、意図通りに動かないことが多いです。あなたの財布が許す限りリトライしてください。
なお、本機能は出力画面側の「Refine and Enhance」ボタンからも使用できます。ただし、その場合は現在出力されているプロンプトが処理の対象になります。
3. Fill-in-the-Blanks
入力されたプロンプト内の"____"(アンダーバー4つ)部分を穴埋めします。
「Prompt request」欄に、一部を"____"にしたプロンプトを入れて、「Fill-in-the-Blanks」を選んでから実行してください。
2. よりはましですが、こちらも意図通りに動かないことが多いです。
4. Title and Points Generation
入力されたプロンプトからタイトルとポイント解説を生成します。
「Prompt request」欄にプロンプトを入れて、「Title and Points Generation」を選んでから実行してください。
こちらも、入力されたプロンプトが変わってしまったり、意図通りに動かないことが多いです。
大幅に変わることは少ないので、出力されたタイトルだけ見るのが良いと思います。
使い方
注意:
・他の環境で一切テストしていないので、動かないかもしれません。
・OpenAIのAPI利用料が発生します(gpt-3.5-turboの場合、$0.002 / 1K tokens)
ダウンロード
差し替え履歴
2023/4/11: 出力のパース方法を変更。各種プロンプトを改善。
最新版はこちら
https://github.com/niki22mk2/gpt-promptgen
インストール
※ githubからインストールする場合は、手順2をWebUIの「Install from URL」タブからの導入に読み替えてください。
Open AIのAPIキーを取得
Open AIのAPIキーを取得してください。「Open AI APIキー」等で検索すれば丁寧に解説した記事がたくさん出てきます。WebUIのフォルダに拡張機能を配置
ダウンロードしたzipを解凍し、gpt_promptgenフォルダをWebUIのextensionsフォルダの中に入れてください。
解凍ツールによっては、gpt_promptgenフォルダが二重になっているかもしれないので注意してください。
gpt_promptgenフォルダを開くと、「install.py」と「scripts」フォルダが見える状態が正しいです。通常通りWebUIを起動
タブに「GPT-PromptGen」が追加されていると思います。
設定
WebUIの設定画面に「GPT-PromptGen」メニューが追加されています。
OpenAI API Key *必須
APIキーを入力してくださいModel to be used
使用するモデルの選択です。デフォルトはgpt-3.5-turbo。
gpt-4の方がかなり精度の良い結果を得られますが、waitlistに登録し、招待が来ないと使えません。
https://openai.com/waitlist/gpt-4-apiSampling temperature
下記参照。他のパラメータを追加したい場合はプログラムを直接変更してください。
https://platform.openai.com/docs/api-reference/chatNumber of automatic retries on generation errors
何かしらのエラーで生成失敗した場合に自動でリトライする回数。デフォルトは1回リトライ。お好みで。Use the English Prompt * 非推奨
チェックすると英語で記述されたプロンプトを使います。トークン数削減が見込めます。
本来は英語の方が有利だと思うのですが、残念ながら期待通りの結果が返ってきにくくなります(おそらく英文の問題)。Output in English * 非推奨
タイトルなども英語で出力してくれるようになります。それでも稀に日本語で出てきます。Save request logs to a file.
webuiのルートディレクトリにpromptgen_logというフォルダが作成され、リクエストのログが出力されるようになります。デフォルトで有効です。Save response logs to a file.
webuiのルートディレクトリにpromptgen_logというフォルダが作成され、レスポンスのログが出力されるようになります。デフォルトで有効です。
フォルダ構成
プロンプトを変えたりしたい場合は、以下を参考に目的のファイルを探してください。(プロンプトは手法などをあまり気にせずに作ってしまっているので、こうしたら改善できた など、知りたいです)
※ 本記事添付のファイルの情報です。githubのものは構成が変わっています。
gpt_promptgen/
├── install.py … webui起動時にopenaiパッケージをインストール
└── scripts/
├── prompt_template.py … 各種プロンプト
└── prompter.py … 拡張機能本体
今後の予定など
前の記事のチャットbotと比べると、素のopenaiパッケージしか使っていませんし、プログラムも小さいので、WebUIの拡張機能の作り方をなんとなく把握するところも含め3~4時間くらいでほとんど完成しました。分からないことがあったときにすぐに聞けるのは良いですね。
今後の予定は以下のようなところでしょうか、、、
各種プロンプトを改善して精度向上→ 対応中
githubで公開→ 済。変な動作は残っていますが騙し騙し使ってください。
何か新たな機能の実装→ 前の回答を踏まえたリクエストができる機能を実験中。github版には反映されていますが、まだいろいろと動作が怪しい点は許してください。