InkOSのブックジェネレーターが数百章を通じてコンテキストを維持する方法
言語モデルを使って長編フィクションを書こうとしたことがある人なら、すべてが崩れ始める瞬間を知っているでしょう。3章か4章になると主人公が死んだはずの仲間を予想外に「復活」させ、場所を混同し、物語のスタイルが「彼は重要な教訓を学び、前進した」のようなつまらない一般化に陥ります。
ここでの問題はコンテキストウィンドウのサイズだけではありません。前の5万語をすべてニューラルネットワークに詰め込んでも、モデルは 여전히詳細を間違えたり、陈腐な表現を出し始めたりします。
最近、GitHubで8500つ星以上を獲得しているInkOSというオープンプロジェクトを見つけました。これは物語管理、Web小説生成、インタラクティブゲーム、シナリオのためのフル機能のTypeScriptフレームワークです。著者はメモリ、スタイル、プロットへの制御の統合を試みました。
アイデアの概要と、なぜ通常のプロンプトでは不十分なのか
InkOSは、 Specialized Agentsのチェーンを通じてテキスト作成を管理します。単一のニューラルネットワークに「プロットを考慮して1章を書いて」と依頼する代わりに、システムを明確な役割に分割します。
1つのAgent(Planner)が現在の章の方向性を形作り、別のAgent(Writer)が下書きを作成し、3番目のAgent(Observer)がテキストから世界とキャラクターに関する事実を抽出し、4番目のAgent(Auditor)が完成版をチェックして矛盾を見つけます。
テキストは制御ファネルを通過します:
Auditorがキャラクターが2章前に失われた剣を突然引き抜くことに気づいたら、その章はEditor Agentによる自動修正のために送り返されます。
3層メモリとハルシネーション対策
InkOSの最も興味深い技術的側面は、プロジェクトがフィクション世界の状態をどのように保存するかです。LLM Agent自体にMarkdownファイル全体の状態書き換えを任せる場合、構造はすぐに劣化します。
著者はハイブリッドアプローチを採用しました:
- 厳密に構造化されたデータベース。インベントリ状態、プロットデバイス、キャラクター関係ステータスはJSON形式で保存され、Zodスキーマで検証されます。AgentはJSON全体を 새로出力するのではなく、差分デルタパケット(JSON delta)のみを出力し、プロジェクトコードが状態を不変に適用します。
- ローカルSQLiteデータベース。Node.js 22+バージョンでは、システムは過去のイベント、ベクターとキーワード検索、圧縮された注釈、事実のためにSQLiteに自動的に接続します。
- Markdownでのプロジェクション。
current_state.mdやpending_hooks.mdのようなファイルは、検証済みJSONから自動的に生成されます。これらは人間の著者のための視覚的参照であり、ジェネレーターコンテキストに渡すためものです。
この分離により、モデルは誤ってプロットブランチを削除したり、state.jsonファイル形式を破損したりすることはできません。
ニューラルネットワークの光沢との戦いと自動監査
誰もが言語モデルの特徴的なスタイルに気づいています。埋めの言葉の過度な使用、均一な文長、各段落の終わりに深い道徳的結論への偏好です。
InkOSには37パラメータを持つ組み込みテキストチェッキングモジュールが含まれています。文のリズム、単語の反復頻度、つまらない陈腐な表現を監視します。
さらに、エンジンにはスタイル分析コマンドが含まれています:
inkos style analyze sample_author.txt
inkos style import sample_author.json --book my-novel
このユーティリティは、参照テキスト(文長分布、頻度辞書、ダイアログ密度)から数値フィンガープリントを抽出し、ガイドラインを生成します。新しい章を生成するとき、抽象的なテキストではなく、このフィンガープリントに厳密に適合した素材を生成します。
インタラクティブワールドとテキストRPG
バージョン1.5で、開発者はInkOS Playモードを追加しました。これは自由アクションまたはターン制分岐を持つテキストワールドを起動するためのツールです。

Playモードではいわゆるワールドコントラクトが設定されます。例えば、探偵調査ルールやサバイバルシミュレーターです。システムAgentが時間、インベントリ、アイテム、証拠を追跡し、選択インターフェースを生成したり、自然言語でユーザー入力を処理したりします。
内部では、シーンとアイテムの動的イラスト生成のメカニズム、および標準スキルパッケージのSKILL.mdサポートが使用されています。
内部の仕組み
プロジェクトは完全にTypeScriptで書かれています。Webインターフェース(Studio)はVite、React、Honoで動作します。インタラクティブコンソールはTUI経由で実装され、自動化愛好家のための従来のCLIも利用可能です。
Agentフレームワークはpi-monoライブラリ(@mariozechner/pi-agent-core)の上に構築されています。
便利な解決策の1つは柔軟なモデルルーティングです。フィクションの作成は例えばClaude 3.5 SonnetやKimi K2.7に割り当てでき、監査タスク、JSON deltaアセンブリ、検証はOpenRouter、Gemini、ローカルOllama経由でより高速で安価なモデルに委任できます。
ルーティング設定はペアで設定されます:
inkos config set-model writer kimi-k2.5 --provider custom --base-url https://api.moonshot.cn/v1
inkos config set-model auditor gemini-2.5-flash --provider google
ローカルでの実行方法
パッケージはnpmで入手可能です:
npm i -g @actalk/inkos
最初のブックを作成し、ローカルスタジオを起動するには、3つのコマンドだけで済みます:
inkos init my-story
cd my-story
inkos studio
ブラウザでポート4567にWebパネルが開きます。そこでは必要なプロバイダのAPIキーを入力し、作品コンセプトを設定し、最初の章の計画プロセスを起動できます。
コンソール作業用の直接コマンドも利用可能です:
inkos book create --title "Забытый код" --genre sci-fi
inkos plan chapter Забытый код --context "Герой обнаруживает странный архив в серверной"
inkos write next Забытый код
誰がこのプロジェクトを活かせるか
InkOSは単なるChatGPTのラッパーではありません。物語を体系的に扱う人々のための構造化された開発環境です。
このプロジェクトは以下にとって役立ちます:
- クエストや分岐ダイアログ開発のためのナラティブデザイナーとゲームライター。
- 年代順と事実を維持するアシスタントを必要とするWeb小説著者。
- メモリと内部世界ルールを持つテキストベースAIボットを作成する開発者。
もちろん、ソースコードとプロンプトは中国語と英語に向けられていますが、prompt/フォルダ内の柔軟なプロンプトパック設定により、任意の言語に生成を適応させることができます。AGPL-3.0ライセンスにより、所有のクラウドに依存せずにローカルサーバーにシステムをデプロイできます。
関連プロジェクト