共计 2337 个字符,预计需要花费 6 分钟才能阅读完成。
Agent 长篇小说生成技术解析:从架构设计到生产实践
背景痛点
-
上下文窗口限制 :传统 Transformer 模型(如 GPT)的上下文长度有限,难以维持数万字文本的全局一致性。当生成超过 2048 个 token 时,早期设定的角色特征和伏笔容易丢失。

-
角色行为漂移 :随着章节推进,同一个角色的说话风格、行为模式可能发生突变。例如:第一章沉稳的侦探在第五章突然变成话痨。
-
情节逻辑断裂 :传统续写模式容易产生时间线混乱(如 ” 死者突然复活 ”)或地理矛盾(如 ” 角色同时出现在两个城市 ”)。
技术方案
分层记忆架构
- 短期记忆 (最近 3 - 5 个段落):
- 使用滑动窗口缓存最近的文本片段
-
通过键值对存储当前场景的状态(时间 / 地点 / 在场角色)
-
长期记忆 :
- 角色档案库:记录每个角色的外貌特征、口头禅、关键经历
-
情节时间轴:以有向图形式存储已发生的重要事件
-
元记忆 :
- 风格模板:管理整体文风(如 ” 悬疑推理 ” 需要保持 30% 的描写 +70% 的对话)
- 冲突检查器:防止出现物理规律矛盾(需预定义常识规则库)
动态角色建模
class CharacterModel:
def __init__(self, base_persona: Dict):
self.core_traits = base_persona # 不可变的初始设定
self.dynamic_states = {'mood': 0.5, # [-1,1] 情绪值
'relationships': {} # 与其他角色的亲密度}
def update(self, event: str):
"""根据事件更新角色状态"""
if "战斗" in event:
self.dynamic_states['mood'] -= 0.2
elif "获得奖励" in event:
self.dynamic_states['mood'] += 0.3
连贯性保障机制
-
锚点重注入 :每生成 500token 后,自动将关键信息(主角姓名、当前目标等)重新插入到模型输入
-
回溯校验 :
- 使用 NLP 规则检查时间 / 地点突变(如检测到 ” 第二天 ” 但前文是 ” 午夜 ” 则触发警告)
- 通过实体识别验证角色称呼一致性(避免 ” 王警官 ” 突然变成 ” 老王 ”)
核心代码实现
from transformers import GPT2LMHeadModel, GPT2Tokenizer
import torch
class NovelAgent:
def __init__(self, model_name="gpt2-medium"):
self.tokenizer = GPT2Tokenizer.from_pretrained(model_name)
self.model = GPT2LMHeadModel.from_pretrained(model_name)
self.memory = {'short_term': [],
'characters': {},
'timeline': []}
def generate(self, prompt: str, max_length=200) -> str:
# 记忆注入:将关键信息拼接到原始输入
enriched_input = self._augment_with_memory(prompt)
inputs = self.tokenizer(enriched_input, return_tensors="pt")
with torch.no_grad():
outputs = self.model.generate(
inputs.input_ids,
max_length=max_length,
temperature=0.7,
top_k=50,
no_repeat_ngram_size=3 # 避免短语重复
)
new_text = self.tokenizer.decode(outputs[0], skip_special_tokens=True)
self._update_memory(new_text)
return new_text
def _augment_with_memory(self, text: str) -> str:
"""将角色设定等记忆信息注入到输入文本"""
memory_prompt = ""for name, char in self.memory['characters'].items():
memory_prompt += f"{name} 的特征:{char['description']}\n"
return f"{memory_prompt}\n 当前情节:{text}"
生产环境优化
- GPU 内存管理 :
- 使用梯度检查点(gradient checkpointing)减少显存占用
-
对长文本采用分块处理,每 2000token 做一次记忆压缩
-
生成质量平衡 :
- 动态调整 temperature 参数:情节高潮处用 0.4(确定性高),日常描写用 0.9(多样性高)
-
对暴力 / 色情内容采用关键词过滤 + 语义检测双保险
-
加速技巧 :
- 预加载模型到 FP16 精度
- 使用缓存机制避免重复计算角色特征
避坑指南
- 角色混淆问题 :
- 现象:双胞胎角色 A 和 B 的行为特征互相污染
-
解决:为每个角色维护独立的状态编码(state embedding)
-
时间线崩塌 :
- 现象:出现 ” 他在参加葬礼的同时正在逛街 ” 的矛盾
-
解决:实现时空谓词逻辑检查器
-
重复循环 :
- 现象:同一描述反复出现(如 ” 他紧张地摸了摸鼻子 ” 连续出现 5 次)
- 解决:启用 n -gram 惩罚(no_repeat_ngram_size=3)
结语
当前架构已支持生成 10 万字级别的连贯小说,下一步可扩展:
- 多模态支持:为角色生成对应肖像画(Stable Diffusion 接口)
- 交互式创作:允许读者通过选择分支影响剧情发展
- 情感计算:根据读者心率等生物信号动态调整情节张力
建议从简单的记忆模块开始迭代,逐步加入更多认知维度。记住:好的 AI 作家不是一次写成长篇,而是能像人类一样持续积累和回忆。
正文完

