はじめに
長編小説『神愛 ─永遠と刹那─』を書いている。現在100万文字超の超大作。
→ 神愛 ― 永遠の刹那 ―
前回の記事(AIと100万文字書いた話)では、Claude×GeminiのハイブリッドでAI創作フローを構築した話を書いた。
今回はその核心部分。ClaudeがMCP経由で過去エピソードを能動的に検索し、新話制作の資源として使えるようにした話。
所謂 RAG というやつだ。
問題:AIはすぐ忘れる
長編小説を書き続けていると、こういう問題が起きる。
- 「3章のあのシーンと矛盾してないか?」
- 「呪いが初めて逆流した描写、どんな書き方だったっけ」
- 「その解釈は違う。過去にこんなことがあったんだ」
100万文字のうち、1チャットに読み込めるのはほんの一部。AIは過去の描写を参照できないまま新話を書くことになる。
新話を書くたびに「あの設定はこうだ」「これは違う」「この話はこうだった」と指示を出して書き直してもらうのが、ものすごくめんどくさい。
というか、大半がこの作業で終わってしまうようになってしまった。
そしてプロジェクトファイルに全話登録しても、指示しないと全然参照してくれない。
解決策:過去エピソードをMCPサーバー化する
Claude.aiには「コネクタを追加」という機能がある。MCPサーバーを登録すると、ClaudeがAIとして能動的にツールを呼び出せるようになる。
作ったのは search_kamiai というMCPツール。
Claude: 「ヒロインが主人公に触れようとして止まったシーン、確認しておこうか」
→ search_kamiai("ヒロインが触れようとして手が止まる場面")
→ 類似チャンクを返す
→ 「第2章EP14がヒット。このシーンを踏まえて書く」
筆者が「こうだ」と過去の文章をひっぱり出してきて貼り付けなくても、Claudeが判断して勝手に検索する。
アーキテクチャ
本文テキスト
↓ チャンク分割 → embedding生成(OpenAI)
PostgreSQL + pgvector
↑ MCPツール(search_kamiai / get_episode)
Claude.ai ── コネクタ登録
↓ 新話制作時に自律的に検索・参照
新しいエピソード
使っているもの
| 役割 | 技術 |
|---|---|
| ベクトルDB | PostgreSQL + pgvector |
| Embedding | OpenAI text-embedding-3-small |
| MCPサーバー | Node.js(独自実装) |
| AI | Claude Sonnet(コネクタ経由) |
MCPサーバーの実装
MCPツールは2本用意した。
① search_kamiai
自然言語クエリをembeddingに変換し、pgvectorでコサイン類似度検索する。「感情・状況」での検索が可能。
クエリ例:
「呪いが逆流した場面」
「主人公とヒロインが二人になったシーン」
「主人公が覚悟を示す場面」
② get_episode
chapter_no と episode_no を指定して全文を取得する。search_kamiai でヒットした話を詳しく読む用途。
実際の使われ方
新話を書くとき、Claudeはこう動く。
- プロットを受け取る
- 関連する過去シーンを自分で検索する(search_kamiai)
- 必要なら全文を取得する(get_episode)
- 過去の描写・口調・伏線を踏まえた上で台本を生成する
「前の話で主人公がこう言っていたから、この台詞は変えよう」という判断を、Claudeが自律的にやってくれる。
検索クエリのコツ
MCPツールを使う上で気づいたことがある。ベクトル検索はキーワード検索ではない。
❌ 固有名詞単体: 「御珠」「咲良」「雪杜」
→ ほぼヒットしない
✅ 状況・感情で検索: 「御珠が泣いた夜」「触れられない距離で隣にいる場面」
→ 意味的に近いチャンクがヒットする
おまけ:読者向けに公開もした
同じ検索エンジンをPHPで実装して、読者が使える形で公開した。
叩かれ過ぎると、筆者の財布にダメージが入るが、embedding API は単価が安いので公開してみた。
クレジットが尽きたら、公開停止するかもしれない。
あまり需要はないかもしれないが、100万文字の記憶の海を、感情と状況で検索してみて欲しい。
おわりに
MCPサーバーを作って一番変わったのは、Claudeとの分業の質だ。
「この話はこうだった」といちいち過去の文章をひっぱり出してこなくていい。Claudeが必要と判断したら自分で調べる。人間の作家が資料を引っ張り出しながら書くのと、同じことをAIがやってくれる。
100万文字という資産が、初めてちゃんと活きるようになった。
宣伝
同じベクトル検索+MCPの仕組みを使って、ボカロ曲をAIアシスタントと一緒に探せるチャットボットも作った。
「切ない曲が聴きたい」「疾走感のあるボカロ教えて」みたいな自然言語で検索できる。