見出し画像

【開発ログ】ローカルLLM プロンプト 日本語→英語変換|固定値を毎回こぼす問題

画像生成で地味に面倒なのが、プロンプトの英訳です。頭の中のシーンは日本語で浮かんでるのに、Anima(画像生成モデル)に渡すのは英語のタグ列。この「日本語で考えて、英語に組み直す」をずっと手でやってて、1枚ごとに小さくすり減る感じがありました。

で、日本語でシーンを一文打ったら英語プロンプトを返してくれる変換ツールを、手元のローカルLLM(LM Studio に Mistral-Nemo 12B を載せたもの)で作ってみたんです。今日はその作業ログ。📝

言っておくと、この変換ツールを看板商品にしたいわけじゃないです。作って売るところまでを少しでも軽くするための、入口の道具。ただ作ってる途中で「小型LLMに振っていい仕事と、振っちゃダメな仕事」の線がくっきり見えて、これが変換ツールの外でもけっこう使える話だったので、そこを書きます。💻

なぜローカルで動かすのか

最初はクラウドのAIでいいと思ってました。日本語を英語プロンプトに直すだけなら、大手のAIチャットはむしろ得意です。

ただ、生成する画像の用途によっては、変換そのものをクラウド側で断られることがあります。中身はここには書きませんが、この事業の題材だと「その用途はお手伝いできません」で止まる場面がある。文章を右から左に変換するだけの処理でこれに引っかかるのは面倒なので、だったら自分のPCの中で完結させよう、と。それがローカルにした理由です。💦

LM Studio に Mistral-Nemo の12Bモデル(Q4という軽量版)を載せて、生成はだいたい毎秒43トークン。会話用途なら十分速い。ただ、この「12BのQ4」っていう身の丈が、後半でしっかりボロを出します。🔧

つまずき1:指定した日本語の見出しを、勝手に英語に直された

まず出力の形を決めました。「変換結果は『▼ ポジティブ』『▼ 補足』って日本語の見出しを付けて返して」とルールに書いた。あとで自分が読み返すとき、日本語の見出しのほうが目で探しやすいので。

返ってきたのは『▼ Positive』『▼ Supplement』。見出しまで英語に直されてました。💦

たぶん、中身のプロンプトが英語だから、モデルが「この返答は英語で書くやつだ」と判断して、見出しごと英語に寄せた。気を利かせた結果です。

直しはシンプルでした。「本文は英語、見出しは日本語、英語見出しは禁止」と書き足して、正しい形のお手本(few-shot)をシステムプロンプトに一緒に入れる。禁止の言葉を重ねるより、正解を1個見せるほうが小型モデルには効きました。ここは最後まで何度も使う手になります。✨

つまずき2:書いてない要素を勝手に足す・文脈を誤解して矛盾する

次のはもう少し厄介。「窓辺に立っている女性」とだけ渡すと、出力のどこかに「椅子に座っている」が紛れ込む。立ってるのか座ってるのか、プロンプトの中で矛盾してるんです。👀

根っこはつまずき1と同じでした。LLMは穴を埋めるのがうまい。書いてない小物やポーズや背景を「たぶんこう」と先読みして足してくる。創作としては優秀な性格ですが、忠実な変換機としては余計なお世話です。💦

対処はまた few-shot。「書いてないものは足さない、最小限の変換」のお手本を何個か見せて、足していいのは表情と光と背景の雰囲気くらいまで、と線を引きました。立つと座るが同居する事故は、これで消えました。🧩

……ここまでは「まあ指示の書き方でどうにかなるな」と思ってたんです。本気でボロが出たのは、この先でした。🔧

つまずき3:固定のネガティブプロンプトを、毎回ちょっとずつ崩す

画像生成には、毎回まったく同じものを入れたい「固定のネガティブプロンプト」があります。一字一句、いつも同じ文字列であってほしい。📌

これをモデルに任せたら、毎回びみょうに違う。単語が1個抜けたり、スペルが変わったり。ためしに同じ入力を10回投げたら、10回とも別のネガティブが返ってきました。全部ちょっとずつズレてる。💦

ここでやっと分かった気がしました。LLMは確率で次の単語を選ぶ仕組みです。「だいたい同じ雰囲気の文」を作るのは得意でも、「一字一句ズレずに同じ文字列」を毎回吐くのは、そもそも向いてない。柔らかく作る力と、正確にコピーする力は、別物なんですよね。💡

