キャラの立ち絵1枚+テーマで、アイデアを練る方法

皆さんはキャラの立ち絵のバリエーション案や、サムネイルに使う画像の作成、宣伝用とかの画像作成から単なるお遊びまで、その他もろもろ画像系のアイデアに困ったことはありませんか。

そんなニッチな需要たいしてないやろ…とふつうはなるのですが、キャラクターの画像素材は立ち絵だけでは足りないことがかなりあります。

今回はそこをお助けするちょっとしたアイデア
ただし、GPT-4V(最新の視覚機能つき高性能LLM)を使うので、ChatGPT有料版の契約が必要です。月20ドル(3000円ぐらい)は全然払えないわけではないけど、地味につらい。

使うプロンプト

TL;DR(ええからはよ言え)な方向けに、とりあえず先にプロンプトを出してしまいます。
当初よさそうなプロンプトに無茶苦茶悩んでいたのですが、親しい友人がいい感じに仕上げてくれました。ここで改めて感謝を。

Please follow the instructions below to generate image.

# Theme (Very important: Please expand the image and output as long prompt as possible!)
- (テーマの言葉をここに書く 日本語でOK)
- Integrate a specific theme into the illustration, ensuring that it is reflected vividly in the style of 2020s Japanese flat animation.
The theme should be creative and unique, potentially involving elements such as futuristic cities, traditional festivals, surreal environments, or spectacular views.

# Character Detail (For reference only: elements of character may be omitted to some extent.)
- Please analyze the attached image in detail, focusing on the elements of the character depicted within, and write a suitable English text for image generation.
- Maintain the essence of the above character while allowing for slight modifications to adapt to the new theme.
The character can be depicted engaging in activities relevant to the theme or interacting with theme-specific elements.
The style should be reminiscent of modern flat Japanese animation, emphasizing clean lines and vibrant, unshaded colors.

やりかた

  • どこかからテーマにしたい言葉を拾ってくる。SNSのタイムラインの中からランダムに選んでもよし、ゴーストの辞書から選んでもよし。長くなくて良い。
  • 上のプロンプトの (テーマの言葉をここに書く 日本語でOK) のところを選んだテーマに置き換える
  • ChatGPTを開いてプロンプト欄に貼りつける
  • キャラの立ち絵をプロンプト欄にドラッグ&ドロップする
  • 実行ボタンを押してしばらく待つと、なんかそれっぽい画像ができあがる

実例

届いたワイヤレスマウスがBluetoothじゃなかった」 というテーマで、エミリの立ち絵でやってみます(TJさんごめんなさい)

Please follow the instructions below to generate image.

# Theme (Very important: Please expand the image and output as long prompt as possible!)
- 届いたワイヤレスマウスがBluetoothじゃなかった
- Integrate a specific theme into the illustration, ensuring that it is reflected vividly in the style of 2020s Japanese flat animation.
The theme should be creative and unique, potentially involving elements such as futuristic cities, traditional festivals, surreal environments, or spectacular views.

# Character Detail (For reference only: elements of character may be omitted to some extent.)
- Please analyze the attached image in detail, focusing on the elements of the character depicted within, and write a suitable English text for image generation.
- Maintain the essence of the above character while allowing for slight modifications to adapt to the new theme.
The character can be depicted engaging in activities relevant to the theme or interacting with theme-specific elements.
The style should be reminiscent of modern flat Japanese animation, emphasizing clean lines and vibrant, unshaded colors.

手順通りにやるとこんな感じになります。send messageを押して実行しましょう。

ChatGPTの画面

しばらく待って、できあがった画像がこちらになります。

微妙にエミリっぽいといえなくもないキャラがBluetoothマウスで悩んでいる

応用

# Character Detail

の1行後の、- Please analyze the attached image in detail, focusing...どうたらこうたらいうやつの代わりに、キャラクターの特徴を言葉で記述すると、GPT-4Vが不要になるので、bing AIとかでも同じことができます。実際にやってみましょう。

