📝

LLMで夢小説を作る「YumeChain」を開発してみた

に公開

なぜ作ったか(人間が書いたオーガニックテキスト)

TwitterやTiktokでLLM(主にChatGPT)で夢小説を作っている人が居て「終盤になるとキャラ設定が崩れたり世界観が崩壊したりする」という感想を見たので。

詳細(AIが生成したテキスト)

はじめに

LLMの実用性を探るため、個人プロジェクトとして 夢小説自動生成ツール「YumeChain を開発しました。本プロジェクトの目的は以下の通りです:

  • 複数LLM(OpenAI, Gemini, Claude等)のプロンプト挙動を比較評価
  • エージェント的な創作支援ツールの設計手法を検証
  • Markdownから小説を生成→表示→公開する一連の自動化体験の構築

LLM活用を手を動かして学ぶには、構造と表現の両面が求められる「夢小説」という題材が最適だと感じました。


実装ハイライト

1. 設定からプロット→本文生成へ

  • 設定ファイル(Markdown形式)で世界観や登場人物を定義
  • プロットと本文は、LLMに段階的に指示を出すことで生成
  • プロットと本文で異なるLLM・モデル・温度を指定できる柔軟設計

2. CLI × Web × はてなブログ

  • CLIは uv run または yumechain で対話的に操作可能
  • Flaskベースの軽量Web表示機能により、生成した小説をそのまま読書可能
  • AtomPub API経由で、はてなブログに即時投稿(Markdown→HTML変換対応)

3. コンテキストキャッシュ × モデル最適化

  • ClaudeやGPT-4oなど、キャッシュ対応モデルではプロンプト高速化とコスト削減を実現
  • .envファイルでLLMプロバイダやモデルを簡単に切り替え可能

技術スタックと構成

  • 言語:Python
  • パッケージ管理:uv
  • LLM統合:litellm(OpenAI / Gemini / Anthropic / Azure 対応)
  • Web表示:Flask(ポート指定・自動割当対応)
  • ブログ投稿:AtomPub API(はてなブログ)
  • キャッシュ:独自Context管理でAPIコールを最小限に
  • コマンド:init, generate-plot, generate-episode, read, publish, status など

開発の中で得られた学び

  • LLMは構成力と即興性の両立が難しい → プロットと本文でモデル・温度を分ける設計が有効
  • エージェント不要な自動化でも「選択肢付きCLI」が便利
  • コンテンツ生成後の出力先(ブログ等)を用意すると活用価値が高まる

今後の展望

  • 挿絵生成やAIナレーション音声との連携
  • note、Zenn、Scrapboxなど他メディアとの連携
  • 他ジャンル(ビジネス文書やスピーチ台本)の生成支援ツールへの応用

まとめ

「YumeChain」は、LLMの能力と創作支援の可能性を試す実験的な取り組みとして設計されました。Markdownで世界観を定義し、LLMで物語を紡ぎ、Webで読めて、ブログに公開もできる。この一連のプロセスがワンコマンドで回る仕組みが整ったことで、LLMを使った創作支援の現実的な可能性を実感できました。

ツールは現在も改善中です。興味のある方はぜひお試しください。

Discussion