書け、そして肉付けだ

肉付け その1

パラ犬
でもこれ、さすがに余計なことを書きすぎというか。
いい感じにちょっと書き足してくれるだけでいいんだよ。ほぼ完成形なんだから。
エルザ
そのあたりの調整をしていきましょうか。
パラ犬
文字数の指定とかできたほうがいいね。
エルザ
仕様を詰めて行きましょう。どんな指定方法が使いやすいと思いますか?
パラ犬
文字数をいちいち入力するのはめんどくさいな。
エルザ
文章生成AIには基本的に文字数という概念はありませんから、細かく指定してもその通りの字数になるわけではない事は覚えておいてください。
パラ犬
しょせんはトークンの塊か。まあ、大規模言語モデルは、数字は扱えても数値は専門外だから。
エルザ
とはいえ、新しいモデルではそういった弱点を補うために、内部でPythonコードを実行したり連鎖思考で検証を行ったりと、どんどん進化しています。
パラ犬
AIの進化は速い。
一年前のchatGPTの数値の扱いなんて、こんなレベルだったというのに。
古いchatGPTでは小数点以下の数値を正しく扱えなかった
シャーレイ
何一つ合ってないのに堂々としてるから騙される人が出てもおかしくないな、こういうの。
てか、システムの穴探すの好きすぎだろ。
エルザ
AIは所詮、道具にすぎません。それはいくら精度が上がろうとも変わりません。
AIに振り回されることのないよう、思考停止しないようにしましょう。
シャーレイ
で、何の話だっけ?
パラ犬
とりあえず、文字数はざっくりでいいや。
どうせこっちも欲しいのが何文字とかよくわかんないし。
入力はこんな感じで。
文字数を指定するセレクトボックス
index.html【追加】
<div class="input-group">
    <label for="charLimit">出力文字数の目安</label>
    <select id="charLimit">
        <option value="200">200文字程度(簡単な描写)</option>
        <option value="500" selected>500文字程度(ワンシーン)</option>
        <option value="1500">1500文字程度(1話・短)</option>
        <option value="3000">3000文字程度(1話・長)</option>
    </select>
</div>
エルザ
画面から取得した値を文字数として指示に追加します。
ついでに本文以外の余計なものが出力されないようにしておきましょうか。
script.js【変更後】
const prompt = `
入力されたあらすじを元に小説もしくは小説のワンシーンを執筆しなさい。

### 制約
* 文字数 : ${charLimit}文字程度。
* 出力形式 : 小説の本文のみ。(前書きや解説は不要。思考過程を出力しない)
* 装飾 : Markdown形式(# や ** など)やHTMLタグなどの記号による装飾は使用しないこと。

### あらすじ
${inputText}
`;
パラ犬
結論から言うね。その判断、凄く**正しい** 。
シャーレイ
chatGPTの話し方やめい。

肉付け その2

パラ犬
あと、解釈違いが甚だしい。
このキャラはそんな事しないと言いたい。
エルザ
あらすじだけでは当然そうなりますね。
シャーレイ
人間だって、いきなりあらすじだけ渡されて小説にしろって言われても困るしな。
設定資料ぐらいよこせって。
パラ犬
そのへんの指定もできるようにしたい。
エルザ
キャラクター設定表でも作りますか?
パラ犬
キャラクターだけじゃなくてシチュエーションも解釈違いが出そう。
エルザ
各キャラクターの性格と一人称、世界設定、対象のシーンの状況設定、といったところでしょうか。
シャーレイ
際限なく増えて行くパターンだ、これ。
エルザ
まあ、仕様を決める際にグダグダになるのは普通ですから。
パラ犬
そんなにたくさん入力しなきゃいけないのはなー。
資料作るほうが手間っしょ。長編書くわけじゃないんだから。
シャーレイ
わがままだなあ。
エルザ
入力は任意にしておきましょうか。
定型入力ではなくキャラクター設定欄と舞台設定欄という枠で、フォーマットは自由に。
パラ犬
あと、文体の指定とかもしたい。
シャーレイ
まーた際限なく増やす。
エルザ
他には?
パラ犬
「そこはそうじゃねぇよ」って思ったところに指摘入れるとか。
エルザ
もう指摘全般でまとめてしまいましょうか。
パラ犬
それでいいや。面倒なときは入れなくていい、がっつり書きたいときは好きなだけ書くってことで。
設定・補足欄
index.html【追加】
<div class="input-group">
    <label for="settings">設定・補足(任意)</label>
    <textarea id="settings"></textarea>
</div>
エルザ
任意とのことですので、入力されている時だけ「設定・補足」の見出しをつけるようにしましょう。
script.js【変更後】
let promptSettings = "";
if (settings) {
    promptSettings = `### 設定・補足\n${settings}`;
}

const prompt = `
入力されたあらすじを元に小説もしくは小説のワンシーンを執筆しなさい。

### 制約
* 文字数 : ${charLimit}文字程度。
* 出力形式 : 小説の本文のみ。(前書きや解説は不要。思考過程を出力しない)
* 装飾 : Markdown形式(# や ** など)やHTMLタグなどの記号による装飾は使用しないこと。

### あらすじ
${inputText}

${promptSettings}
`;

完成

エルザ
それでは、実行してみましょう。
パラ犬
これがこうなって、こうじゃ!
完成
パラ犬
完成じゃ!
エルザ
完成ですね。
汎用的に使える物になったと思います。
シャーレイ
本当にやりやがった……
怠惰を極めるとこうなるのか。
パラ犬
よい子のみんなも、この講座を参考にしてやってみてね。
シャーレイ
せんわ。
パラ犬
よーし、これで小説が書けるようになったぞー。
シャーレイ
書けてないだろ。
エルザ
書けてませんね。
パラ犬
でもやっぱりコレジャナイから、自分で書いたほうがいいや。
エルザ
でしょうね。
おしまい。