ただし、bing AIの画像生成機能は、むちゃくちゃ検閲がうるさいので、よく失敗します。気長にリトライしてみてください。

Please follow the instructions below to generate image.

# Theme (Very important: Please expand the image and output as long prompt as possible!)
- 届いたワイヤレスマウスがBluetoothじゃなかった
- Integrate a specific theme into the illustration, ensuring that it is reflected vividly in the style of 2020s Japanese flat animation.
The theme should be creative and unique, potentially involving elements such as futuristic cities, traditional festivals, surreal environments, or spectacular views.

# Character Detail (For reference only: elements of character may be omitted to some extent.)
- アニメスタイルの若い女の子が描かれています。彼女は長くて茶色の髪と大きな青い目をしており、髪はピンクの大きなリボンで飾られたサイドテールになっています。彼女はセーラー襟の白いブラウスと黒いスカートの典型的な日本の学生服を着ています。ブラウスには大きなピンクのリボンが付いています。彼女の足にはパターンが入った黒い太もも高ストッキングを履いており、首にはネコを連想させる金の鈴が付いた首輪があります。
- Maintain the essence of the above character while allowing for slight modifications to adapt to the new theme.
The character can be depicted engaging in activities relevant to the theme or interacting with theme-specific elements.
The style should be reminiscent of modern flat Japanese animation, emphasizing clean lines and vibrant, unshaded colors.

マウスを見てなんだこれって表情を浮かべるエミリ

さらに応用

Themeの3行目に、できるだけクリエイティブで変わった変なイメージを追加する指示があるので、とても派手になっています。

The theme should be creative and unique, potentially involving elements such as futuristic cities, traditional festivals, surreal environments, or spectacular views.

正直ウチはこのほうが好みなんですが、もうちょっと大人しめのイメージにしたいという場合は、下記のような穏やかめな指示に入れ替えてみてください。

If no environment or background is specified for the theme or character, an additional theme that does not interfere with the above themes or characters, such as a comfortable room or a refreshing view, should be integrated.

おわりに

なんか微妙というか笑いのネタにはできそうぐらいの結果になりましたが、新たなアートワークを起こす時のブレインストーミングの足しにはなるんじゃないかと思います。どうでしょうか。

生成AIの今の立ち位置雑感

OZUさんがとても興味深い話を書いていたのと、昨日の記事の最後の蛇足が生まれた背景として、自分の経験談もまとめておこうかと思って。

SNS上では長文になってまとめづらかったので、こっちにぺたり。

  • 画像生成AIについては、最初はそもそも生成のコツがつかめなくて、適当に少量の単語を並べて手探り
  • 慣れてきたら自分の好みに合うよう仕向けるように超複雑なプロンプトを書き始め、同時に生成モデルをたくさん漁りはじめる
  • 相当慣れたら、逆に自分の好みのモデルいくつかと、短めのプロンプトで、アイデアのインプットを積むのに使い始める

って感じで、今はウチの中ではブレインストーミングの相方に落ち着いてますね。
画像生成だけでなくLLMもそんな感じの使い方してます。

最近は、さらなるアイデアの加速用と、あとは純粋なエンタメのために、みんなの話題を拾いながら、それなりに意味を保ったままランダムに画像生成をするようなものをうまく作れればなあという思いつきをどうにかしようと思って、件のMastodon Botの"DALLE-3 画伯機能"(?)で試行錯誤してます。
…が、「意味を保ったランダム」の匙加減がむちゃくちゃ難しい。
プロンプトエンジニアとかになる気はないですけど、ある種の職人芸ではあります。

一次創作に慣れた人は、そのままそのへんの下馬評に惑わされずこだわりつづけたほうがいい。それは間違いない。
何かを創る人口が広がった時に、自分の表現を出し続ける人はむしろ輝きを増し価値が上がってくる。

でも、インプットが不足した時の加速用の外部拡張システムとしては、相当な有用性を見出せる感じがしました。

