![見出し画像](https://assets.st-note.com/production/uploads/images/159978884/rectangle_large_type_2_c7edc1ca0df92236d8118e5c67e39f6e.png?width=1200)
【試行錯誤実況中継】 AIを通して活用できる創作データベースを作ってみる (2)キャラクターのデータベース
小説を書きたいけれど一歩を踏み出せない。そんな思いを抱える人は少なくないはず。でも、最新のAI技術を活用すれば、アイデア出しから設定作りまで、創作の悩みを大きく解消できるかもしれません。
本シリーズでは、yaml形式やMermaid記法を使った簡単なデータベース作りから、ChatGPTとの対話による設定のブラッシュアップまで、AI時代の新しい創作手法をご紹介します。一連の記事は以下のマガジンにまとめていく予定です。そちらの購読もぜひご検討ください。
前回のおさらい
以前から小説を書いてみたかったものの実現には至らなかった筆者。AIの支援の下、こんどこそ夢を実現するべく、まずは高機能ネタ帳・資料集たる「創作データベース」の制作を目論むのであった。…これが前回記事の要約。
前回記事はこちら:
試作版をとりあえず作ってみる
データベースの方向性に関してはあれこれまだ未確定。試作しながら徐々に構想を明確化していかなければなりません。
検証用にまず最小限度の規模の小さいデータベースを作ってみたいと思います。わかりやすいところで「キャラクターのデータベース(人物DB)」。
題材として、誰もが知っている「桃太郎」を取り上げることにしました。ただ、さすがに登場人物が少なすぎます。それに、女の子や敵対勢力のキャラも登場させたいところ。そこで、他の民話・おとぎ話の登場人物を借用し、いろいろオリジナル設定をでっち上げてみようと思います。
最終的に「日本昔話パロディ小説」を目指すと想定するわけです。
また、人物そのものの諸元を扱う人物DBと並行して、人物間の関係性を扱う「人間関係DB」を別建てで作ってみます。最終的に統合するかもしれませんが、とりあえず二つのDBを別物として整備していきましょう。
人物DB
キャラクタの名前と説明を、とりあえず書き連ねてみます。記述形式としてyamlを選択しました。
```yaml
characters:
- name: 桃太郎
desc: 桃から生まれたヒーロー
- name: 桃爺さん
desc: 桃太郎を育てた
- name: 桃婆さん
desc: 桃太郎を拾って育てた
- name: 犬
- name: 雉
- name: 猿
- name: 金太郎
desc: 出世を夢見る意識高い少年
- name: 熊
desc: 金太郎と勝負して負け、家来になる
- name: 瓜子姫
desc: 瓜から生まれたヒロイン。機織が得意で機織娘と仲がいい。桃太郎に憧れ、金太郎を嫌っている
- name: 天邪鬼
desc: 瓜子姫に酷いことをした悪いやつ
- name: 鶴爺さん
desc: 罠に嵌っていた鶴を助けてやった親切な人。恩返しにやってきた機織娘の父親役になる
- name: 鶴婆さん
desc: 恩返しにやってきた機織娘の母親役になる
- name: 機織娘
name: 正体は鶴。鶴爺さんに助けられた恩義から機織をして鶴爺さんを助けていた。一度正体がバレて出奔したが、周囲の説得で出戻った
- name: 浦島太郎
desc: 竜宮城に行き100年ぶりに故郷の村に帰ってきた。村の長老に収まっている
- name: 乙姫
desc: 竜宮城で浦島太郎と恋仲に。村に帰った浦島太郎が忘れられず、追いかけてきた
- name: 花咲か爺さん
desc: 飼い犬の白を可愛がる。枯れ木に花を咲かせて殿様に褒美をもらう。楠山正雄版に準拠。https://www.aozora.gr.jp/cards/000329/files/3391.html
- name: 欲張り爺さん
desc: 欲求の赴くまま、白に酷いことをする。最終的に強欲が裏目に出て殿様に制裁される。楠山正雄版に準拠。https://www.aozora.gr.jp/cards/000329/files/3391.html
- name: 白
desc: 花咲か爺さんに飼われていた犬。欲張り爺さんの逆恨みによって非業の最期を遂げる。楠山正雄版に準拠。https://www.aozora.gr.jp/cards/000329/files/3391.html
```
yaml形式を選んだのは、シンプルでわかりやすく編集操作が簡単と考えられたからです。
とりあえずnameとdesc(descriptionを略したつもり)の2項目を書き連ねていますが、運用が本格化したら、おそらくage(年齢)とかoccupation(職業)とかいろいろ付け足したくなるでしょう。たとえばスプレッドシート(というかCSV形式)だと項目の変更が微妙に面倒です。項目が増えてくると、「職業は5番目だったっけ6番目だったっけ?」みたいなことを考えながら編集のたびごとに横スクロールを繰り返すことになり、煩雑です。
yamlは文法がシンプル。どの項目を書こうが書くまいが最初に書こうが最後に書こうが自由です。人間が読むにもストレスが少なく、もちろんコンピューターやAIに読ませるのも簡単です。
人間関係DB
まずは「関係性」の定義。次に、その関係性定義を利用してキャラクター間の関係性を記述していきます。
これもyamlで書いても良かったのですが、簡単に図に起こせるという点を考慮して、mermaidのフローチャート記法を使ってみました。
relationships:
- name: 家来
desc: 手下。子分。主従関係を結び、命令を下す対象
- name: 友人
desc: 互いを信頼し、交友関係を持続する間柄
- name: 寵愛対象
desc: 可愛がる相手
- name: 恋愛対象
desc: 恋焦がれる相手
- name: 利用対象
desc: 何らかの形で利用するために接触する相手
- name: 憎悪対象
desc: 憎しみや嫌悪感をぶつける相手
- name: 相思相愛
desc: 互いに恋慕を向け合う相手
- name: 子孫
- name: 妹
- name: 弟
- name: 義理息子
- name: 義理娘
- name: 敵
```
# 登場人物間の人間関係
```mermaid
graph TD;
桃太郎 -->|家来| 犬;
桃太郎 -->|家来| 雉;
桃太郎 -->|家来| 猿;
桃爺さん -->|義理息子| 桃太郎;
桃婆さん -->|義理息子| 桃太郎;
金太郎 <-->|友人| 桃太郎;
金太郎 -->|家来| 熊;
熊 <-->|ライバル| 犬;
金太郎 -->|恋慕対象| 瓜子姫;
瓜子姫 -->|敵| 天邪鬼;
瓜子姫 -->|嫌悪対象| 金太郎;
瓜子姫 -->|恋慕対象| 桃太郎;
瓜子姫 -->|友人| 機織娘;
鶴爺さん -->|友人| 桃爺さん;
鶴婆さん -->|妹| 桃婆さん;
鶴爺さん -->|義理娘| 機織娘;
鶴婆さん -->|義理娘| 機織娘;
浦島太郎 -->|子孫| 桃爺さん;
浦島太郎 <-->|相思相愛| 乙姫;
機織娘 -->|尊敬対象| 乙姫;
欲張り爺さん -->|憎悪対象| 花咲か爺さん;
花咲か爺さん -->|寵愛対象| 白;
白 -->|弟| 犬;
花咲か爺さん -->|友人| 桃爺さん;
花咲か爺さん -->|友人| 鶴爺さん;
桃太郎 -->|敵| 欲張り爺さん;
金太郎 -->|敵| 欲張り爺さん;
欲張り爺さん -->|利用対象| 天邪鬼;
```
VSCodeに拡張機能typoraをインストールした状態で、markdownテキストの中にmermaidテキストを書き込んでおくと、リアルタイムで「図」を確認できるのです。誤記や設定の矛盾にすぐに気づくことが出来ます。
![](https://assets.st-note.com/img/1729781505-Bgl5TRbaif0cF6Nv3trEyQ1p.png?width=1200)
人間関係図を拡大すると下のようになります。ラノベの文庫本の巻頭についていそうなアレがこのように簡単に作れるというわけです。
![](https://assets.st-note.com/img/1730414836-iHxpMv9X1KTbzZqd0627Qo4E.png?width=1200)
データベースの書き込み作業をしていると、リアルタイムで図が「育って」いくのが目の当たりになります。この作業、超楽しい。
見ておわかりのとおり、複数の民話の登場人物を取り込み、ゴリゴリに独自設定を施しています。
早速ChatGPTに手伝ってもらおう
まずは設定を把握してもらう
プロンプトはこんな感じ。
以下はあるパロディ小説の人物設定です。これらの内容を把握し、この後の私からの質問に備えてください。
この文言に続けて、上で示した「データベース」をまるごと貼り付けて、プロンプトとします。すると、次のように言ってきました。
設定を把握しました。それでは、この登場人物や関係性についてどのような質問があるか、お待ちしております。
よろしい! それでは続けて、ひとまず次のようなスクリプトを追加してみます。
登場人物紹介をmarkdown table形式の一覧表にまとめてください。各行に「名前」・「説明」・「他の人物との関係性」の3項目を含めるものとします。
すると次のような出力が得られました。
![](https://assets.st-note.com/img/1729782167-5ajAzklePo4Hx1IESfmZp8X0.png?width=1200)
いい感じに設定が取り込まれているようです。こんな感じで、データベースの加筆作業の真っ最中でも、適当なタイミングでChatGPTに課題を与え、その素材たるデータベースが問題なく作れているかチェックできます。
このようなチェックはこまめに実行するべきでしょう。
第2回記事しめくくり
まずは試作版のデータベースを至極ラフに作ってみました。
そして、AIに読み込ませて仕事をさせる予行演習のようなこともやってみました。
現時点でのデータベースの中身はおもちゃ同然です。しかし、最初から完璧を目指すとたぶん挫折します。おもちゃはおもちゃなりに適当に遊び道具になりますから、そのへんを楽しみながら少しづつ先に進みたいと思います。
次回は、もう少しAIを高度に使い、この単純なデータベースを素材とした「アイディア出し」を試してみたいと思います。