なので方針を変えました。ネガティブはLLMに書かせない。あの固定文字列は別ファイルに置いて、そこからコピペする。LLMには、創作がいるポジティブ側だけを任せる。単純な役割分担です。🔥

つまずき4:絶対に入れたい必須タグを、複雑なシーンで丸ごと落とす

最後に、いちばん怖いのが出ました。👀

作品全体で絶対にブレさせたくない「必須の共通タグ」があります。品質と画風のベースになる、毎回入るはずの数語。シンプルなシーンなら、ちゃんと入る。でも登場人物が増えたり背景が込み入ったりすると、この数語をまるごと落とす。💦

なんで複雑なときだけ落ちるのか。たぶん、入力が重くなるほどモデルの注意力がそっちの処理に食われて、「毎回入れるお約束」が後回しになって、こぼれる。人が焦ってるときほど基本の確認を飛ばすのと、近い気がします。

結論はまた同じでした。この必須タグもLLMには任せない。定数ブロックに入れておいて、生成に進む前に「その数語が入ってるか」を自分の目で見る。作業の流れにチェックを1個ねじ込んだんです。最後に人の目で1回見る。地味だけど、これがいちばん外さなかった。👀✨

システムプロンプトは、こういう対処を重ねて v0.1 から v0.7 まで7回書き直しました。最初は「強い言葉で禁止する」で殴ってたのが、途中から「そもそもLLMに書かせない」に変わってった。書き直しながら、あ、方針ずれてきたな、と自分でも思いました。🎯

ここで見えた教訓:AIに「創作」は任せて、「定数」は任せない

7回書き直して、線が1本はっきりしました。✏️

小型のローカルLLMは、創作と翻訳はちゃんとうまい。日本語のシーンを汲んで、英語の自然な言い回しに直す。この柔らかい仕事は12Bでも十分戦えます。💻

でも「一字一句ズラさず毎回同じものを出す」のは、ほぼ確実にこぼす。単語を落とす、スペルを変える、複雑だと丸ごと忘れる。モデルの出来が悪いんじゃなくて、確率で言葉を選ぶ仕組みそのものが、そういう正確さに向いてないんだと思います。💡

だから、こう分けました。

▼ AIに任せる → 創作・翻訳・雰囲気の補完
▼ AIに任せない → 一字一句合ってないと困る固定値(ネガティブ、必須タグなど)

正確さがいる部分は、LLMの出力に混ぜない。コピペ用の定数として外に出して、生成前の目視チェックで押さえる。正確さをモデルの機嫌に預けるのをやめて、作業の流れ側で持つ。それだけの話です。⚙️

「AIに全部やらせれば速い」じゃなくて、「得意なとこだけ渡して、苦手なとこは仕組みで守る」。この分け方にしてから、やっと安心して使えるツールになりました。🔬

この気づきは、変換ツールの外でも効く

ここまで画像プロンプトの変換機の話でしたが、この「創作は任せる/定数は任せない」の線引きは、たぶん題材を選びません。✨

たとえば定型文の自動生成。メールのテンプレ、契約まわりの決まり文句、送り状の固定文。ああいう「絶対に変わっちゃいけない一文」をLLMに毎回書かせると、いつか一字ズレます。そこは固定で差し込んで、LLMには前後の自然な文だけ書かせればいい。業務の自動化でも発想はまったく同じです。📝

どこを任せて、どこは絶対に任せないか。これを先に決めてあるかどうかで、自動化ツールの信頼性はごっそり変わります。私はこの案件で一回痛い目を見て、やっと身に染みました。💦


🐾 ノラの「秘密の研究室」(メンバーシップ)

メンバーシップでは、普段の検証で使っている完全プロンプトや数値レシピなどの裏側レポートを全公開中!
さらに、Discordでは開発したゲーム・自作LoRA・NSFWイラストの配布や技術レポート・実際の収益の公開等もしています。
※ Discordのロール付与は基本即日対応しています🐾

👉 月額500円で全コンテンツ読み放題&配布物もらい放題
犬小屋のメンバーシップはこちら


💬 無料Discord「🐾ノラの副業ラボ」

誰でも参加できる無料のDiscordサーバーも運営しています🐾

👉 無料Discordはこちら


💼 お仕事のご依頼について

LoRA制作・イラスト/CG制作・AI生成ツールやパイプラインの構築/相談・記事執筆などを承っています。
👉 ご依頼受付ページはこちら


#AIイラスト #ノラのAI研究室 #生成AI #StableDiffusion #ローカルLLM #LMStudio #プロンプト #Anima #副業

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