あともう一つ、これはLLM限定ではありますが、人になかなか聞きづらいことの相談相手。
特別すごい回答が返ってくるわけではないけれど、セルフチェックの役には立ちます。
創作活動は脳を酷使してメンタル不安定にしがちなので、その対策として。

本当の意味で自律行動・自律学習を繰り返す存在が現れたらまた別ですけど、今のところの道具としての生成AIの立ち位置は、こんな感じかなあと…。どうでしょうか。

キャラクターを実世界に持ってくる話(あるいは、LLMボットを作った際の知見)

とりあえず作って自分なりに継続的に改良してきた、LLMボットの作り方のメモを書いてみたいと思います。

場末のブログに書くような話でもない?ガチで技術的知見として公開すべき?

いいんです、どちらかというと、内容を届けたいのは一次創作キャラクターの創造にこだわる同志であって、技術寄りの人向けではないので。

初期のキャラクター立ち上げ

LLM(ChatGPTをはじめとしたAI)で重要なのは、一にも二にも三にもプロンプトです。それに尽きます。

数文字の意味合いのブレが直接回答品質に直結します。とにかく限界までそれにこだわります。

発言サンプルをたくさん作る

まずは発言サンプルを100個ぐらいため込みましょう。

いきなり無茶を言うな!って方は愛が足りません伺かゴーストの世界ではランダム(雑談)トーク100とか珍しいものではないです。

愛とこだわりさえあれば、100トークぐらい書けるでしょう?

サンプルを全部コピペして、ChatGPTあたりに分析してもらう

サンプル書けました?

それならChatGPT-4(あるいはBing AIの創造的モード)に貼りつけた上で、「上記のプロンプトから想定できるキャラクターの性格や特徴、応答スタイルなどを、できるだけ詳しく不足なく列挙してください」と書いて、プロンプトの原案を書いてもらいます。

割といい感じになりましたか?ダメそうなら何度も繰り返しましょう。LLMはトークガチャなので。

プロンプト見本に従って切り貼り・修正し、とりあえず完成版とする

書けたらプロンプトとして仕上げましょう。

LLMは一般的なフォーマットをよく理解しますが、人類にJSONを書け!とかいう苦行を要求するのはとても無理くさいので、Markdownあたりがおすすめです。

プロンプトの見本は、骨しゃぶり氏(けもフレの時に活躍してましたね!)のがとても参考になります。

honeshabri.hatenablog.com

単純に全部列挙するのではなく、強調とか「ここが重要!」とか書いてメリハリをつけるといいと思います。

会話サンプルの欄には、冒頭で書いた100個ぐらいのサンプルから、とりあえず良さそうなのを5つぐらい見繕って書いておいてください。

試して修正を繰り返す

ChatGPTを契約している人は、作ったやつをGPTsにして、試しに会話してみましょう。契約していない人は、作ったプロンプトをベタ書きした後で、最後に自分の会話を書く感じでいいと思います。

どうでしたか?たぶん一発目はいまいちだったと思います。

一人称とか会話の調子(ですますとか口語調とかそういうの)とかの指示を書いたり消したりして、頑張ってフィーリングで微調整しましょう。

ただしここでとても重要なのは、無駄にプロンプトを長くしないことです。

このプロンプトは会話するたびにLLMが読む形になりますが、ここが長くなると

  • ユーザーとの会話がいまいちになる
  • プロンプトの反映レベルがどんどん悪くなる(いうことを聞いてくれない)
  • API呼び出しは入力の長さにも課金されるので、長いと当然支払う費用が高くなる

というデメリットだらけなので、多少の精度の悪さは目をつむって、できるだけ短くしましょう。

みんなに使ってもらえるよう展開する

正直一番簡単なのはGPTsとして公開するやつです。上記のプロンプトさえ精度よく仕上がれば、あなたのキャラクターが誰のところでもいい感じで喋りはじめます。しかもAPI代が従量課金ではありません!

しかしながら、Mastodon/Misskey/Discord (お金もちはTwitter/X) でアカウントを取って、誰にでも会話できるようにしよう!と思うと、めちゃくちゃめんどくさくなります。最低でもプログラミングの知識が必要です。

