見出し画像

ChatGPTがStable Diffusionのプロンプトを生成してくれるWebUI(AUTOMATIC1111)向け拡張機能を作った

見出し画像は、本拡張機能で「画像生成AI関連記事の見出しに良さそうなイラスト」とリクエストして出力されたプロンプトで生成しました。

futuristic cityscape, neon lights, multiple towering skyscrapers, hints of technology, hovering flying cars, bustling crowds, (cyberpunk), (dystopian), (night scene)
Title:「未来のデストピア都市」
ポイント: 技術の力が支配する荒涼とした未来の世界を描いたイラストです。高層ビルが林立し、ネオンライトが明滅する中、浮遊する飛行車が行きかう姿が描かれています。サイバーパンクやディストピアの要素を取り入れ、特徴的な雰囲気を表現しています。


はじめに

Stable Diffusion WebUIの拡張機能を作りました。
ChatGPTとStable Diffusionの組合せは、何番煎じか分からないので、あまり需要もなさそうですが、配布もします。

それにしても、ChatGPTが出てきてから、基礎的な積み重ねをある程度飛ばすことができるようになりました(例えば、プログラミング言語ごとの独特な記法を把握したり)。やりたいことがあっても、辿り着くまでの道のりが長すぎてやる気が失せてしまう私のようなタイプの人には非常に助かるツールですね。

さて、既存のChatGPT×Stable Diffusionの拡張機能を調べたところ下記のものが見つかりましたが、既存のプロンプトのバリエーション作成などの方向性が強いように見えました(あと、使い方がよくわからない)。https://github.com/hallatore/stable-diffusion-webui-chatgpt-utilities

日本語の雑な指示で丸投げして、自分では思いつかないようなものができた方が楽しいので、今回はそういう方向性で作成することにしました。

この拡張機能でできること

雑な指示でChatGPTくんがプロンプトを作ってくれます!これが全てです(以下はgif動画)

レスポンス速度はOpenAIの調子次第

機能

4つのモードがあります。メインは1番で他はおまけです。

入力画面。機能名はChatGPTに考えてもらいました。
  1. Prompt Generation: ユーザのリクエストからプロンプトを生成

  2. Refine and Enhance: 既存のプロンプトに詳細を追加する形で再生成

  3. Fill-in-the-Blanks: プロンプト内の"____"部分を穴埋め

  4. 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. よりはましですが、こちらも意図通りに動かないことが多いです。

入力例
出力例。「wearing a school uniform with a pink ribbon, holding a matcha latte」が追加された。

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」タブからの導入に読み替えてください。

  1. Open AIのAPIキーを取得
    Open AIのAPIキーを取得してください。「Open AI APIキー」等で検索すれば丁寧に解説した記事がたくさん出てきます。

  2. WebUIのフォルダに拡張機能を配置
    ダウンロードしたzipを解凍し、gpt_promptgenフォルダをWebUIのextensionsフォルダの中に入れてください。
    解凍ツールによっては、gpt_promptgenフォルダが二重になっているかもしれないので注意してください。
    gpt_promptgenフォルダを開くと、「install.py」と「scripts」フォルダが見える状態が正しいです。

  3. 通常通り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-api

  • Sampling temperature
    下記参照。他のパラメータを追加したい場合はプログラムを直接変更してください。
    https://platform.openai.com/docs/api-reference/chat

  • Number 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版には反映されていますが、まだいろいろと動作が怪しい点は許してください。



いいなと思ったら応援しよう!