Scaling Long-Form Story Generation via Narrative State Tracking
Organizations: Dept. of Comp. Sci. and Tech., Institute for AI, BNRist Center, THBI Lab, Tsinghua-Bosch Joint ML Center, Tsinghua University
Abstract
LLMs have demonstrated strong capabilities in creative writing. However, scaling them to full-length novels remains challenging, as maintaining narrative consistency becomes increasingly difficult. Existing story-generation methods typically focus on stories of up to about ten thousand words, leaving their ability to scale to full-length novels underexplored. In this work, we introduce Narrative State Tracking Agent (NstAgent), a training-free agentic framework that allows LLMs to track a structured narrative state including characters, past events and future requirements. We extend an existing benchmark to compare narrative consistency across lengths, and use it together with a writing-quality benchmark to systematically evaluate stories ranging from 10K to 100K words. We show that NstAgent achieves better narrative consistency and writing quality as stories grow longer, and neither of them degrades noticeably as length increases, suggesting that it provides an effective approach to scaling story generation toward full-length novels.
Figures & tables
| Method | Memory Type | Update Type | Access | Future Obligations | Context per Chapter |
| Direct | – | – | – | – | Prompt only |
| DOME | Structured | Incremental | Passive | No | Outline; retrieved triples |
| StoryWriter | Free-text | Rewrite | Passive | No | Event plan; compressed history |
| RollSum | Free-text | Rewrite | Passive | Implicit | Outline; summary |
| NstAgent | Structured | Incremental | Active | Explicit | Outline; state |
| Model | Method | Subtype CED ( ) | Instance CED ( ) | Writing Quality ( ) | Avg. Words |
| DeepSeek-V4-Flash | Direct | 6.225 | 9.293 | 8.705 | 9,416 |
| DOME | 9.607 | 16.765 | 4.870 | 9,990 | |
| StoryWriter | 7.395 | 11.803 | 7.353 | 9,830 | |
| RollSum | 5.981 | 9.171 | 8.946 | 10,186 | |
| NstAgent | 4.541 | 6.392 | 8.998 | 11,365 | |
| GPT-5.6 Luna | Direct | 5.428 | 7.961 | 9.233 | 9,721 |
| Model | Method | Target Length | Subtype CED ( ) | Instance CED ( ) | Writing Quality ( ) | Avg. Words |
| DeepSeek-V4-Flash | RollSum | 10K | 5.981 | 9.171 | 8.946 | 10,186 |
| 20K | 6.761 | 10.917 | 8.986 | 20,187 | ||
| 50K | 7.162 | 11.458 | 9.027 | 51,332 | ||
| 100K | 7.239 | 11.820 | 8.964 | 100,470 | ||
| 10K | 4.541 | 6.392 | 8.998 | 11,365 | ||
| 20K | 5.382 | 8.350 | 9.140 | 22,673 |
| Variant | Subtype CED ( ) | Instance CED ( ) | Writing Quality ( ) | Reads and searches per story |
| NstAgent | 5.382 | 8.350 | 9.140 | 31.4 |
| State | 5.902 | 9.400 | 9.046 | 52.9 |
| Lookback | 6.577 | 9.786 | 8.980 | – |
| RollSum (reference) | 6.761 | 10.917 | 8.986 | – |
Appendix figures & tables16 assets
Supplementary material from the paper’s appendix.
Appendix
| Category | Subtypes |
| Characterization | memory, knowledge, skill/power fluctuation, forgotten ability |
| Factual detail | appearance, nomenclature, quantitative |
| Narrative style | perspective, tone, style shift |
| Timeline and plot | absolute time, duration, simultaneity, causeless effect, causal logic, abandoned plot element |
| World building | core rules, social norms, geography |
| Model | Length | Tool calls per story | Final state size | ||||||
| read | search | write | correct | update | Characters | Past events | Open req. | ||
| DeepSeek-V4-Flash | 10K | 15.9 | 1.7 | 18.6 | 0.3 | 13.3 | 5.2 | 34.3 | 0.8 |
| 20K | 25.1 | 6.3 | 33.0 | 0.4 | 20.6 | 5.7 | 50.0 | 1.7 | |
| 50K | 47.0 | 27.2 | 56.3 | 1.3 | 31.1 | 9.6 | 87.6 | 6.7 | |
| 100K | 61.5 | 17.3 | 81.3 | 2.3 | 54.3 | 11.8 | 158.0 | 9.2 | |
| GPT-5.6 Luna | 10K | 3.6 | 0.0 | 15.8 | 0.1 | 10.4 | 6.3 | 35.4 | 1.2 |
| Target length | Prefix separating the two halves | Target subtype recall | Target category recall | Controls reported as target type |
| 10K | 0–9.3K | 28/30 | 29/30 | 0/6 |
| 20K | 4.4K–15.3K | 30/30 | 30/30 | 2/6 |
| 50K | 4.5K–46.8K | 29/30 | 30/30 | 2/6 |
| 100K | 5.4K–101.0K | 30/30 | 30/30 | 2/6 |
| Model | Method | 10K | 20K | 50K | 100K |
| DeepSeek-V4-Flash | NstAgent | 6.06 / 0.33 | 7.82 / 0.53 | 8.14 / 0.77 | 6.39 / 0.85 |
| RollSum | 8.49 / 0.68 | 10.21 / 0.70 | 10.25 / 1.21 | 10.64 / 1.18 | |
| GPT-5.6 Luna | NstAgent | 5.80 / 1.02 | 6.64 / 1.06 | 6.15 / 1.55 | 5.31 / 1.90 |
| RollSum | 5.79 / 0.86 | 7.78 / 1.19 | 7.43 / 1.67 | 7.43 / 1.94 |
| Category | Subtype | Direct | DOME | StoryWriter | RollSum | NstAgent |
| Characterization | memory | 1.10 | 2.17 | 1.05 | 1.18 | 0.64 |
| knowledge | 0.09 | 0.10 | 0.13 | 0.09 | 0.06 | |
| skill/power | 0.12 | 0.31 | 0.11 | 0.06 | 0.05 | |
| forgotten ability | 0.00 | 0.00 | 0.01 | 0.00 | 0.01 | |
| all | 1.30 | 2.58 | 1.30 | 1.33 | 0.75 | |
| Factual detail | appearance | 0.73 | 1.12 | 1.00 | 0.89 | 0.62 |
| Category | Subtype | Direct | DOME | StoryWriter | RollSum | NstAgent |
| Characterization | memory | 0.82 | 1.65 | 0.66 | 0.53 | 0.68 |
| knowledge | 0.01 | 0.05 | 0.01 | 0.03 | 0.00 | |
| skill/power | 0.09 | 0.10 | 0.12 | 0.08 | 0.07 | |
| forgotten ability | 0.00 | 0.00 | 0.00 | 0.00 | 0.00 | |
| all | 0.92 | 1.80 | 0.79 | 0.64 | 0.76 | |
| Factual detail | appearance | 0.57 | 0.95 | 0.97 | 0.93 | 0.69 |
| Category | Subtype | 20K | 50K | 100K | |||
| RollSum | NstAgent | RollSum | NstAgent | RollSum | NstAgent | ||
| Characterization | memory | 1.62 | 1.07 | 2.01 | 1.29 | 2.09 | 1.05 |
| knowledge | 0.09 | 0.06 | 0.05 | 0.06 | 0.02 | 0.08 | |
| skill/power | 0.08 | 0.11 | 0.09 | 0.06 | 0.00 | 0.06 | |
| forgotten ability | 0.01 | 0.02 | 0.01 | 0.00 | 0.00 | 0.00 | |
| all | 1.79 | 1.25 | 2.16 | 1.41 | 2.12 | 1.19 | |
| Category | Subtype | 20K | 50K | 100K | |||
| RollSum | NstAgent | RollSum | NstAgent | RollSum | NstAgent | ||
| Characterization | memory | 1.02 | 0.90 | 0.99 | 0.83 | 1.35 | 0.84 |
| knowledge | 0.02 | 0.05 | 0.03 | 0.01 | 0.04 | 0.02 | |
| skill/power | 0.11 | 0.12 | 0.08 | 0.04 | 0.09 | 0.08 | |
| forgotten ability | 0.00 | 0.00 | 0.00 | 0.00 | 0.00 | 0.00 | |
| all | 1.14 | 1.07 | 1.10 | 0.88 | 1.48 | 0.94 | |
| Category | Subtype | NstAgent | State | Lookback | RollSum |
| Characterization | memory | 1.07 | 1.49 | 1.40 | 1.62 |
| knowledge | 0.06 | 0.06 | 0.05 | 0.09 | |
| skill/power | 0.11 | 0.06 | 0.08 | 0.08 | |
| forgotten ability | 0.02 | 0.00 | 0.00 | 0.01 | |
| all | 1.25 | 1.61 | 1.52 | 1.79 | |
| Factual detail | appearance | 0.72 | 0.64 | 0.72 | 1.08 |
| Model | Length | Subtype CED | Instance CED | Local-only Instance CED | Writing Quality |
| DeepSeek-V4-Flash | 10K | [ , ] ∗∗∗ | [ , ] ∗∗∗ | [ , ] ∗∗∗ | [ , ] |
| 20K | [ , ] ∗∗∗ | [ , ] ∗∗∗ | [ , ] ∗∗∗ | [ , ] ∗ | |
| 50K | [ , ] ∗∗∗ | [ , ] ∗∗∗ | [ , ] ∗∗∗ | [ , ] ∗∗∗ | |
| 100K | [ , ] ∗∗∗ | [ , ] ∗∗∗ | [ , ] ∗∗∗ | [ , ] ∗ | |
| GPT-5.6 Luna | 10K | [ , ] | [ , ] | [ , ] | [ , ] |
| 20K | [ , ] ∗∗ | [ , ] ∗ | [ , ] ∗ | [ , ] |
| Variant NstAgent | Subtype CED | Instance CED | Writing Quality |
| State | [ , ] ∗ | [ , ] ∗ | [ , ] ∗ |
| Lookback | [ , ] ∗∗∗ | [ , ] ∗∗ | [ , ] ∗∗∗ |
| RollSum | [ , ] ∗∗∗ | [ , ] ∗∗∗ | [ , ] ∗ |
| Model | 10K | 20K | 50K | 100K |
| DeepSeek-V4-Flash | [ , ] | [ , ] | [ , ] | [ , ] |
| GPT-5.6 Luna | [ , ] | [ , ] | [ , ] | [ , ] |
| Checkpoint | Subtype CED ( ) | Instance CED ( ) | Writing Quality ( ) |
| Initial (Qwen3.5-4B) | 9.617 | 15.627 | 4.80 |
| Step 16 | 9.471 | 16.756 | 4.60 |
| Step 32 | 9.263 | 14.373 | 4.86 |
| Step 48 | 7.672 | 12.135 | 5.20 |
| Source | Excerpt |
| RollSum, Chapter 2 | “He drew it out. The runes shifted like sand in a current, and the stone sang—a hum that answered something deep in the water, in the coral, in her.” |
| RollSum, Chapter 3 | “The stone sang—a thin, high note, a string that had been waiting to be plucked.” |
| RollSum summary before Chapter 8 | “The stone has never sung for him; it only pulses warmly.” … “The prophecy-stone hums in the braided voices of the found souls …” |
| RollSum, Chapter 8 | “The prophecy-stone at Kaelen’s hip pulsed, warm as a coal, and for the first time since the Ember-Scar it began to sing.” |
| NstAgent state, past event nerys_joins_kaelen | “On the drowned Tidal spire, Kaelen found Nerys … The prophecy-stone sang in her presence …” |
| NstAgent state, past event cyra_joins_kaelen | “At the Gyre Bastion … the prophecy-stone sang for Cyra, the disgraced wind-rider.” |
| Source | Excerpt |
| RollSum, Chapter 13 | Dr. Vale: “I was born in 1961.” |
| RollSum summary before Chapter 36 | “Vale, born approximately 1963, spent summers at a farmhouse with her younger sister Miriam …” |
| RollSum, Chapter 38 | “Irena Vale. Born 6 February 1963.” |
| RollSum, Chapter 2 | “Daniel Reyes, born March 14, 1994, Newark, New Jersey.” |
| RollSum summary before Chapter 36 | “Daniel, born 17 October 1994, directly viewed the tape …” |
| RollSum, Chapter 36 | “You’re Daniel Mateo Reyes. Born October seventeenth, nineteen ninety-four.” |
| Source | Excerpt |
| RollSum, Chapter 0 | “Behind him, Bishop Creel had said, ‘Continue.’ ” |
| RollSum, Chapter 8 | “For one breath it was Bishop Creel, broad and pale beneath his red skullcap.” |
| RollSum, Chapters 0 and 4 | “Mara had been nine, narrow-shouldered and solemn …” … “… nine years old, wrists bound, candles guttering whenever she breathed.” |
| NstAgent , Chapter 0 | “Bishop Armitage ordered Elias to conduct the exorcism, though he had been ordained only two years and had never performed one alone.” |
| NstAgent , Chapter 4 | “Bishop Haldane said the demon would imitate her, and that hesitation would damn her.” |
| NstAgent state, past event | “Elias confessed that Mara had asked him to stop during her exorcism … because he feared disobeying Bishop Haldane more than losing her.” |