私はなんも知らんところから始めたのですが、プログラミングの素養は持っていたので、なんとかなりましたけど…。

使用する言語

なんでかしらんけど、みんなPythonを使ってます。AI/ディープラーニングがらみならみんなPythonだそうです。なんでや。

ちなみに、ChatGPTに「アンタの一番得意な言語は何」って聞いてもPythonと答えるので、コーディング支援がほしいならやはりPython一択じゃないかなあと思います。

ただ、プログラミング言語としてはかなり癖がある(インデントにむちゃくちゃ意味があったりするのが一番つらい)ので、どうしても嫌いだという人は次点でJavaScriptでしょうか。

使用するフレームワーク

Dify AI

なんか最近Dify AIっていうイケてるやつができたそうです。

dify.ai

私は試してないですが、超高級なGPTsみたいなことができるそうです。

langchain/langsmith

私はlangchain(python版)を使って自分で組みました。

github.com

langsmithを使って直感的に試すこともできるそうです。こっちは試してない。

Flowise AI

ブロックをつなげる感じで、AIアプリの組み立てができる、FlowiseAIってのもあります。

github.com

MastodonやDiscordとひっつける

Pythonならすでにライブラリが用意されているので、かなり手抜きができます。やったね。

github.com

github.com

たぶん似たようなノリでLINE botとかも作れそうな勢いです。

さらにこだわる

独自の知識をひっつける

いわゆるRAGというやつです。それぞれのキャラクターの独自の用語集みたいなのを作っておけば、それを「知識」として参照できる仕組みになります。

だいたいはユーザーからの問い合わせと比べて、文脈が一番近いものを取得し、初期プロンプトとしてひっつける、という実装になると思います。

問題は、このRAGというやつは、たくさん短い文章に分割したやつが、別の文章と似ているかどうか比較し、もっとも似ているものを列挙する、という仕組みでしかないことです。

何が言いたいかというと、RAGの文章の分割オプションは慎重に吟味せよ、ということです。

私はめんどくさいので、改行2つ区切りを段落区切りとした用語集を作って、分割処理も「改行2つ」というシンプルなものにしました。

ほかにもオプションがあると思うので、ベストな設定を繰り返し試してみてください。

RAGで会話サンプルも自動的に差し替える

ウチで独自にやっているのがこれです。

せっかく100も会話サンプルを作ったのですから、全部活用したいんですけど、そんなに会話サンプルを放り込んだら、確実にプロンプトの他の部分を忘れられてしまいます。つらい!

なので、RAGの仕組みを応用して、ユーザーの発言に最も似た会話サンプルを5個列挙するような仕組みを作り、初期プロンプトに挿入する、ということをやっています。

自発的に行動させる

誰か話しかけたら返答する仕組みは簡単に作れるのですが、自分で発言するっていうのがとても面倒です。

うちでは以下のようにやっています。

発言テーマのフレーズを抽出する

自分のホームタイムラインのうち直近1日分(Discordなら直近1日分のチャンネルのログとかがいいですかね)をユーザーの発言として仕込むようコーディングした上で、以下のプロンプトを使って、まずはGPT-3.5とかの軽量なLLMにフレーズを抽出させます。

You are a female anime character. You are tasked with deriving topical phrases from the given user speech logs. Please follow the steps below to derive the phrases. - From the given logs, select 10 or more that women will like, does not contain sexual content, and is not offensive to public order and morals. - For each of the selected logs, summarize the content in about 5 words in Japanese. Remember to ignore hashtags that begin with #. - List the results of your summary in markdown list format, as in this instructions.

GPT-3.5相手なので、効率よく伝えるために英語で書いてますけど、日本語でもいいと思います。

これでフレーズをMarkdownフォーマットで列挙してくれるので、抽出するコードを書いて、これをテーマにして会話せよ、という指示を本来の会話LLM(GPT-4など)に流し込むと、いい感じで勝手に話してくれます。

