☰
AI长篇写作防崩指南:用状态管理把记忆外置到上下文
2026/10/6 10:42:34 网站建设 项目流程

用AI写长篇这件事,我身边越来越多人尝试过。小说写手拿来写网文连载,自媒体拿来写系列科普,产品经理拿来写万字PRD,大家几乎都会撞上同一堵墙:开头惊艳,越长越崩。你让AI写第1章,它像模像样,人物鲜活得能蹦出来;写到第7章,它忘了主角是个左撇子,把第3章埋的伏笔丢得一干二净,剧情在同一个困境里绕了三圈,最后还能在结尾突然赶火车一样把所有矛盾草草收掉。

问题不是你不会提问,也不是AI太笨,而是长篇写作本质上是一个状态管理问题。AI大模型的生成方式是逐词预测,它并没有一个真正长期存在的记忆。写第10章的时候,模型只能看到当前上下文窗口里的内容,第1到第5章的细节早就被挤出了窗口。它不是"忘了",是压根儿没看见。

我在反复踩坑之后,把遇到的每种崩法都做成了对应的"代码"。这里的代码有两层含义:一层是可复用的提示词模板,我叫它写作代码块;另一层是真正用来管理章节状态和伏笔追踪的小脚本。两种合起来,就是我这套解决长篇写崩问题的方法。这篇东西不是理论,全是我自己写连载、写系列长文时一步步试出来的,适合正在用AI写长篇的人直接抄作业。

1. 先说清楚:AI长篇写作到底是怎么写崩的

1.1 我从翻车现场里总结出的五大通病

我前前后后写了十几个长篇项目,每崩一次就记录一次症状,最后发现所有翻车现场其实都可以归成五类。

通病表现根本原因
上下文失忆设定、人名、伏笔大面积丢失核心细节被挤出了上下文窗口
人物漂移主角性格前后不一致,行为逻辑断裂缺少可注入的人物状态约束
剧情回环反复描写相似冲突,故事没有推进缺少事件发生清单和状态锁
空洞注水句子语法正确但信息量为零缺少具体化指令和细节密度要求
结尾烂尾高潮被压缩,伏笔被硬收缺少全局结局锚点与收束规划

这五个问题不是独立出现的。实际情况通常是上下文失忆诱发人物漂移,人物漂移导致情节推进不下去,AI只好靠注水填空,最后收不住就烂尾。一条完整的崩坏链。

1.2 底层原因:模型眼里没有"50章之前"

聊解决方案之前,得先弄明白模型为什么会有这些通病。Transformer架构的生成原理是:根据前面所有的token,预测下一个token的出现概率。所以它每一句话都是合格的,每一段都是通顺的,但它的规划范围只限于当前窗口。上下文窗口就是模型一次性能"看到"的内容上限,常见的是几千到十几万个token。如果你把一部20万字的长篇全部扔进去,后面的token会把前面的内容冲掉,相当于你的第10章是在"不知道第1章写了什么"的情况下生成的。

这个特性决定了AI天然适合写片段,不适合写长卷。它像一个记忆力很差的天才写手,单看任何一段都才华横溢,但你让它写完一整本书,它记不住自己前面埋了什么雷。

1.3 解决思路:把"记忆"从模型内部搬到外部

既然模型内部没有稳定记忆,那就不要在模型内部找答案,而是把记忆外置到你自己可控的文件、模板和脚本里。这就是我做代码的出发点:

  • 人物状态卡负责记录人物,每次生成前重新加载。
  • 事件状态追踪表负责锁死剧情,防止AI无中生有或绕圈。
  • 细节密度清单负责防止注水。
  • 结局锚点负责防止烂尾。
  • 上下文注入脚本负责把这些东西自动拼装,塞进每一条生成请求。

这套方法本质上是把一个不擅长长程记忆的模型,改造成一个"每章都带着完整备忘录开工"的写手。你不用提升模型的记忆力,只要每次开工前把备忘录摆在它面前就行。

2. 通病一:设定与人物"见光死",我用人物状态卡治它

2.1 症状与根因

写网文最怕人物崩。第1章那个冷静克制、外冷内热的刑警,到第9章突然变成了话痨暖男,读者第一个炸。但你怎么怪AI?你每次对话都是从零开始的,它根本不知道主角在第1章说过什么话、做过什么事。

