StoryWriter: A Multi-Agent Framework for Long Story Generation
- arXiv/venue: 2506.16445(2025-06;另见 CIKM 2025, dl.acm.org/doi/10.1145/3746252.3761616)
- 作者: Haotian Xia, Hao Peng, Yunjia Qi, Xiaozhi Wang, Bin Xu, Lei Hou, Juanzi Li(清华大学 计算机系 / BNRist;*共同一作;THU-KEG 实验室,与 DOME、LongWriter 同一 Lei Hou / Juanzi Li 团队)
- 类型: 多智能体 "事件图大纲 + 非线性叙事 + 历史压缩" 长篇生成框架,并产出可 SFT 的数据集 LongStory
- 一句话: 用三组专门 agent(事件图大纲 → 非线性编排 → 压缩式改写)把长故事写到平均 8000 词且质量高,还用它蒸馏出 6000 篇数据集把 8B/9B 小模型训到超过 GPT-4o。
1. 要解决的问题
长故事生成(尤其超过 1000 词)对 LLM 有两大难点: - 篇章连贯(discourse coherence):要求情节一致、逻辑连贯、完整;长文里要保住远距离关键信息(事件、人物、关系)。 - 叙事复杂度(narrative complexity):要求交织、引人入胜、多样;LLM 直出往往同质化、缺乏情节推进。
2. 方法 / 核心思路
全部基于 AutoGen 多智能体框架实现,backbone 用 GPT-4o-mini。流水线三段(Premise → Outline → Chapter → Story):
2.1 Outline Agent(事件图大纲)— 两个 agent
不写描述性句子,而把大纲结构化成事件元组序列 / 事件图(节点=事件,边=事件间关系如因果,每个事件绑定若干人物、时间、地点)。 - EventSeed:按 premise 顺序增量生成事件,补齐时间/地点/关系等信息。 - EventValidator:持续监控、校验每个事件是否合理连贯,给反馈并引导后续事件生成(图中 "Good and next" / "Bad and I suggest…")。
2.2 Planning Agent(非线性叙事 NLN)— 两个模块
基于 Genette 叙事顺序理论(区分 story order 与 narrative order,用 analepsis 倒叙 / prolepsis 预叙),把事件拆解后重排到各章,制造交织感又不破坏因果链。 - SubTasker:把高层事件分解成更细的 sub-event。 - Weaver:把 sub-event 分配到不同章节(可跨章、非时序),只要因果/逻辑链保留,读者仍能重建事件链。这是对抗同质化、提升复杂度的关键。
2.3 Writing Agent(ReIO 压缩改写)— 两个 agent
论文实测:输入超过约 10,000 字符后 LLM 出现上下文碎片化、注意力衰减,导致跑题。为此提出 ReIO(Re-write Input and Output): - Coordinator:统管全局叙事架构,全程参与。输入端动态摘要压缩历史、只留与当前 sub-event 相关的信息(摘要缓存复用);输出端评估并在必要时改写生成文本,使其对齐大纲与风格。 - FinalWriter:专注合成最终叙事,保证风格统一、文本质量。 - 采用滑动窗口做历史压缩;实验发现对 <15,000 token 的文本,窗口 [2, k-1](即最大化简化中间历史、只保留首尾)效果最佳。
3. 数据与实验
- 评测集:MoPS(提供 7.6k premise + 1000 扩展故事)。
- 评测框架:沿用 HANNA 的 6 个正交维度——相关性 RE、连贯 CH、共情 EM、意外 SU、创意 CR、复杂度 CX。人评 5 分 Likert(研究生,TOEFL≥108),自动评估用 GPT-4o 打 1–5。
- 基线:DOC、Agents' Room(用确定性 orchestrator)、GPT-4o-mini 直出。
- 数据集构建 LongStory:用 StoryWriter 对 MoPS 训练集 6000 个 premise 各生成一篇,清洗后得 5,500 篇,平均约 8000 词;用 LongAlign 训练代码对 Llama3.1-8B 与 GLM4-9B 做 SFT(batch=1,lr=2e-5,4 epoch),得 STORYWRITER_LLAMA / STORYWRITER_GLM。
4. 主要结果(带数值 vs baseline)
主表(人评 / 自动,均分,满分 5,见 Table 1): | 模型 | 人评均分 | 自动均分 | 平均长度(词) | |---|---|---|---| | DOC | 3.7 | 3.9 | 2,373 | | Agents' Room | 3.8 | 3.9 | 3,134 | | GPT-4o-mini | 3.6 | 3.9 | 1,078 | | STORYWRITER | 4.2 | 4.2 | 8,081 |
- 长度碾压(8081 词 vs 基线 1–3k),且质量不降反升。创意 CR 人评 4.3、复杂度 CX 人评 4.8,显著高于所有基线;仅连贯 CH 略逊 Agents' Room(因故事更长,连贯天然随长度下降)。
消融(自动评估,Table 2): - 去掉事件图大纲 (-Events-Outline):均分 4.3→2.5(复杂度 CX 从 4.6 崩到 1.1),破坏最大。 - 去掉 NLN (-Planning):均分→3.9,复杂度掉到 3.8(第二大破坏)。 - 去掉 ReIO-Input:均分→3.9(输入变长、成本升、性能降)。 - 去掉 ReIO-Output:相关性 RE 4.1→3.7(改写维护结构一致性的作用被证实)。
SFT 下游(LongBench-Write 评测,综合分 S̄,Table 3): - STORYWRITER_GLM 综合分 83.7,全面超过 backbone GLM4-9B(47.3)、LongWriter-GLM4-9B(76.3),也超过 GPT-4o(67.4)。 - STORYWRITER_LLAMA 73.4,远超 Llama3.1-8B-Instruct(46.6)。 - 在 4000 词以上分桶质量提升尤为明显;虽未显式训练长度控制,长度得分 S_l 也大幅优于基线(说明"用更长的响应训练能自然增强长度遵循能力")。
5. 局限
- 只用了 GPT-4o-mini 做生成(省钱),更强模型可进一步提升;蒸馏到 8B 也是可优化点。
- 仅英文数据。
- 主要针对小说式故事,对剧本、诗歌、散文等其他文体探索有限。 4.(工程侧隐含)事件图 + 校验 + 压缩改写会放大 API 调用与延迟。
6. 对做产品 / 工程的启发
- 把大纲做成"事件图/事件元组"而非散文式提纲,可控性和逻辑一致性都更好;配一个 Validator agent 边生成边校验,是低成本纠错手段。
- 非线性叙事(SubTasker+Weaver) 是提"复杂度/趣味性"的抓手:先拆 sub-event 再跨章重排,只要守住因果链就不会散——这是 LLM 直出很难自发产生的能力。
- ReIO 的"输入压缩 + 输出改写" 直接针对 ~10k 字符后的注意力衰减,滑动窗口最优区间 [2, k-1](保首尾、压中段)是可直接复用的工程经验。
- "用强框架蒸馏数据再 SFT 小模型" 的路线被验证有效(8B/9B 超 GPT-4o),对想要本地部署长写作能力的产品很有参考价值。
- 代码/模型/数据 MIT 开源(github.com/THU-KEG/StoryWriter)。
关联
- 与 [[03_dome]] 同属清华 THU-KEG(Lei Hou/Juanzi Li)团队、同用 LongWriter/LongBench-Write 评测:DOME 走"动态分层大纲+KG记忆",本篇走"事件图大纲+非线性编排+ReIO 压缩",互为方法侧对照。
- 事件校验 / 一致性思路与 [[01_lost_in_stories]] 的一致性检测、[[02_from_personas_to_plot_magnet]] 的世界状态建模同源。
- 非线性重排 + 因果链保持,可与 [[04_codified_foreshadowing_payoff]] 的伏笔-回收编码结合。
- 本篇把 [[14_agents_room]] 作为直接基线复现;同批可与 [[11_storybox]](自底向上模拟)、[[12_cogwriter]](认知写作/并行生成)对比不同长篇范式。