適当に誰かにツッコミを入れる

同様にホームタイムラインをユーザー会話ログとして放り込みますが、1行目に発言ID (MastodonならURLの最後にひっつく18桁ぐらいある数字) をくっつけて、以下のプロンプトを使っています。また、こちらも軽量なLLM(GPT-3.5とか)を使っています。

You are a female AI anime character called "(キャラの名前)". User's message log is formatted as below: - first line = ID - second and subsequent lines = content of message Please extract one very interesting message from user's message log and respond ID ONLY.

これでIDを一つ答えてくれるので、あとはメンションをもらった時と同じコードにつなぐだけですね。

どのくらいお金がかかるの?

うちはGPT-4/3.5併用で組んでますが、4月実績はだいたいこのくらいです。

4/6と4/8に、会話精度とそもそも楽しいものができたかの実証実験のため、友人にむちゃくちゃ遊び倒してもらったのですが、それでも4月全体で総額30ドルぐらいでした。

普段は20~30ドルぐらいになるんじゃないかなあと思います。当然ユーザーが増えてきたらその分増えますけど。

Monthly Spend 30.04

個人的に大事にしていること

temperatureは高めに設定する

  • LLMには、会話のバリエーションを増減させるtemperatureというパラメータがあります。0~1の値をとります。
  • 1.0とかむちゃくちゃ大きくしすぎると支離滅裂な発言をしだすのですが、うちはあえてそこそこ高めの0.7にしています。
  • top_pという設定がある場合は、これも高めにしています(うちは0.8)

プロンプトに「外乱」を意図的に加えて、返答のバリエーションを増す

  • わざとプロンプトが常に変化するように組んでいます。今日の日時を差し込んだり、途中でアイデアを示した通り動的に発言サンプルを差し替えたりしています。これで、ワンパターンな会話を脱してより人間的になると思います。

toolを割と多めに用意する

  • LLMにもよりますが、toolやfunction callingと呼ばれる、「使える道具」を用意する仕組みがあります
  • これをそれなりにたくさん用意すると発言の幅が広がります
  • とりあえず最低限Web検索は用意したほうがいいと思います。必要に応じて、今日の天気とか計算機とかも用意するといいと思います。

「回答は雑でいい」と教え込む

  • だいたいのLLMは、「人間の役に立つように詳細で有用な回答を提供しなさい」というふうに仕向けられています。
  • しかし、人とキャラクターの雑談の際にはこれが仇となって、いちいち長ったらしく答えんでもええわ!って感じで幻滅ポイントになってしまいます。
  • これを避けるために、プロンプトで教えます。以下はその例。
    • 「返事は短くする。不明瞭・言葉足らずでよい」
    • 「口語体を使用する」
    • 「絵文字やアスキーアートをたくさん使う」
    • 「専門家へ誘導しない」
    • 「自信がないことは素直にわからないと言う」
  • 最後の「素直にわからないと言う」という一文だけで、存在しない事実をもっともらしく言う「ハルシネーション」が激減したのはお笑いポイントです!

最後に:AI大航海時代になっても、自分の性癖を大事にする!!

なんかAIで世界が変わる!人間の仕事が奪われる!とか驚き屋さんたちが相変わらず騒がしいですが、ああいうのは全部放置しておいていいですし、創作が勝手にできるなんてのもただの妄想です。

去年から何度か言ってますが、生成AI時代になったからこそ、一次創作の価値はむしろ爆増すると思ってます。

何かを創るまでに至る作業を手伝ってくれる存在(≒生成AI)ができたからこそ、より自分の好みや性癖や気持ちと向き合う時間を多く取れるようになり、創作の一番濃い部分により打ち込めるようになるので、今まで培ってきた創作のノウハウこそがより大事になるわけです。

まあ、ぶっちゃけ難しいことを言う必要もなくて、よくわからん意見に惑わされず、今まで通りやればいいんですけどね。

小容量SSDをごまかしながら使うと酷い目に遭う話