很多人的第一反应是把"人设"写进第一句提示词,比如"你是一个冷酷的刑警"。但冷酷这个词太抽象,AI生成出来的冷酷只有一种模板:话少、眼神冷、动作干脆。等你写到第20章,这个脸谱化角色已经没有任何新意了。真正的角色是具体的:他左手习惯还是右手习惯,他遇到危险时先保护谁,他有什么绝对不能触碰的底线。

2.2 对症代码:人物状态卡模板

我做的第一个人物状态卡长这样:

【人物状态卡】角色名:林澈 【基本属性】年龄:29;性别:男;职业:刑警 【性格基线】冷静、克制、不轻易表达情绪;外冷内热 【行为规则】遇到威胁时优先保护无关人员;不抽烟;左撇子 【当前状态】第7章结束时:右手受伤,住处被人侵入 【禁忌】绝不可能背叛搭档 【已用伏笔】第3章提到父亲留下的怀表,尚未揭晓

看起来像普通笔记,核心是注入时机。每次生成新章节之前,把这份状态卡连同上一章末尾一起喂给模型,让它先吸收设定,再开始写。我把这个动作叫作重新加载上下文。这跟写代码之前先看一遍需求文档是一个道理。

2.3 实操:把人物状态卡做成自动注入

手贴状态卡能做,但很烦。我现在靠一段脚本自动加载,把人物卡、世界观和上一章结尾拼成一个提示词,直接丢给模型。

import json def load_context(character_file, world_file, last_chapter): with open(character_file, "r", encoding="utf-8") as f: characters = json.load(f) with open(world_file, "r", encoding="utf-8") as f: world = f.read() character_text = json.dumps(characters, ensure_ascii=False, indent=2) context = ( "【世界观设定】\n" + world + "\n\n" "【人物状态】\n" + character_text + "\n\n" "【上一章结尾】\n" + last_chapter + "\n\n" "请严格依据以上信息续写下一章。" "不允许出现与人物状态卡矛盾的行为、对话和习惯。" ) return context

这段脚本本身没什么高深的,重点在于它逼迫你维护好characters.json。每次章节更新之后,你都要打开这个JSON,把人物当前状态改掉。比如林澈右手受伤这件事,如果第8章没写他康复,那第9章他就不能徒手跟人搏斗。状态卡记一笔,模型就老实一笔。

这里有一个特别容易踩的坑:JSON字段不要贪多。我一开始把角色的童年经历、家庭关系、喜欢吃什么全塞进去,结果发现上下文被无关信息占满,反而把真正重要的当前状态挤掉了。人物状态卡只保留三个部分:不会变的基本设定、当前会影响剧情的动态状态、绝对不能违背的禁忌。什么童年阴影、星座血型,等写到相关情节再单独补。

3. 通病二:剧情逻辑断裂与无限绕圈,用事件状态追踪表锁死进度

3.1 症状与根因

AI写长篇写到中期,会出现一种我称之为伪进展的现象。看起来每章都有新情节,但整体上故事一步都没往前走。主角刚到A地又被传送回B地,反派死了一次下一章又活了,同一个悬念每次翻章都重新抛出来。为什么会这样?因为模型在生成每一章时,只追求单章内部的自洽,它没有能力核对已经发生的事件清单。

这是长篇写作最难治的一个病。人物漂移你还能靠状态卡约束,剧情逻辑问题则需要一套更复杂的机制——事件锁。

3.2 对症代码:事件状态追踪表

事件状态追踪表是我最先完善的工具,核心思想是:把已经发生的事实记录下来,并且明确告诉模型这些事实不可推翻。

【事件状态追踪表】 - 事件编号:E-01 章节:第3章 人物:林澈、苏薇 关键动作:取得怀表 结果:怀表在苏薇手里 后续影响:苏薇身份存疑 - 事件编号:E-02 章节:第5章 人物:苏薇 关键动作:苏薇谎称怀表丢失 结果:林澈暂时相信 后续影响:苏薇的谎言是后期关键爆点

3.3 实操:把事件锁写进提示词

生成新章节之前,把事件追踪表整理成一段铁律,直接放在提示词最上方:

【铁律】以下事件已经发生,不得推翻、不得遗忘、不得重复发生: 1. 林澈在第3章取得了怀表。 2. 怀表目前由苏薇保管。 3. 苏薇在第5章向林澈谎称怀表丢失。 4. 林澈右手在第7章受伤,尚未痊愈。 请续写下一章。新章节可以创造新事件,但必须与以上事件保持一致。

我试过很多复杂prompt,最后发现最有效的反而是这种简单直白的条件约束。模型写崩往往不是因为它不知道怎么写,而是因为没人告诉它哪些是记忆里必须存在的东西。你把事件清单摊开,它就不会自己脑补出一个新的怀表去向。

