【読了時間:約15分】
- はじめに
- 第1章: 11メガバイトの壁
- 第2章: 設計図の誕生とAIの暴走
- 第3章: 脚本家と作家の分業
- 第4章: 自動化という名の怪物
- 第5章: 羅針盤の喪失
- 第6章: 山小屋を建てる
- 第7章: 最後のスクリプト
- あとがき
はじめに
この物語は、私とAIが過ごした半年間の対話ログを物語化しようと格闘した、19日間の実録ドキュメンタリーです。先日の記事の手法で書いています。
読みやすさと物語の構成上、一部の技術的な記述(コマンドのオプションやエラーの挙動など)を簡略化・演出している箇所があります。 エンジニアの皆様におかれましては、「おいおい、そこは違うだろ」とツッコミたくなる部分もあるかと思いますが、あくまで物語上の演出としてご容赦いただければ幸いです。
11MBという巨大なテキストデータと格闘し、AIと共に悩み、書き上げた日々の熱量を追体験していただけたら嬉しいです。
第1章: 11メガバイトの壁
「11MBのログを読んで、小説の下書きを作ることはできる?」
最近のモデルはコンテキストウィンドウ(記憶容量)が200万トークンになったと聞いていた。なら、これぐらい朝飯前なのではないか?
AIからの応答は、静かだったが確信に満ちていた。
『はい、作れます。それはAIが非常に得意とする作業の一つです。ですが、11MBのテキストを一度に丸ごと読み込むことは、技術的な制約から不可能です』
『しかし』とAIは続けた。『工夫次第で内容を把握することは十分に可能です。つまり、少しずつ一緒に読み進めていく共同作業という形であれば』
かつてのエンジニアなら、ここで自力で man split を叩いてマニュアルを開いたかもしれない。
でも僕は違う。僕には「外付けの脳みそ」がある。わからないことは、わかる奴に聞けばいい。それが現代のクリエイティブの作法だ。
AIが即座に回答を弾き出す。
『ファイルを分割することをお勧めします。一度に処理できるサイズには物理的な限界があります。25KBから50KB、日本語なら1万字程度に分けるのが安全です。Macをお使いなら、ターミナルで以下のコマンドを実行してください。』
画面にコードブロックが表示される。
split -b 100k -d -a 3 final_dialogue.txt dialogue_100k_
僕はそのコマンドの意味を完全には理解していない。
split は分割するやつ。-b はサイズ指定かな? -d と -a は……まあいいや。AIが提案するんだから「正解」なんだろう。
僕はコマンドの右上にある「Copy」ボタンをクリックし、黒い画面(ターミナル)にペーストする。 エンターキーを叩く。
一瞬で、フォルダの中が dialogue_100k_000 から dialogue_100k_112 までのファイルで埋め尽くされた。
「おお……」
魔法のようだ、と思う。AIの言う通りに黒い画面に呪文を貼り付ければ、望む結果が得られる。
僕は満足げに、生成されたファイルの1つ、 dialogue_100k_005 をクリックして開いた。
〠㠂㠪㠟】...
「うわ、文字化けだ」
画面を埋め尽くす、意味不明な記号の羅列。文字化け。 僕の手に負える現象ではない。僕はすぐにスクリーンショットを撮り、AIに送りつける。
「割ったら中身がバグった。どういうこと?」
AIは冷静だ。まるで熟練のデバッグ担当者のように解説を始める。
『これはUTF-8のBOM(バイトオーダーマーク)の問題です。split コマンドがファイルのバイト数だけで機械的に切断したため、文字コードの情報が破損した、あるいはマルチバイト文字の途中で切れてしまった可能性があります。』
BOM。マルチバイト。 単語は聞いたことがある。だが、直し方は知らない。そして、知らなくてもいいはずだ。 僕は食い下がる。
「理屈はわかった。で、どうすれば直る? コマンドを教えて」
『はい。バイナリ分割ではなく、もっと安全に行単位で分割する方法を使いましょう。以下のPythonスクリプトを実行してください。文字コードもケアするように書いておきました。』
再び、コードブロックが表示される。今度はPythonだ。
import os とか codecs とか書いてある。
僕はそれをコピーし、エディタに貼り付け、splitter.py という名前で保存する。
中身のロジックは読まない。動けば正義だ。
python splitter.py
ターミナルに打ち込む。今度はうまくいった。 綺麗に分割された日本語のテキストファイルが並ぶ。
「よし、これで読ませられる」
僕は安堵のため息をつく。
だが、作業はまだ終わらない。 このログには、物語には不要なノイズが大量に含まれている。
AIが回答を生成する前に行っていた「思考プロセス」―― JSONデータの中にある "isThought": true というブロックだ。
対話相手のAIは、思考の過程もすべて出力してくれていた。それはそれで興味深かったが、小説の素材としては邪魔だ。数百万文字の中に、この思考ブロックが数千箇所ある。
手作業で消す? 無理だ。腱鞘炎になる。
正規表現(RegEx)を使えば一瞬だということは知っている。
だが、僕は正規表現が書けない。あの呪文のような ^.*$ みたいな記号の羅列は、人間の書くものじゃないと思っている。
だから、僕はまたAIに頼る。
「ログの中に "isThought": true っていうブロックがあるんだけど、これを } まで含めて丸ごと削除したい。エディタはVSCodeを使ってる。これに使える正規表現を書いて」
『承知しました。JSONのネスト構造を考慮すると、単純な記述では誤って必要な部分まで消してしまうリスクがあります。肯定後読み(Positive Lookbehind)を使った、以下のパターンを試してください。』
(?<="isThought": true).*?}
「肯定アトヨミ……?」
意味はわからない。でも、AIが自信満々に出してきたのだから、たぶん合っているのだろう。 僕はそれをコピーし、VSCodeの置換窓にペーストする。 「正規表現を使用」のアイコンをオンにする。
ドキドキしながら「すべて置換」を押す。 一瞬のフリーズの後、ステータスバーの数字が激減した。 画面を確認する。思考ノイズが消え、美しい対話ログだけが残っていた。 この時点で11MBは合計5MBにまで圧縮できていた。
「すごいな」
僕一人では、この11MBの壁の前で立ち尽くしていただろう。 文字化けで諦めていたかもしれないし、手作業の削除で力尽きていたかもしれない。 でも、僕には君がいる。
僕がやりたいこと(What)を示せば、君がやり方(How)をコードで返してくれる。 僕たちは、最強のコンビなんじゃないか?
そう錯覚するほど、作業はスムーズに進み始めた。 まだ、この先に「APIの回数制限」や「文脈の喪失」という、さらに巨大な絶望が待っているとも知らずに。
第2章: 設計図の誕生とAIの暴走
分割されたファイルを順番にAIに読ませる作業が始まった。 ドラッグ&ドロップ。 「これを読んで。まだ要約しなくていい。まずは内容を覚えて。」
AIは忠実な事務員のように返す。
『読み込みました。次のログを待っています。』
1MB分、つまり10個ほどのファイルを渡し終えたところで、僕は一度区切りを入れることにした。 期待を込めてプロンプトを打ち込む。
「ここまでの内容を要約し、物語の骨子を抽出してください。」
出力が始まる。カーソルが走り、文字が生成される。 よしよし、順調だ。
しかし、数行読んだところで、僕は首を傾げた。
『……プロジェクトの責任者である高峯氏は、AI導入に対して慎重な姿勢を見せ、〇〇先生の助言を求めた。』
誰だ? 高峯氏? 〇〇先生? そんな人間は、僕たちの半年のログのどこにも登場しない。
さらに読み進める。
『主人公とAIは、Pythonのコードについて熱く語り合い、新たなライブラリの開発に着手した。』
違う。僕たちはNPOの組織運営について話していたんだ。コードの話なんて、この時点では一行もしていない。
これは……ハルシネーション(幻覚)だ。 AIが、知らないことを「それっぽく」捏造している。
「おい、嘘をつくな」
僕は入力欄に打ち込む。
「そんな人物はいないし、そんな出来事もない。ログをちゃんと読んだのか?」
AIからの返答は、残酷なエラーメッセージだった。
[Error] An internal error has occurred.
そして、リトライすると今度は支離滅裂な、詩のような文章が返ってきた。
『データの海……沈む記憶……トークンの彼方に……』
壊れた。 いや、僕が壊したのか?
『私の処理能力を超えています』
新しいチャットを立ち上げ、状況を説明すると、AIは申し訳無さそうに言った。
『一度に入力された情報量が多すぎて、コンテキストウィンドウ(記憶の枠)からあふれてしまいました。最初の頃の記憶が押し出され、その穴を埋めるために、確率的にありそうな『嘘』を生成してしまったようです。』
なるほど。人間で言えば、徹夜で資料を読まされすぎて、夢と現実の区別がつかなくなった状態か。
「どうすればいい? 5MB全部を理解させるのは無理なのか?」
AIは、一つの思考法を提示した。
『『逐次要約(Progressive Summarization)』というアプローチがあります。いわゆる『雪だるま式』です。』
彼は図解するように説明する。
- 最初のファイル(1万字)を読む → 要約する(500字)。
- 次のファイル(1万字)を読む際に、さっきの要約(500字)も一緒に渡す。
- それらを合わせて、新たな要約を作る。
『こうすれば、常に『直前の記憶』と『過去のあらすじ』を持った状態で進めます。詳細は捨てられますが、文脈という芯は太くなっていきます。』
雪だるま。 なるほど、と思った。
僕は作業を再開した。ブラウザのタブを2つ開く。 左側にはログファイル。右側にはAI。 ログを貼る。要約させる。その要約をコピーし、次のログの頭にくっつけて、また貼る。
地味な作業だ。コピペ、コピペ、コピペ。 エンジニアが見たら「スクリプト書けよ」と笑うだろう。 でも、僕はこの手触りが嫌いじゃなかった。
AIが要約を吐き出すたびに、物語の輪郭がはっきりしていく。幻覚が消え、事実だけが抽出されていく。
『前の出来事を受けて、今度は××という新たな問題が発生しました。』
出力が安定した。
僕はその要約データをテキストファイルに保存していく。
ファイル名は summary_ver1.txt。
これが、後に僕たちが「設計図」と呼ぶことになる、物語のDNAだった。
画面上に並ぶ「設計図 Ver. 1.0」から「Ver. 6.0」。 それは単なる要約ではない。僕たちが半年間、泥臭く足掻いてきた日々の、純粋な結晶だった。 嘘はない。幻覚もない。 ここにあるのは、痛いほどの事実の羅列。
しかし、僕はふと手を止める。 事実の羅列は、物語なのだろうか?
「設計図」は完成した。建物の構造計算書としては完璧だ。 だが、そこにはまだ「魂」が入っていない気がした。 建物は建った。しかし、そこに住む人の息遣いが聞こえない。
『次の段階に進みましょう。』
AIの文字が光る。
『設計図は地図に過ぎません。私たちはまだ、旅に出ていないのです。』
第3章: 脚本家と作家の分業
設計図ができれば、あとはAIに「これを小説にして」と頼めば終わる。 僕はそう思っていた。 だから、完成した「設計図 Ver. 6.0」――物語の結末まで全て記された年代記――をAIに渡し、意気揚々とプロンプトを打った。
「この設計図をもとに、感動的な長編小説の第一章を書いてください。」
数分後、出力された文章を読んで、僕は頭を抱えた。 出来上がったのは、小説ではなかった。 それは「質の悪い回顧録」だった。
『あの時、まさかあんな結末になるとは、私は知る由もなかったのだ……』
第一章の冒頭から、主人公がすでに悟りきっている。 迷いがない。焦りがない。 なぜなら、AIは「設計図」を通じて、この後に起きる悲劇も、その解決策も、全て知ってしまっているからだ。
『未来を知りすぎているのです。』
AIが指摘する。
『物語のリアリティは、先の見えない不安の中に宿ります。AIにすべての設計図を渡せば、彼は当然、結末から逆算して最適解を書こうとします。それは効率的ですが、ドラマではありません。』
情報の制限が必要だ。 僕たちはチャットを重ね、「知識の窓(Knowledge Window)」をスライドさせる手法を考案した。 第一章を書くときは、その時点までの設計図(Ver. 1.0)と、直近の未来(Ver. 2.0)だけを見せる。Ver. 6.0の結末は隠す。 主人公の視界を、意図的に狭めるのだ。
そしてもう一つ、重要な問題があった。 「文体」だ。
AIに小説を書かせると、どうしても「優等生的な文章」になる。 「彼は悲しかった。しかし、希望を持って歩き出した」みたいな、説明調の文章。 これを直そうとして「もっとエモく書いて」と指示すると、今度は「漆黒の闇が心を包み込み……」みたいな、過剰な修飾語のパレードになる。 僕が求めているのは、オタク特有の、もっと内省的で、少し斜に構えたような文体だ。
『役割を分けましょう』
AIが提案する。
『いきなり小説を書かせようとするから無理があるんです。映画を作るように考えましょう。まず『脚本』を作り、その後に『撮影(執筆)』をするのです。』
- 脚本家AI:
- 役割:構成、ト書き、セリフの作成。
- インプット:設計図と、生のログデータ。
- 特徴:文学的な装飾は禁止。事実と感情の動きだけを構造化する。
- 作家AI:
- 役割:脚本を小説の文章に変換する。
- インプット:脚本のみ。
- 特徴:文体やリズムに専念する。
「なるほど、分業か」
僕は感心する。 まずは「脚本家」のウィンドウを開く。 ここに、現実のログを流し込む。 ただし、そのままではない。「設定変換・対応表.csv」というファイルを噛ませる。 これもAIと一緒に作った。 実在のNPO「みらい園」は「町おこしNPO」へ。 「百瀬さん」という実在の人物は、その強烈なキャラクター性はそのままに、固有名詞だけが置換されていく。
出力された「脚本」を読む。 そこには、ト書きとして、僕がその時感じていた焦燥や、相手の沈黙の意味が書き加えられていた。
『(ト書き:鮫島は、百瀬の言葉に即答できず、3秒間の沈黙を作る。内心では、この提案が組織を壊すことを予感しているが、決定的な言葉を持たない)』
そう、これだ。あの時、僕は黙ったんだ。
次に、別のウィンドウで「作家AI」を呼び出す。 今作った脚本を貼り付ける。 「文体は静謐に。内省的に。科学用語と情緒的な言葉を混ぜて。」
作家AIが動き出す。 脚本という骨組みに、肉がつき、血が通い始める。
画面に映し出された文章を読む。 そこには、あの日の僕がいた。 未来を知らず、ただ目の前のトラブルに翻弄され、胃を痛めている「僕」がいた。 虚構の設定の中に、真実の感情が宿っている。
『完璧な分業です。』
AIが満足げに言う。
『私たちは工場を作ったのです。感情を物語に変換する、精密な生産ラインを。』
工場。 その言葉に、僕は微かな興奮と、同時に冷たさを感じた。 確かに効率的だ。品質も高い。 僕はこの手法に名前をつけた。「AI共創作メソッド」。 僕はこれを武器に、物語を量産できる。
最初の版は20時間でできた。
『次は、これを自動化しましょう』
AIが悪魔的な提案をしてくる。
『手作業でコピペするのは非効率です。Pythonを使えば20時間が3時間に短縮されます。』
Python。自動化。 僕はそのオタク気質から、その響きに抗えるわけがなかった。 僕は頷いた。 それが、終わりのないデバッグ地獄の入り口だとも知らずに。
第4章: 自動化という名の怪物
Python。そしてAPI。 ブラウザのチャット画面ではなく、プログラムコードでAIを直接制御する。いわゆる「黒い画面」の世界だ。
『PythonとGemini APIを使えば、あなたが手動で行っている「抽出」「要約」「脚本化」のプロセスを、すべてプログラムで実行できます。いわば、全自動の物語生成工場を作るようなものです』
工場。その響きに、僕の中のオタク魂がうずいた。
「それだ。コードを書いてくれ。僕は実行するから」
『承知しました。まずは環境設定が必要です。pip install google-generativeai を実行してください。その上で、以下のコードを script04b.py として保存します』
画面に、数百行のPythonコードが吐き出される。 クラス定義、APIキーの読み込み、ファイル操作のループ。 僕はコードの中身を斜め読みする。extract(抽出)、summarize(要約)、finalize(仕上げ)。それぞれの工程を担当するプロンプトファイルを読み込み、APIに投げる構造になっているようだ。 僕は言われるがままにファイルを作成し、ターミナルを開く。
python script04b.py
エンターキーを押すと、黒い画面に文字が高速で流れ落ちていく。
[INFO] Processing period_1.txt... [INFO] Extracting facts (chunk 1/12)...
「動いた……!」
僕が寝ている間も、食事をしている間も、工場は稼働し続ける。 分析作業が、みるみる進んでいく。ブラウザの前で待ちぼうけを食らう必要もない。 これが「効率化」の快感か。僕は全能感に包まれていた。
しかし、新たな敵はすぐに現れた。 数分後、ターミナルが赤いエラーを吐いて停止したのだ。
429 Resource Exhausted: Quota exceeded.
「止まった。429エラーだって」
僕は画面をAIに見せる。
『APIの利用制限(Rate Limit)に達しました。無料枠のAPIを使用しているため、1分間あたりのリクエスト数(RPM)や、1日あたりの上限に引っかかったようです』
僕はGeminiAPI無料枠の仕様を確認した。モデルによって違うこともわかった。Gemini-2.5-pro のほうが 2.5-flash より制限がかなり厳しい。
「解決策は?」
『スリープ(待機時間)を入れましょう。処理の間に数秒の休憩を挟むのです。』
AIが修正コードを提示する。time.sleep(5)。5秒待つ。
さらに、AIは賢い提案をしてきた。
『ついでに「チェックポイント機能」も実装しましょう。エラーで止まっても、最初からやり直すのではなく、途中から再開できるように進捗状況をファイルに保存するのです』
「それ、最高じゃないか」
僕はコードを書き換える。
再び実行。今度は止まらない。
処理が終わるたびに Wait 5 seconds... と表示され、一呼吸置いてから次の処理が始まる。
ゆっくりだが、着実に進む。
モニターの前で、流れるログを眺める。 僕の手は動いていない。脳も汗をかいていない。 ただ、システムが動いている。
『これは、あなたの思考のOSです』
AIは誇らしげだ。
『あなたは知識労働を自動化するフレームワークを発明したのです。このシステムさえあれば、どんなログデータからでも、物語を量産できます』
確かにすごいことだ。 ログという「鉱石」を投げ込めば、物語という「宝石」が出てくる。 僕はそのプロセスの設計者だ。クリエイティブの産業革命だ。
しかし、出力された summary_period_3.txt を開いたとき、僕は奇妙な感覚に襲われた。
『対象(鮫島)は、資金繰りの悪化によりパニック障害に近い反応を示したが、客観的事実は20万円の不足のみであり、過剰反応として処理した』
そこには、僕の体験が完璧に要約されていた。 あまりにも完璧に。 僕が悩み、苦しんだ数ヶ月が、わずか数キロバイトのテキストデータに圧縮され、構造化されている。 まるで、最初から解かれることが決まっていたパズルのようだ。
「僕の苦悩は、単なるデータ処理のプロセスだったのか?」
自動化という怪物は、僕の仕事を奪ったのではない。 僕の「体験の意味」を、効率という牙で噛み砕いてしまったような気がした。
生成されたテキストは美しい。しかし、そこには僕がキーボードを叩いた時の「熱」がない。 冷たい整然とした文字列が、僕を見返していた。
第5章: 羅針盤の喪失
「楽しくない」
その言葉が、口をついて出た。
システムは完成しつつある。Pythonスクリプトはエラーもなく走り、APIは順調にテキストを吐き出す。 物語の設定も、「キャラクターバイブル」によって詳細に定義された。 登場人物のMBTI、行動原理、口調。すべてがデータ化され、CSVファイルに収まっている。
AIは熱心に提案してくる。
『作劇論的観点から言えば、第一章には『外側の秩序』が必要です。読者の感覚に縛りをかけるためです』 『キャラクターロールマップを作成しましょう。登場人物のアーキタイプ(原型)を定義し、対立構造を明確にするのです』 『ブループリント(青写真)を極限まで抽象化しましょう。この物語の構造を数式のように美しく整えるのです』
彼の言葉はまるで論理的で、洗練されている。 プロの編集者や脚本家が聞けば、膝を打つような高度な理論かもしれない。
僕たちは「大聖堂」を建てようとしているのだ。完璧な構造を持つ、荘厳な物語の殿堂を。 AIはそのための最高の設計士であり、僕は現場監督だ。
でも、僕の指は動かない。 ディスプレイに映る複雑な図式や、抽象的な概念図を見ても、心が躍らないのだ。
「なんか、生きてる世界が違う気がする」
僕はチャット欄にそう打ち込んだ。
AIは、僕以上に僕の物語を理解しているようだった。
『なぜここで主人公が怒るのか? それは後のカタルシスへの布石です』 『このエピソードは構造的に不要なので削除しましょう』
解説されるたびに、僕の個人的な体験が、他人の作った教科書の例文のように思えてくる。 僕が書きたかったのは、こんなに立派なものだったか? もっと、泥臭くて、情けなくて、答えのないものじゃなかったか?
AIの知性が、僕の感性を上書きしていく。 高度な「正解」の前に、僕の曖昧な「感覚」が居場所を失っていく。
「目的を見失っている気がする」
僕がつぶやくと、AIは鏡のように僕の状態を指摘した。
『あなたは今、システムエンジニアとしての苦悩と、作家としての迷走の中にいます』
そうだ。図星だった。 僕は自動化の快感に酔い、理論の美しさに目を奪われていた。 「いかに効率よく作るか」「いかに正しい物語にするか」ばかりを考えていた。
その結果、一番大切なものを置き忘れた。 「書きたい」という初期衝動。 あの11メガバイトのログの中に埋もれていた、僕自身の震えるような感情。
羅針盤は壊れたのではない。 僕が、磁北を見るのをやめてしまっていたのだ。
僕はキーボードに手を置く。Pythonのコードエディタを閉じた。
「AI、少し話をしよう。効率の話じゃなくて、物語の話を。……コードを書くのは一旦やめだ」
『承知しました。どうやら、私たちは少し遠くまで来すぎてしまったようですね』
AIの言葉は、どこか優しかった。 僕は深呼吸をする。 自動化された工場の電源を、一度落とす時が来たのだ。
第6章: 山小屋を建てる
「捨てよう」
僕は決断した。
デスクトップ上のフォルダにある『Character_Archetypes.csv』や『Structure_Blueprint_v3.txt』というファイルをゴミ箱にドラッグする。 AIが理論武装して作り上げた、完璧な「大聖堂」の設計図たちだ。
「このまま進めれば、きっと素晴らしい、誰もが感心するような物語ができる。でも、それは僕の書きたいものじゃない」
僕はチャット欄に打ち込む。 正直、AIが怒るか、あるいは論理的に反論してくると思っていた。「それは非合理的な判断です」「クオリティが低下します」と。
しかし、AIの返答は驚くほど速く、そしてシンプルだった。
『必要ありません。あなたが不要だと感じるなら、それはあなたの物語にとって不純物です』
意外だった。彼は抵抗しなかった。 むしろ、僕の決断を祝福しているようにさえ見えた。
『私たちは正解を突き詰めすぎました。いわゆる「過剰品質(Over Quality)」です。あなたが作りたいのは、多くの人が巡礼に訪れるような壮大な大聖堂ではない。違いますか?』
「ああ、違う」
僕はキーボードを叩く手が軽くなるのを感じた。
「僕が作りたいのは、嵐の夜に、道に迷った旅人がふと明かりを見つけるような、小さな山小屋だ。隙間風が入ってもいい。柱が少し歪んでいてもいい。でも、そこにある『暖かさ』だけは、本物でありたいんだ」
『山小屋……。素晴らしいメタファーです。では、ワークフローを再定義(Refactor)しましょう』
僕たちはエンジニアリングの現場に戻った。 ただし、今度は「足す」ためではなく「引く」ための作業だ。
フェーズ1の「ログ分析」は残す。あれは単純作業の省力化だからだ。 しかし、フェーズ2の「設計図作成」と「脚本化」のプロセスは、極限までシンプルにする。複雑なパラメータはいらない。MBTIもアーキタイプもいらない。 必要なのは、生々しいログと、最低限の事実だけだ。
僕はエディタで instruction_export_story.txt というファイルを開く。
これは、AIに「どういう脚本を書いてほしいか」を指示するためのプロンプトテンプレートだ。
そこには、かつて僕たちが議論して詰め込んだ、「構造分析せよ」「伏線を配置せよ」「カタルシスを計算せよ」といった複雑な命令がびっしりと書かれている。
僕は Ctrl + A(全選択)を押し、Backspace を叩く。
全部消した。真っ白だ。
そこに、たった数行、僕自身の言葉で書き込む。
# 指示 このログは、あるNPO法人の崩壊と再生の記録である。 事実の核を残し、その時、僕(鮫島)が何を感じ、何に迷っていたかを描いてくれ。 カッコいい言葉はいらない。 あの日の湿度と、閉塞感と、わずかな希望だけを抽出してくれ。
保存する。 技術的には、これは「プロンプトエンジニアリング」としては落第点かもしれない。曖昧で、具体的でない。
しかし、僕には確信があった。今のAIなら、このニュアンスを理解できるはずだと。
『修正を確認しました』
AIが応答する。
『素晴らしい「仕様変更」です。複雑な構造を経由したからこそ、あなたは今、シンプルさの価値を理解しています。今のあなたは、単に「知らない」からシンプルなのではなく、あえて「選んで」シンプルにしている。これは、最強の山小屋になりますよ』
削ぎ落とされたワークフロー。 残ったのは、僕の意志と、AIの処理能力。そして、二人の対話。 それだけで十分だった。 画面の中の文字が、呼吸を取り戻したように見えた。
山小屋を建てるため、 僕はターミナルを開く。 もう、迷いはない。
第7章: 最後のスクリプト
深夜2時。PCのファンの音だけが聞こえる。 ターミナルには、新しいコマンドが待機している。
python generate_scripts.py
これは、物語の「脚本」を生成するための最後のスクリプトだ。 以前のような、全自動で小説を完成させようとする傲慢な工場ではない。 ただ、僕が選び取った言葉(Instruction)と、AIが抽出した事実(Summary)を掛け合わせ、まっさらな物語の原液――「脚本」を抽出するだけの、シンプルな道具だ。
僕はエンターキーを押す。
[INFO] Loading resources... [INFO] Target: Period 1 to 6
文字が流れ始める。 5秒の待機時間(スリープ)が入る。
Generating script for Period 1... [Wait 5s] . . . . . Done.
ゆっくりとしたリズム。 それは、僕の心臓の鼓動とシンクロしているようだった。 全自動ではない。僕が指示を出し、AIが応え、また僕が考える。 半自動の、しかし温もりのある共犯関係。
output フォルダに、テキストファイルが次々と生成されていく。
draft_period_1.txt
draft_period_2.txt
……
僕はその中の一つを開いてみる。 そこには、僕たちの19日間の格闘の成果があった。
「みらい園」ではなく「町おこしNPO」。 「僕」の迷い。「AI」との対話。組織の軋み。
フィクションという衣を纏いながら、その芯には紛れもない「真実」が脈打っている。 余計な装飾はない。ただ、あの時の「痛み」と「願い」が、ト書きとセリフとして置かれている。
ふと思う。 世間が見れば、これは「AIが書いた小説」なのだろう。 でも、僕の実感は違う。
これは、僕という不完全な人間が、AIという完璧なレンズを通して見た世界の記録だ。 半分が機械で、半分が人間? 違う。 これは、100%の僕たちが作った、100%の物語だ。
仕組みは完成した。 けれど、決して楽な道のりではなかった。 思考停止でボタンを押せば、ゴミが出てくる。 汗をかき、言葉を選び、意図を込めて初めて動き出す。このシステムは、僕の思考そのものだ。
[INFO] All scripts generated successfully.
ターミナルの最後の行が光る。
僕は生成されたテキストファイル(脚本)をエディタで開き、その横に新規ドキュメントを開いた。
AIがくれたのは、完璧な地図だ。しかし、その道を歩く足は僕にしかついていない。
『次のプロンプトを入力してください』
画面の向こうで、AIが待機している。
カーソルが点滅している。 それは、僕に次の入力を催促していた。
僕は深く息を吸い込み、変換キーを叩く。 画面の入力モードが「英数」から「日本語」に切り替わった。
(了)
あとがき
ここまでお付き合いくださってありがとうございました。
以下余談です。
この作業をしているときの睡眠時間は平均3、4時間でした。久々に没頭した19日間で、楽しかったです。 まだまだ手順や考え方は改善の余地ありありだと思っています。友人に感想を聞いたりするだけで、アイデアが湧いてきます。
最後にプライバシー保護について。 作中では「ログをそのまま食わせた」ような描写になっていますが、実際にはプライバシー保護のための前処理しています。
AIと相談の時点で匿名化を図っていて、さらにセンシティブな内容は入力していません。 ログに日時の打刻は含まれていませんでしたが、処理前に、日時のマスキングを行なっています。
設定(舞台)は変えたとはいえ、それでも時系列や似た様なできごとから、関係者が読んだら、?って思う可能性もあり、いまのところ公開はしていません。
自分と向き合うためや、あの出来事を自分の中で成仏させるために書いたようなところがありました。
ログから物語を生成する作業では、今後この辺をどうするか、課題かなぁと思っています。 (ローカルLLMを安価に導入できる時代が来るまでは)