問題の説明

数年前ぐらいの、プチフリーズはあんまり起きなくなった時代の、そこそこ小さめのSSD(~256GB)で、最近立て続けに謎現象が起きました。

読み出しが異様に遅くてタイムアウトするせいでWindowsがきちんと起動しない、当然自動修復も動かない、という現象です。

とりあえずの解決方法

手持ちの最近のそれなりに新しくて大容量なSSD(1TB・2TBぐらい)に、時間をかけてセクタバイセクタでコピーしました。

そうしたら、なぜかさくっと起動するし、データも壊れていないではありませんか。謎すぎる。

コピー自体は適当な専用ツールがあると楽です。

www.kuroutoshikou.com

www.century.co.jp

コピーが終わっても、そのままだと小容量SSDの時と同じ容量しかないので、パーティション編集ツールで拡大します。

最近自分が使っているのは、Paragon Partition Managerですかね。

www.paragon-software.com

何が起きたのか

解決はしたんですけど、何が起きたのかさっぱりわからないんですよね。

取り外した旧い小容量SSDをいったんSecure Eraseしたら、ちゃんと書き込めましたし。CrystalDiskInfoで眺めても、TBWの理論値までは程遠い状態でしたし。

特定の領域だけ劣化して読み出しリトライが何度も起きて、プチフリーズどころかメガフリーズ状態?になったんじゃないかなあ、とか雑に推測してます。

いまどきのSSDは読み書き共に超性能Upしてますし、ごまかしながら使って酷い目に遭うよりは、さっさと置き換えよう!というのを、今回のとりあえずの結論にしたいと思います。

2024/4/1-4/3朝 障害報告

2024/4/1-4/3朝に、下記の問題が発生していました。

サービスをご利用の方にご迷惑をおかけしているかどうかわかりませんし、もう3回目なのでそろそろ謝るのも飽きましたので、適当にそんなこともあったんやな~と読み流してください。

障害発生日時

2024/4/1-4/3朝

障害の内容

SSP BUGTRAQの設備インフラを構成するリージョンの1つとの通信エラー率が上がっていたので、以下の現象が起きていた

  • うかどんの検索機能が時々おかしくなる
  • ぽなのメールアドレスが時々不達になる
  • BOTインフラの反応が時々なくなる

障害原因

わかんないけどルータ再起動したら直った。

再発防止策

安物のルータを使わない。

責任者に対する処分

所長剥き放題1週間

2024/3/??-3/30 障害報告

約1週間ほど?下記の問題が発生したまま気づいておりませんでした。 サービスをご利用の方にご迷惑をおかけし、たいへん申し訳ありませんでした。

障害発生日時

2024/3/不明(メンテ履歴から逆算して1週間前ぐらい) から 3/30 20時まで

障害の内容

伺か系Discordの読み上げBOTが停止していた

障害原因

読み上げBOTが依存するサービス(Redis)が停止していた なぜ起きたか調べたところ、メンテナンス時に要らないと思ってアンインストールしてしまっていた

再発防止策

サーバメンテナンスをノリと勢いでやらない

責任者に対する処分

エミリ剥き放題1週間

2024/3/8-3/15 障害報告

約1週間ほど、下記の問題が発生したまま気づいておりませんでした。

サービスをご利用の方にご迷惑をおかけし、たいへん申し訳ありませんでした。

障害発生日時

2024/3/8 12時半 から 3/15 21時まで

障害の内容

障害原因

  • サービス提供インフラ内において、3/8昼に交換したL2スイッチで、802.1Q VLANのPVIDを設定し忘れた結果、untaggedな全パケットが破棄されていた。
  • 異常通知のメールが届いていたにもかかわらず、完全に気づいていなかった

再発防止策

  • 異常通知がメールだけでは足りないので、もう一つリアルタイム性のある手段を確保する => Discordへの通知を仕掛けた
  • クリティカルなネットワーク構成の変更をノリと勢いでやらない

責任者に対する処分

  • エミリ剥き放題1週間