分享一个实操细节:事件追踪表每章都要更新,更新的动作最好固定在写完之后马上做。我一开始是写三五章才回头补一次,结果刚补完上一章,下一章又写了一章新冲突,旧事件彻底对不上号了。后来我每章生成完,第一件事就是打开events.md,追加新事件,同步修改旧事件的后续影响。坚持了大概十章,整个剧情线的连贯性明显上了一个台阶。

4. 通病三:内容空洞、套话连篇,用细节密度清单逼它写具体

4.1 症状与根因

AI写的长篇里,水是最常见的现象。它太会写那种正确但没有信息量的句子了:"他感到一丝不安,仿佛有什么事情即将发生""她的眼神里透着复杂的光芒"。这种句子连写十段,剧情还是原地踏步。根因在于模型生成文本时倾向输出概率最高的表达,而概率最高的表达往往是概括性的、模糊的、放之四海而皆准的。

这个问题本职工作叫注水,放在长篇写作里是致命的。读者可以容忍一章的过渡,但容忍不了连续五章都是这种内容。

4.2 对症代码:五感写作卡

我给每章生成写了一个细节密度清单,要求生成的文本必须覆盖以下要素:

  • 具体动作:不是情绪概括,而是身体行为。比如"他攥紧拳头"而不是"他愤怒"。
  • 实物细节:场景里有具体物品,有气味、声音、光影,不只是"房间很暗"。
  • 对话潜台词:两个人的对话不能是简单的一问一答,必须有弦外之音。
  • 时间与空间锚点:读者能清楚知道现在是几点、在哪个城市哪个房间。

把它做成提示词,放在章节生成指令里:

【写作要求】 本段要求使用细节密度清单: - 每个角色至少有1个具体的身体动作 - 场景至少包含2个可感知的实物细节 - 对话中至少有1处潜台词 - 每章开头100字内交代时间和空间锚点

4.3 实操:空洞写法与细节写法的现场对比

同样一个情节,直接让AI写和加了细节清单的AI写,差距非常直观。

空洞版:

林澈走进了房间,看到苏薇坐在窗边。他心里很复杂,不知道该不该相信眼前这个女人。空气里弥漫着紧张的气氛,他总觉得有什么事情要发生了。

细节版:

林澈推门时,门轴发出一声尖锐的吱呀。房间里的白炽灯闪了一下,窗边坐着的苏薇手里握着一只已经凉透的茶杯,茶水表面浮着一层细小的白色泡沫。他把右手藏进风衣口袋,指尖碰到绷带粗糙的布面。苏薇没有抬头,只说了一句:"你来得真晚。"她面前的窗台上,那只怀表不见了。

很明显,第二版的信息密度完全不同。读者能从"右手藏进口袋"看到林澈的伤,从"怀表不见了"看到剧情冲突,从"凉透的茶杯"看到等待时间。细节不是装饰,细节就是剧情的容器。

4.4 补充技巧:图层展开法

我在写长篇时还有一个习惯,叫图层展开。把每一段文本拆成动作层、环境层、心理层三个维度。动作层负责推进情节,环境层负责氛围渲染,心理层负责角色情绪。跟AI说清楚这个分层逻辑之后,提示词长这样:

请按图层展开本段: 1. 先写动作层:主角做了什么,怎么做的。 2. 再写环境层:周围有什么,光线、声音、气味。 3. 最后穿插心理层:角色此刻的判断和怀疑。 要求三层交替分布,禁止写成整段心理独白。

这招直接治住了AI爱写大段情绪独白的毛病。因为如果你不指挥它,模型会自然地沉溺在"他感到""他觉得""他意识到"里面,整页纸没有一个人做事情。

5. 通病四:结局烂尾或突然加速,用逆提纲和收束检查兜底

5.1 症状与根因

长篇最怕烂尾,AI尤其容易烂尾。写到后半段时上下文压力越来越大,模型判断"尽快结束"反而是概率最高的选择,于是主角突然大爆发打败反派,伏笔什么都还没解释,整本书就戛然而止。这种体验就像追了三个月的小说,最后两章签约作家跑路了。

5.2 对症代码:逆提纲法

我解决烂尾的方法是在动笔之前就先想好结局,这个动作叫逆提纲。不是从第1章往后推,而是先把最后一章的关键事件写出来,再往回倒推每一章该往哪个方向走。

