【论文笔记】AGENTS’ ROOM: NARRATIVE GENERATION THROUGH MULTI-STEP COLLABORATION

论文信息

论文标题: AGENTS' ROOM: NARRATIVE GENERATION THROUGH MULTI-STEP COLLABORATION - ICLR 2025
论文作者: Fantine Huot, Reinald Kim Amplayo, Jennimaria Palomaki, Alice Shoshana Jakobovits, Elizabeth Clark & Mirella Lapata - Google DeepMind
论文链接: https://arxiv.org/abs/2410.02603
代码及数据集: https://github.com/google-deepmind/tell_me_a_story
文章领域: Multi-Agents System, Long Story Writing, Story Generation


研究背景

存在问题: 创作引人入胜的小说是一项复杂的多维度任务,需要整合情节构建、角色发展和富有表现力的语言等多个元素。尽管大型语言模型(LLMs)在文本生成方面取得了显著进展,但在生成连贯、结构完整且具有创意的长篇故事方面仍面临挑战。现有研究表明,LLMs通常生成过于简短的故事,缺乏叙事结构和深度,难以满足专业写作的要求。而大语言模型在生成长篇叙事时存在连贯性不足角色一致性差创意匮乏(过度依赖训练数据模式)等问题,且缺乏针对长文本的评估框架。

论文指出,人类作家通常通过多步骤协作过程来创作故事,包括构思大纲、发展角色、撰写初稿和反复修改等环节。然而,当前的自动故事生成系统多采用端到端的单一模型方法,无法有效模拟这种复杂的创作过程。因此,如何将故事生成任务分解为更易管理的子任务,并通过多步骤协作实现高质量的叙事生成,成为本研究的核心问题。