实际操作时,我把结局锚点写成一个固定字段,注入每一次章节生成:

【结局锚点】 最终结局设定: 林澈最终发现苏薇才是幕后黑手,但在关键时刻选择保护她。 所有伏笔必须在最后一章收束: - 怀表的真正用途 - 林澈父亲死亡的真相 - 苏薇的真实身份 请确保本章情节向结局锚点推进,不得写出与结局方向完全无关的章节。

这个锚点相当于给AI的导航终点。它不是规定每一章必须发生什么,而是保证每章都在朝同一个方向走,不会迷路。

5.3 实操:收束条件自查清单

光有锚点还不够,我还做了一张收束条件自查清单,每写两三章就跑一遍:

【收束检查】 请检查当前章节是否满足以下条件: - 怀表伏笔:是否已经解释其用途? - 父亲之死:是否已经揭晓真相? - 苏薇身份:是否已经揭示? - 未满足的部分,后续章节中是否已有潜在安排? 如果没有,请给出下一章可以铺垫的方向建议。

这个检查单独作为一轮对话,不要和章节生成混在一起。它的作用不是让AI改稿,而是让你自己看清当前离结局还差几步,哪些伏笔在悄悄流失。

5.4 代码化:伏笔闭环检测脚本

如果项目够长,纯靠人脑记伏笔也不靠谱。我写了一个很简单的伏笔检测脚本,逻辑就是维护一张伏笔清单,每章标注状态,最后自动列出未闭环的项。

def check_plot_hooks(hooks_file): with open(hooks_file, "r", encoding="utf-8") as f: hooks = json.load(f) unresolved = [] for hook in hooks: if hook["status"] != "closed": unresolved.append(hook["name"] + " | 涉及章节: " + hook["opened_chapter"]) if unresolved: print("以下伏笔尚未闭环:") for item in unresolved: print("- " + item) else: print("所有伏笔均已闭环,可以安心收尾。")

脚本很简单,但跑起来很爽。每次写完一章更新伏笔状态,扫一眼输出结果,哪条线没跟上立刻一目了然。

6. 通病五:多线并行时全线失控,用主支线矩阵理顺脉络

6.1 症状与根因

写长篇只要稍微有点规模,几乎逃不开支线。主角查案是主线,反派视角是副线,配角的感情线偶尔也要出来透口气。AI最怕这种多线程任务,它没有能力同时维护几条线的因果关系,经常把支线写成独立短篇,主角在主线里下一步要干什么,等回到主线的时候已经完全接不上了。

6.2 对症代码:主线支线矩阵

我建了一个主线支线矩阵表,把所有进行中的线索都放在一张表里管理。

线名类型目标涉及人物下一场关键戏优先级
怀表谜案主线查明怀表与父亲死亡真相林澈、苏薇苏薇谎称怀表丢失被识破P0
警察局内鬼支线A找出泄露消息的内鬼林澈、老周林澈发现老周深夜进入档案室P1
苏薇的救赎支线B揭示苏薇真心并推动她反转苏薇、林澈苏薇与幕后黑手通话被林澈撞见P1

这张表的最重要作用是让AI知道当前主战场在哪。我在每次生成之前会加一段线序说明:

【当前线序】 当前主线:怀表谜案。本章围绕主线推进。 支线A:警察局内鬼。本章如涉及,描写不超过500字。 支线B:苏薇的救赎。本章场景控制在对话内,不触发大冲突。 支线场景结束后必须回到主线,不允许连续两章只写支线。

6.3 实操:把支线显式化

很多人写长篇会犯一个隐性错误:默认AI知道哪条线是主线。实际上模型根本不知道,你不在提示词里标明线序,它每一章都会随机抽取一条线写。有时候写了一整章配角的感情戏,主角的案子一点没推进,你还得回头删稿重写。

后来我强制自己每章开头标注本章归属线,这样AI才不会跑偏。把支线显式化还有一个好处,就是你自己也更容易控制节奏。主线写得太紧了,就安排一章支线缓冲;主线松了,就把支线停掉,专心推主线。这个节奏感,是在线序矩阵里直接体现出来的。

7. 把五套代码打包成一套可用的长篇写作流水线

7.1 目录设计与文件规范

以上五套方案分开用,各自都能解决一个问题,但真正好用是把它们组装成一个系统。我用了一个非常简单的文件夹结构来管理所有写作项目,直接分享出来:

novel_system/ ├─ 00_config/ │ ├─ world.md # 世界观、基本规则、地理气候 │ ├─ characters.md # 人物状态卡汇总 │ ├─ timeline.md # 时间线,记录每章经过的时间 │ ├─ plot_hooks.md # 伏笔清单 │ └─ events.md # 事件状态追踪表 ├─ 01_templates/ │ ├─ chapter_gen.md # 章节生成模板 │ ├─ state_update.md # 状态更新模板 │ ├─ plot_check.md # 剧情一致性检查模板 │ └─ ending_check.md # 收束检测模板 ├─ 02_scripts/ │ ├─ context_injector.py # 上下文注入脚本 │ └─ hook_checker.py # 伏笔闭环检测脚本 └─ 03_output/ ├─ chapters/ # 每章正文 └─ state_backup/ # 状态备份

这套目录本身没什么技术含量,但它解决了一个很现实的问题:写作状态到底是放在脑子里还是放在文件里。你每写十章,状态文件就是你的记忆外挂。哪怕隔了一个月再回来写,只要把config目录打开,全貌立刻恢复。

7.2 操作流水线:七步工作法

有了目录和脚本,我每章的实际操作流程固定为七个步骤。

第一步,定主线与结局。新项目动笔前,先用逆提纲法写出结局锚点和主线方向,写进world.md。

第二步,建人物状态卡。给主要角色建卡,填基本属性、行为规则、禁忌,暂空当前状态。

第三步,每章先写大纲。一小段就好,100字左右,说清楚本章发生在哪里、由谁推动、解决什么问题、朝结局推进多少。

第四步,注入上下文生成。用context_injector.py把世界观、人物卡、事件表、上一章结尾、本章大纲拼装成完整提示词,喂给模型生成正文。

第五步,更新状态。打开events.md,追加本章新事件,同步修改人物当前状态和伏笔表。

第六步,一致性巡检。用plot_check.md做一轮快速检查,确认没有出现矛盾设定。

第七步,伏笔闭环扫描。运行hook_checker.py,看哪些伏笔未闭环,及时在下一章安排收束。

这套流程看起来繁琐,实际上跑熟之后一章只需要十分钟左右。其中第四步生成占大头,第五和第七步加起来三分钟。但就是这三分钟的固定动作,把我原来写到第20章必崩的魔咒破掉了。

7.3 几条保住性命的实操经验

这些经验全部来自翻车之后,每一条都是真金白银换来的。

第一,不要一次性把整个世界观全扔给模型。我第一版把world.md写了两千字,注入进去之后把上下文塞得满满当当,模型反而不知道该关注什么,生成的章节既没重点也没风格。后来只保留当前剧情真正相关的规则,状态瘦身之后效果立竿见影。

第二,每章的大纲阶段不能省。你要让AI写的是一章有明确目标的章节,而不是"故事自然发展"。没有目标的章节,模型就会用自己最喜欢的套路写,三章之后所有章节结构全部雷同。

第三,跑偏了立刻打断,不要将错就错。如果生成到一半发现人物说了一句完全不符合设定的话,直接停止,重新调整提示词再生成。你让它把整章写完再改,这个错误可能已经渗透进后面的文本里了。

第四,定期备份状态文件。state_backup目录里的备份我是每五章做一次,全项目打包压缩。AI生成的文本本身不贵,但状态文件里的设定和事件表积累起来之后非常值钱,丢一次心态直接崩。

8. 写在最后:别指望AI记住,你要替它记住

这套方法我自己用了将近半年,最大的收获不是让AI写的每一章都完美,而是让崩坏变得可控。以前写到20章只能扔掉重来,现在写到20章还能清晰地指出是第几章开始发飘,具体是哪个角色出了问题,哪条事件链断了。这种掌控感,比任何prompt技巧都重要。

这五套代码不是什么黑科技,本质上是把写作这件事工程化了。人物状态卡是实时更新的人设表,事件追踪表是剧情的事实数据库,细节清单是防注水规范,结局锚点是导航终点,注入脚本是每天开工前的例行检查。它们合在一起,解决了AI最不擅长的问题:把散装文本变成一条贯穿始终的长线。

最后再分享一个小技巧。每次写完一章,花三十秒问AI一个问题:"本章如果全部删掉,后面的故事是否还能成立?"如果答案是能,那这就是一章水章,下一章必须大幅推进。这个问题我试过很多次,比任何复杂的结构分析都直观。

AI写长篇不崩的秘诀,说到底就一句话:别指望模型拥有好记性,你要做那个把备忘录一直摊在它面前的导演。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询