灵感来源: 借鉴叙事理论(如Freytag金字塔结构:开端、发展、高潮、回落、结局)和影视行业"编剧室"(writers' room)的协作模式。

核心目标: 通过多智能体分工协作,将复杂叙事分解为可管理的子任务,提升生成质量。


创新点

本研究提出 Agents' Room 框架,旨在通过多智能体协作模拟人类作家的创作过程,实现高质量的叙事生成。主要创新点包括:

  1. 多智能体协作框架: 将故事生成任务分解为 规划(planning)写作(writing) 两个阶段,由专门的智能体负责不同子任务
  2. 结构化叙事方法: 采用Freytag的戏剧结构理论,将故事分为五个标准部分:[EXPOSITION](介绍)、[RISING ACTION](上升动作)、[CLIMAX](高潮)、[FALLING ACTION](下降动作)和[RESOLUTION](解决)
  3. 高质量数据集构建: 创建 TELL ME A STORY 数据集,包含详细提示和相应的人类编写长篇故事
  4. 专业化智能体设计: 开发专门的规划代理和写作代理,各司其职以提高生成质量

Agent's Room

整体框架

Agents' Room框架包含四个主要组件(两个智能体):

  1. 规划代理(Planning Agents): 负责故事结构的规划。

  2. 写作代理(Writing Agents): 基于规划结果生成具体故事内容。

  3. 协调器(Orchestrator): 管理整个生成流程,协调各代理间的交互。

  4. 临时存储区(Scratchpad): 作为该多智能体系统的共享知识库。

在后文中我们预先定义 x x x 为输入的写作任务, y y y 为输出的文本


Scratchpad - 共享知识库

在多智能体协作系统(如Agents' Room框架)中,Scratchpad 是一个共享的知识库,用于存储和传递不同智能体(agents)在协作过程中生成的信息。其核心目标是避免冗余,确保每个智能体能基于前序结果高效完成子任务。

设计特点:

  1. 去中心化的协作:每个智能体仅需关注自身子任务,无需全局协调,降低系统复杂度。
  2. 动态适应性:Scratchpad 随协作进程动态扩展,灵活支持不同阶段的任务需求(如先规划后写作)。
  3. 格式自适应:智能体需将输出 y t y_t yt 转换为标准化格式(如JSON、结构化文本),便于其他智能体解析。例如,角色代理输出可能包含:
json 复制代码
{
  "label": "角色代理",
  "output": {
    "角色名": "莉莉",
    "背景": "经营美食车的小企业主",
    "动机": "提升餐厅知名度"
  }
}
  1. 无显式输入提示传递:Scratchpad 不直接包含 LLM 的输入提示(如具体的指令模板),而是依赖智能体自行解析历史信息并生成适配的输入。这要求每个智能体具备上下文理解能力,但增强了系统的通用性。

关键流程解析:

  1. 初始化

    • Scratchpad 初始化为包含初始写作提示(initial writing prompt, x x x ),例如用户提供的故事主题或要求(如"写一个关于幽灵给商业建议的故事")。
    • 初始状态: s 0 = x s_0 = x s0=x。
  2. 迭代更新

    • 每个时间步 t t t ,当前智能体 a t a_t at 接收当前 Scratchpad 状态 s t s_t st 作为输入。
    • 智能生成输出 y t y_t yt (如角色设定、情节大纲等),并将结果追加到 Scratchpad 中: s t + 1 ← ( s t ; ( l t , y t ) ) s_{t+1} \leftarrow \left(s_t; (l_t,y_t)\right) st+1←(st;(lt,yt)),其中 l t l_t lt 是智能体的唯一标签(如"角色代理""情节代理"),用于后续智能体快速定位信息。
  3. 信息组织

    • Scratchpad 的结构是一个有序序列,记录所有智能体的输出及其标签。例如:

    [初始提示] -> [角色代理输出] -> [设定代理输出] -> [情节代理输出] -> ...

  4. 避免冗余

    • 后续智能体可直接引用前序结果(通过标签定位),无需重复生成相同内容。例如,写作代理在生成故事章节时,可直接调用角色代理已定义的角色特征。

应用示例: 假设生成一个关于"幽灵提供商业建议"的故事,流程如下:

  1. 初始提示:
  • "写一个2500字的故事,主角经营美食车,回家后遇到想提供商业建议的幽灵。"
  1. 角色代理:
  • 输入:初始提示
  • 输出:主角莉莉的性格、背景(如"焦虑的成功追求者")。
  • 更新 Scratchpad:添加角色信息。
  1. 设定代理:
  • 输入:初始提示 + 角色信息
  • 输出:场景设定(如"西南部沙漠小镇")。
  • 更新 Scratchpad:添加设定细节。
  1. 情节代理:
  • 输入:角色 + 设定信息
  • 输出:故事大纲(冲突:主角忽视自我价值;高潮:幽灵揭示平衡的重要性)。
  • 更新 Scratchpad:添加情节节点。
  1. 写作代理:
  • 输入:完整 Scratchpad
  • 输出:分章节故事内容,引用角色、设定和情节信息,避免重复描述。

Orchestrator - 协调者

Orchestrator(协调器) 是Agents' Room框架中的中枢神经系统,负责管理和协调多个专业智能体的工作流程。其核心功能可概括为:

  • 任务调度:确定调用各智能体的顺序和时机
  • 流程控制:决定何时启动、继续或终止智能体调用过程
  • 资源管理:管理智能体间的知识共享(通过Scratchpad)
  • 决策制定:基于当前状态决定下一步行动

形式化定义: 给定Scratchpad状态 s t s_t st 和可用智能体集合 A A A, 协调器 o : V ∗ × A ∗ → A o: V^* \times A^* \rightarrow A o:V∗×A∗→A 确定下一个要调用的智能体 a t + 1 a_{t+1} at+1。这可以被建模为马尔可夫过程,因为每个步骤完全取决于步骤 t t t 时 Scratchpad的状态。

算法实现: 论文中的算法一 展示了 Orchestrator 的工作流程:

  1. 初始化:将初始写作提示 x x x 作为Scratchpad的初始状态 s 0 s_0 s0
  2. 决策循环:
    • 检查是否满足继续调用智能体的条件( o = ( s , A ) = = T r u e o=\left(s,A\right) == True o=(s,A)==True 且 未达到最大步数 T T T )
    • 基于当前Scratchpad状态 s s s 选择下一个智能体
    • 调用选定的智能体,获取其输出 y t y_t yt
    • 将智能体输出及其标签 l t l_t lt 追加到 Scratchpad 中
    • 如果是写作智能体,同时将输出添加到最终故事中
  3. 终止条件:当没有更多智能体需要调用或达到最大步数时停止。终止条件如下
    • 没有更多需要调用的智能体
    • 达到预设的最大步数 T T T
    • 满足特定任务完成标准

Planning Agents - 规划智能体

Planning Agents 是专门生成对最终输出有帮助的中间步骤的智能体,这些中间步骤本身不包含在最终输出中。

形式化表示为: 规划智能体 a t a_t at 仅向共享的 scratchpad写入内容,而不向最终输出 y y y 添加内容。其工作流程可表示为: s t + 1 ← ( s t ; ( l t , y t ) ) s_{t+1} \leftarrow \left(s_t; \left(l_t,y_t\right)\right) st+1←(st;(lt,yt)) 但是 y ← y y \leftarrow y y←y (即更新scratchpad,但不更新最终输出)

设计理念: Planning Agents 的设计理念源于对人类创作过程的模拟:

  • 专业作家通常先进行详细规划(构思角色、设定、情节等)
  • 然后才开始实际写作
  • 这种"规划-写作"分离的方法已被证明能提高创作质量

Writing Agents - 写作智能体

写作智能体是负责生成最终输出文本的智能体,它们除了向共享的scratchpad写入内容外,还会将内容迭代地写入最终输出y。

形式化定义: 写作智能体 a t a_t at 同时更新 scratchpad 和最终输出,其工作流程可表示为: s t + 1 ← ( s t ; ( l t , y t ) ) s_{t+1} \leftarrow \left(s_t ; \left(l_t,y_t\right)\right) st+1←(st;(lt,yt)) 且 y ← ( y ; y t ) y \leftarrow \left( y;y_t\right) y←(y;yt) (及更新 scratchpad,同时将内容添加到最终输出)

与 Planning Agents 的本质区别

特征 Writing Agents Planning Agents
输出去向 既写入scratchpad,又写入最终输出 仅写入scratchpad
内容性质 直接构成故事内容 作为中间步骤,不包含在最终输出中
任务性质 内容创作 内容规划
功能定位 "执行者" "设计师"

设计理念: 写作智能体的设计理念源于对长篇叙事生成挑战的认识:

  • 单一LLM难以一次性生成结构完整、内容丰富的长篇故事
  • 专业作家通常分段创作,先完成一部分再继续下一部分
  • 通过任务分解,使每个智能体专注于特定叙事阶段,提高该部分的质量

样例:Fiction Writing Task

前文介绍的 Agents' Room 只是框架上的设计,论文为详细说明举了 Fiction Writing Task(小说写作任务) 这一核心应用案例。

该任务的定义为: "给定一个初始写作提示 x x x,生成叙事文本 y y y"

该任务专注于长篇叙事生成(1,000-2,000 tokens),旨在解决LLMs在创作结构完整、内容丰富的长篇小说时面临的挑战。与短文本生成不同,长篇叙事需要:

  • 保持情节连贯性
  • 维持角色一致性
  • 构建完整的叙事结构
  • 发展有深度的主题

Agents' Room 通过将小说写作任务分解为规划阶段和写作阶段,使用专业化智能体协作完成:

复制代码
[规划阶段] → [写作阶段]
[CONFLICT] → [CHARACTER] → [SETTING] → [PLOT] → [EXPOSITION] → [RISING ACTION] → [CLIMAX] → [FALLING ACTION] → [RESOLUTION]

可以看到此处使用的是固定的 Agent Workflow,所以并没有显式的定义一个 Orchestrator 模块。

其中,每个基于大语言模型(LLM)的专用 Agent 都拥有一个特定的提示模板,该模板将暂存区(scratchpad)内容格式化为适合该LLM调用的合适提示。

Planning Agents

关于 Agent 提示词模板的说明:

从暂存区(scratchpad)中提取的 <identifiers> 被提取出来并格式化以适应提示词。例如,对于一个包含原始提示、[CONFLICT] 代理和 [CHARACTER] 代理贡献的暂存区,提取出的 <identifiers found in the scratchpad> 将是:"创意写作任务、核心冲突和角色描述"。

[CONFLICT]智能体:中心冲突定义者

  • 任务: 定义故事的核心冲突。

  • 输出内容: 详细描述主角的主要目标、其动机、阻碍其达成目标的障碍(反派或环境)、以及故事的核心矛盾。这为整个故事提供了驱动力。

    [CONFLICT] Agent Prompt
    Given <identifiers found in the scratchpad>, describe the central conflict in detail (more than 5 sentences). The description should answer the following questions:
    ⋆ What's the protagonist's main goal in this story?
    ⋆ Why do they want it?
    ⋆ What's stopping them from achieving it?
    <scratchpad>

[CHARACTER]智能体:角色塑造专家

  • 任务: 深度开发故事中的角色。

  • 输出内容: 描述主要角色的性格特质、背景故事、内在动机、价值观、恐惧和弱点。最关键的是,它会规划角色在整个故事中的成长弧线(即角色将如何变化和成长)。

    [CHARACTER] Agent Prompt
    Given <identifiers found in the scratchpad>, describe the characters in detailed bullet points (more than 5 sentences for each character). The description should answer the following questions:
    ⋆ What do the characters sound like? Are they talkative or quiet? What kind of slang do they use? What is their sense of humor like?
    ⋆ What do they look like? Do they have any defining gestures? What's the first thing people notice about them?
    ⋆ What are their motivations and internal characteristics? What are their flaws? What are their values? What are they afraid of? How will they change and grow over the course of this story?
    <scratchpad>

[SETTING]智能体:环境构建师

  • 任务: 构建故事的背景和世界观。

  • 输出内容: 详细描述故事发生的时间、地点、社会规则、科技水平或魔法体系等。这为故事提供了沉浸式的环境。

    [SETTING] Agent Prompt
    Given <identifiers found in the scratchpad>, describe the setting in detail (more than 5 sentences). The description should answer the following questions:
    ⋆ Where does the story take place? Is it set in a fictional world, or is it simply set in someone's backyard?
    ⋆ When does the story take place? What decade is it set in? How much time elapses over the course of the story?
    <scratchpad>

[PLOT]智能体:情节架构师

  • 任务: 规划故事的整体情节结构。

  • 输出内容: 概述故事的关键情节点,如开端、上升行动、高潮、下降行动和结局。它将抽象的冲突和角色融入到一个具体的时间线中。

    Given <identifiers found in the scratchpad>, describe the key plot points in detailed bullet points.
    <scratchpad>

Writing Agents

Writing Agents 中的五个 Agents 的提示词模板基本一样,使用时:

  1. <section> 替换为 EXPOSITIONRising ActionClimaxFalling ActionResolution 中的一个。

  2. <identifiers found in the scratchpad> 将会提取 scratchpad 中有需要的 identifier 的内容。

    Given <identifiers found in the scratchpad>, continue the story by writing the

    part.
    <If previous sections have been written, include the following in the prompt:>
    Begin your portion of the story in a way that naturally flows from the previous ending. Match the writing style, vocabulary, and overall mood of the existing text. Do not re-explain details or events that have already been described.
    <If this is not the meant to be the last section, include the following in the prompt:>
    Focus only on the
    part of the story. Do not write about the following parts of the story. Do not end the story.
    <scratchpad>

[EXPOSITION] 智能体:基调奠定者

  • 任务: 负责故事的开篇。介绍故事发生的世界(setting)、主要人物(character)以及基本情境。
  • 关键作用: 为读者提供必要的背景信息,将他们引入故事世界,奠定故事的基调。

[RISING ACTION]智能体:冲突发展者

  • 任务: 构建紧张感和冲突。描述主角为实现目标而采取的行动,以及他们所面临的挑战和障碍如何逐步升级。
  • 关键作用: 推动情节发展,增加故事的复杂性和悬念,让读者保持兴趣。

[CLIMAX]智能体:高潮创造者

  • 任务: 生成故事的最高潮部分。这是主角与主要冲突(central conflict)的最终对决或决定性时刻。
  • 关键作用: 提供故事中最具戏剧性和情感张力的场景,是整个叙事的顶点。

[FALLING ACTION]智能体:结果展示者

  • 任务: 描述高潮之后的情节发展。冲突的后果开始显现,故事的紧张感逐渐消退。
  • 关键作用: 处理高潮的余波,为最终的结局做铺垫。

[RESOLUTION]智能体:结局塑造者

  • 任务: 负责故事的收尾。交代人物的最终命运,解决剩余的悬念,为故事画上句号。
  • 关键作用: 提供情感上的满足感(closure),让读者感觉故事已经完整。

数据集 "TELL ME A STORY"

为了便于测评,作者构建了一个高质量的人类编写故事数据集,特点包括:

  • 包含123个训练样本、52个验证样本和55个测试样本
  • 提示(prompt)比现有基准更详细(平均113个词)
  • 目标故事长度显著(平均1,498个词),约为WRITINGPROMPTS数据集的两倍
  • 数据集通过专业作家工作坊创建:作家收到详细指南,撰写初稿,接受同行反馈,修订后提交给工作坊负责人进行最终审核

表1展示了"TELL ME A STORY"与其他常用故事生成基准的比较:


实验部分

论文的实验部分旨在回答一个核心问题:AGENTS' ROOM 框架是否能生成比现有基线系统更高质量的故事? 为了回答这个问题,作者设计了一套全面的实验方案,包括基线系统对比、人类评估和自动化评估。

实验设置

  1. 基座模型 (Backbone Model): 主要实验使用了 Gemini 1.5 Flash 模型。选择它的原因是该任务需要模型具备足够长的上下文窗口(处理包含多个代理输出的暂存区)和优秀的写作质量。
  2. 微调方法 (Fine-tuning): 由于数据集(TELL ME A STORY)规模较小,作者采用了高效的 LoRA (Low-Rank Adaptation) 方法进行微调。具体参数为:LoRA 秩(rank)为4,学习率通过超参数搜索确定为 1e-6,训练250步,批量大小(batch size)为16。
  3. 合成数据生成: 用于微调规划和写作代理的合成训练数据,是由一个更大的 Gemini Ultra 模型作为"教师模型"生成的(详见第4.2节)。

对比对象

为了公平对比,作者将当前最先进的叙事生成方法作为基线,这些方法都属于"端到端"(End-to-End, E2E)生成。论文将它们分为两类:

  • E2EZS (Zero-Shot):使用零样本提示,一次性生成整个故事。

  • E2EFT (Fine-Tuned):在 TELL ME A STORY 数据集上微调后的模型,一次性生成故事。

    此外,作者还探索了 E2EZS 的几种更精细的变体,以检验"规划"思想的有效性:

  • E2EZS plan:在生成故事前,先让模型生成核心冲突、角色、背景和情节。

  • E2EZS reflect:在生成故事前,让模型根据详细指南对核心要素进行"反思"。

  • E2EZS decompose:让模型在一次调用中自动分解计划并生成故事。

  • 2STAGE decompose:分两步,先生成计划,再基于计划生成故事。

Agents' Room 的变体

为了探究不同组件的贡献,作者评估了 AGENTS' ROOM 框架的几种变体:

  • ARZS plan+write:使用零样本提示的规划代理和写作代理。
  • ARFT plan+write:使用微调后的规划代理和写作代理。
    ARZS plan:仅使用零样本的规划代理 + 一个简单的 [FINALIZER] 写作代理。
  • ARFT plan:仅使用微调的规划代理 + 一个简单的 [FINALIZER] 写作代理。
  • ARZS write:仅使用零样本的写作代理(假设暂存区中已有规划内容)。
  • ARFT write:仅使用微调的写作代理(假设暂存区中已有规划内容)。

评估方法

论文采用了人类评估和自动化评估相结合的方式,从多个维度全面衡量故事质量。

人类评估

这是最核心的评估,直接反映人类对故事质量的偏好。

  • 评估方式:采用成对偏好比较(pairwise preferences)。将两个由不同系统生成的故事展示给评估者,让他们在多个维度上判断哪个更好。

  • 评估维度:评估者需要在以下四个维度以及一个整体偏好上进行比较:

    1. 情节 (Plot):故事是否有引人入胜的情节,逻辑是否连贯。
    2. 创意 (Creativity):故事是否新颖、有想象力。
    3. 发展 (Development):角色和情节是否得到充分发展。
    4. 语言使用 (Language Use):语言是否流畅、生动、有文采。
  • 评估流程:

    • 评估者是作家或拥有相关学科(如文学)学位的人,以保证专业性。
    • 采用拉丁方设计(Latin Square design)分配样本,确保每个评估者不会对同一个提示进行重复评分。
    • 随机化故事呈现顺序,以减少顺序偏差。
    • 由于任务耗时且费神,每个评估者一次最多评估5个样本。
  • 数据规模:共收集了 9,900 个成对评分。

  • 结果分析:使用 Bradley-Terry 模型 将成对比较结果转换为各系统的相对强度(relative strength),从而进行量化排名。

自动化评估

作为人类评估的补充,使用多种指标进行量化分析。

  • 基于参考的指标 (Reference-based):
    • Rouge-L:衡量生成故事与参考故事在n-gram上的相似度。
    • BertScore:基于BERT模型,衡量生成故事与参考故事在语义上的相似度。
  • 基于表面特征的指标 (Surface-based):
    • 故事长度:评估模型生成长篇故事的能力。
    • 唯一单词比例:衡量词汇多样性,反映创造性。
    • 句内/句间三元组重复率:衡量故事内部和故事之间的重复程度,反映多样性。
    • 三元组与提示的重叠度:衡量模型是否能创造性地扩展提示信息。
  • LLM-Based 评估器:使用 Gemini 1.5 Pro 作为自动评估器,模拟人类评估者的判断。它会阅读两个故事,并根据与人类评估相同的维度给出偏好判断。这种方法可以大规模评估,但其判断的可靠性需要验证。

实验结果

  1. AGENTS' ROOM 显著优于基线系统:

    • 在人类评估中,无论是零样本(ARZS plan+write)还是微调版本(ARFT plan+write),AGENTS' ROOM 生成的故事在所有维度上都显著优于所有E2E基线系统。
    • 微调代理效果更好:ARFT plan+write 的表现优于 ARZS plan+write,证明了使用合成数据进行微调是一种有效的策略。
  2. "规划"与"写作"代理缺一不可:

    • AR plan 变体(仅规划代理)表现不佳:这表明,即使有完美的规划,一个过于简单的写作代理也无法将其有效地转化为高质量的叙事文本。
    • AR write 变体(仅写作代理)表现优异:这证明了分段式、上下文继承的写作机制本身非常强大,能有效生成长而连贯的故事。
    • plan+write 组合效果最佳:当专业的规划代理和专业的写作代理协同工作时,系统达到了最高性能。这验证了"协作"和"专业化分工"的核心思想。
  3. 长度问题得到解决:

    • 实验结果(Table 2)明确显示,由于写作代理是"分段生成"(piecemeal),AGENTS' ROOM 生成的故事显著更长,有效解决了E2E系统生成故事过短的问题。
  4. 自动化评估与人类评估的相关性:

    • 基于表面特征的指标(如长度、唯一词比例)能解释部分人类偏好。
    • LLM-Based 评估器的结果与人类评估高度一致(Table 3),这表明使用强大的LLM作为自动化评估器是可行的,为未来大规模评估提供了可能。

总结

AGENTS' ROOM 对如何构建高质量叙事生成系统的提供了参考:

  1. 协作优于单一模型:将复杂任务分解并由专业代理协作完成,比单一模型一次性生成更有效。
  2. 结构化优于自由生成:基于叙事理论的结构化生成,比自由生成更能保证故事质量。
  3. 人类评估仍是金标准:尽管自动化评估取得进展,但人类对故事质量的判断仍是不可替代的。

这一研究为创意写作辅助系统、教育工具和娱乐内容生成等领域提供了重要的技术基础和理论指导。