LLM应用工程中的DreamPress AI小说工具。你将学习DreamPress的AI辅助小说创作、角色管理、情节生成、多章节连续性、与ChatGPT对比,以及如何利用AI工具进行交互式小说创作,适合内容创作者学习。

岗位关联

需要学习DreamPress AI小说,了解AI应用开发能力边界才能评估方案可行性。本篇涵盖LangChain/RAG/Agent、API集成、向量数据库,帮助你构建AI应用系统能力。

目录
  1. 可视化演示
  2. DreamPress 产品总览与AI小说创作定位
  3. AI辅助叙事生成与情节推理引擎
  4. AI 应用场景
  5. Python 演示
  6. 常见问答
  7. 常见误区
  8. 参考来源

可视化演示

交互展示DreamPress平台的角色管理、情节生成和多章节连续性等AI辅助创作核心功能,理解交互式故事创作流程。

本节配有交互动效(进入视口后自动加载,约 3KB)。

角色管理与关系网络 AI自动生成角色性格与背景设定 角色关系图谱动态演化 Char → Plot 角色驱动情节发展

DreamPress 产品总览与AI小说创作定位

DreamPress 是一款专注于 AI 辅助小说创作的垂直领域平台,其核心定位是利用大语言模型 (LLM) 为作者提供从构思、大纲、角色设定到多章节连续写作的全流程智能辅助。与通用型 AI 对话工具不同,DreamPress 将小说创作中的核心痛点——角色一致性、情节连贯性、多章节上下文记忆——作为产品设计的出发点。

在产品架构层面,DreamPress 将小说创作拆解为三个核心模块:角色管理系统 (Character Management System)、情节生成引擎 (Plot Generation Engine) 和多章节连续性引擎 (Multi-chapter Continuity Engine)。角色管理系统负责维护人物档案、性格特征和人物关系网络;情节生成引擎基于 Plot Prompt 模板和三幕式结构对 LLM 输出施加叙事约束;连续性引擎则通过摘要链与向量检索的混合记忆架构解决长文本上下文问题。

DreamPress 的目标用户群体包括网络小说作者、独立出版作家以及互动小说开发者。平台支持多种小说类型,包括玄幻、言情、悬疑、科幻等,每种类型都有预置的叙事模板和风格参数。用户可以通过交互式界面与 AI 协作,逐步推进故事发展,同时在关键节点做出分支选择,形成独特的交互式小说体验。

从技术视角来看,DreamPress 的核心挑战在于:如何在 LLM 有限的上下文窗口内,维持一部数十万字甚至上百万字小说的角色一致性和情节连贯性。这需要在推理服务层面设计精巧的上下文注入策略,将有限的 token 预算分配给角色档案、前情摘要、当前章节大纲等关键信息。

AI辅助叙事生成与情节推理引擎

DreamPress 的情节推理引擎是整个系统的叙事核心,它负责将用户的创作意图转化为结构化的小说文本。该引擎的关键设计理念是:不对 LLM 进行完全自由的生成,而是通过 Plot Prompt 模板 (情节提示模板) 对输出施加叙事结构约束,确保生成的内容符合小说创作的基本规律。

Plot Prompt 模板的核心是三幕式结构 (Three-Act Structure),即将故事划分为铺垫 (Setup)、对抗 (Confrontation) 和解决 (Resolution) 三个阶段。在推理服务中,系统会根据当前章节所处的幕次,向 LLM 注入不同的叙事约束。例如,在第一幕中,提示模板会要求 LLM 着重建立世界观、引入主要角色和铺设核心冲突;在第二幕中,则要求升级冲突、制造转折和深化角色发展。

除了三幕式结构,DreamPress 还实现了多种叙事约束机制。叙事张力曲线 (Narrative Tension Curve) 用于控制情节的起伏节奏,避免故事过于平淡或过于紧凑。伏笔管理系统 (Foreshadowing Manager) 跟踪已埋下的伏笔,并在适当的时机提醒 LLM 进行回收。类型惯例约束 (Genre Convention Constraints) 则根据不同小说类型的读者期待,对情节走向施加合理的限制。

在技术实现上,情节推理引擎采用分层提示策略 (Hierarchical Prompting Strategy)。第一层是全书大纲,提供宏观的故事走向;第二层是卷/章节大纲,提供中观的情节安排;第三层是场景级提示,提供微观的具体描写指导。这种分层策略使得 LLM 在生成每一段文本时,都能获得恰当的上下文信息,既不会因信息过多而迷失方向,也不会因信息过少而偏离主线。

角色管理系统与人物一致性维护机制

角色管理系统是 DreamPress 区别于通用 AI 写作工具的核心差异化能力之一。该系统维护一个结构化的角色档案数据库 (Character Profile Database),每个角色档案包含基础信息 (姓名、年龄、外貌)、性格特征 (使用大五人格模型或自定义标签)、背景故事、说话风格、核心动机以及与其他角色的关系网络。

在推理服务中,角色档案通过上下文注入 (Context Injection) 机制传递给 LLM。由于 token 预算有限,系统不会将全部角色档案注入,而是根据当前章节涉及的出场角色,动态选择相关角色的核心信息进行注入。这种按需注入策略 (On-demand Injection Strategy) 是 DreamPress 上下文管理的关键设计之一。

人物一致性维护 (Character Consistency Maintenance) 是长篇小说 AI 创作的最大挑战之一。DreamPress 采用多重机制来保障一致性:第一,对话风格约束——在提示中明确指定角色的说话方式和口头禅;第二,行为逻辑约束——根据角色的性格特征和当前情境,约束角色的可能行为范围;第三,关系状态追踪——实时更新角色之间的关系状态,避免出现关系矛盾。

角色关系网络 (Character Relationship Network) 以图结构存储角色之间的关系,包括关系类型 (亲属、朋友、敌对、恋人等)、关系强度和关系变化历史。在生成涉及多角色互动的场景时,系统会查询关系网络,确保角色之间的互动方式与既定关系一致。当剧情发展导致关系变化时,系统会自动更新关系图谱,并在后续生成中反映这些变化。

多章节连续性的上下文记忆架构

多章节连续性是长篇小说 AI 创作的核心技术难题。一部网络小说可能有数百章、数十万字,而即便是最先进的 LLM,其上下文窗口也无法容纳全部文本。DreamPress 采用摘要链加向量检索的混合记忆架构 (Summary Chain plus Vector Retrieval Hybrid Memory Architecture) 来解决这一问题。

摘要链 (Summary Chain) 机制的核心思想是:对每一章的内容生成结构化摘要,形成一条由摘要组成的链条。当需要为第 N 章的生成提供上下文时,系统会提取第 N-1 章的详细摘要、前几章的简要摘要以及更早章节的高度压缩摘要。这种分层摘要策略 (Hierarchical Summarization Strategy) 在有限的 token 预算内,最大化了上下文的覆盖范围。

向量检索 (Vector Retrieval) 作为摘要链的补充,用于处理需要精确回忆特定细节的场景。系统将所有章节文本切分为段落级别的文本块 (Chunk),通过嵌入模型 (Embedding Model) 转化为向量,存储在向量数据库中。当生成某一段落需要参考历史细节时,系统会根据当前上下文进行语义检索,找出最相关的历史段落注入提示中。

Token 预算管理 (Token Budget Management) 是混合记忆架构的关键调度层。系统需要为不同类型的上下文信息分配 token 配额:角色档案占一定比例,前情摘要占一定比例,向量检索结果占一定比例,当前章节大纲占一定比例。预算分配策略可以根据小说类型和创作阶段动态调整。例如,在角色对话密集的场景中,角色档案的 token 配额会增加;在情节推进的关键节点,前情摘要的配额会增加。

交互式小说的分支叙事与用户选择机制

DreamPress 支持交互式小说 (Interactive Fiction) 创作模式,允许读者在关键节点做出选择,影响故事的走向。这一功能的技术基础是分支叙事系统 (Branching Narrative System),其核心数据结构是决策树 (Decision Tree)。决策树的每个节点代表一个故事状态,边代表用户的选择,叶子节点代表故事的结局。

状态变量 (State Variables) 是分支叙事系统的关键机制。系统维护一组全局状态变量,记录玩家的选择历史和关键剧情标志。例如,变量 player_alliance 可以记录玩家当前所属的阵营,变量 npc_trust 可以记录特定 NPC 对玩家的信任度。这些状态变量决定了后续可用的分支选项,以及 AI 生成内容的情节走向。

动态分支生成 (Dynamic Branch Generation) 是 DreamPress 的创新功能之一。与传统互动小说需要作者预先编写所有分支不同,DreamPress 利用 LLM 根据当前状态变量和故事上下文,实时生成合理的分支选项和后续情节。这大大降低了交互式小说的创作门槛,同时提供了几乎无限的故事可能性。

为了保证分支叙事的质量,DreamPress 引入了分支一致性校验 (Branch Consistency Verification) 机制。当 LLM 生成分支内容后,系统会检查新内容是否与已有的故事状态矛盾,是否违反了已建立的设定,以及是否合理地利用了之前的伏笔。只有通过校验的内容才会呈现给用户。

DreamPress 与 ChatGPT 及 NovelAI 差异化对比

DreamPress 与 ChatGPT 在小说创作领域存在本质差异。ChatGPT 是通用型大语言模型,虽然具备强大的文本生成能力,但缺乏针对小说创作的专业化设计。在角色管理方面,ChatGPT 没有内置的角色数据库,需要用户在每次对话中重复描述角色信息;而 DreamPress 的角色管理系统可以持久化存储和自动注入角色档案。在多章节连续性方面,ChatGPT 依赖单一的上下文窗口,超出窗口限制后信息即丢失;DreamPress 则通过混合记忆架构实现跨章节的长期记忆。

与 NovelAI 相比,DreamPress 的差异化主要体现在三个方面。第一,DreamPress 强调结构化叙事,通过 Plot Prompt 模板和三幕式结构约束 LLM 输出,而 NovelAI 更侧重于自由生成和风格迁移。第二,DreamPress 提供交互式小说创作能力,支持分支叙事和读者选择,这是 NovelAI 所不具备的。第三,DreamPress 的角色管理系统更为完善,支持复杂的关系网络追踪和动态更新。

从技术架构角度对比:ChatGPT 采用单轮或多轮对话模式,每次推理的上下文相互独立;DreamPress 采用持久化项目管理模式,小说的世界观设定、角色档案、章节内容等作为项目数据持久存储,推理时按需检索注入。NovelAI 采用微调模型的方式,在特定文风上表现优异,但在叙事结构和角色一致性方面缺乏系统性的工程解决方案。

总结而言,DreamPress 的核心竞争力在于将小说创作的专业知识与 LLM 的生成能力进行深度工程化整合。它不是简单地将 LLM 包装为写作工具,而是构建了一套完整的 AI 辅助小说创作基础设施,包括角色管理、叙事结构、上下文记忆和交互式分支等核心能力,使 LLM 在小说创作这一特定领域发挥出远超通用工具的效果。

AI 应用场景

玄幻长篇小说角色一致性维护

阶段:推理服务

解决的问题:在数百章的玄幻长篇小说创作过程中,确保数百个角色的性格特征、说话方式和人物关系在不同章节中保持一致,避免出现角色性格突变或关系矛盾等问题。

具体案例:某玄幻小說作者在 DreamPress 上创作一部预计 500 章的修仙小说,系统中已录入超过 200 个角色档案。当写到第 328 章时,主角与一位在第 50 章出场的配角重逢,系统自动从角色数据库中检索该配角的性格标签、说话风格和与主角的关系历史,注入到当前章节的 LLM 提示中,确保该配角的言行与前文一致。

交互式悬疑小说的分支生成与状态追踪

阶段:推理服务

解决的问题:在交互式悬疑小说中,根据读者的不同选择动态生成合理的分支情节,同时维护全局状态变量确保分支之间的逻辑一致性,避免出现剧情矛盾。

具体案例:一部交互式侦探小说中,读者在第五章选择怀疑嫌疑人 A 而非嫌疑人 B。系统更新状态变量 suspect_focus 为 A,并在后续第十章生成内容时,将这一选择注入 LLM 上下文,使 AI 生成的线索和情节围绕嫌疑人 A 展开,同时为嫌疑人 B 保留合理的伏笔以维持悬疑感。

多章节摘要链的 Token 预算优化

阶段:推理服务

解决的问题:在 LLM 有限的上下文窗口内,合理分配 token 预算给角色档案、前情摘要、向量检索结果和当前大纲,使生成内容在角色一致性和情节连贯性之间取得最佳平衡。

具体案例:DreamPress 在生成一部言情小说的第 156 章时,当前 LLM 上下文窗口为 128K token。系统分配 15K token 给涉及角色的档案信息,40K token 给前三章的详细摘要和前十章的简要摘要,20K token 给向量检索返回的关键历史段落,10K token 给当前章节大纲,剩余空间用于 LLM 生成输出。系统根据本章为对话密集型自动增加了角色档案的 token 配额。

Python 演示

python133 行
import jsonfrom dataclasses import dataclass, fieldfrom typing import List, Dict, Optional @dataclassclass CharacterProfile:    """角色档案数据结构"""    name: str    personality_tags: List[str]    speaking_style: str    background: str    relationships: Dict[str, str] = field(default_factory=dict)     def to_prompt_text(self, max_tokens: int = 500) -> str:        """将角色档案转换为可注入提示的文本格式"""        lines = [            f"【角色: {self.name}】",            f"性格特征: {", ".join(self.personality_tags)}",            f"说话风格: {self.speaking_style}",            f"背景: {self.background[:200]}",        ]        if self.relationships:            rel_str = "; ".join(f"{k}={v}" for k, v in self.relationships.items())            lines.append(f"人物关系: {rel_str}")        return "\n".join(lines)  @dataclassclass ChapterSummary:    """章节摘要数据结构"""    chapter_num: int    detailed_summary: str    brief_summary: str    key_events: List[str] = field(default_factory=list)  class SummaryChainMemory:    """摘要链记忆管理器 - 实现分层摘要与token预算分配"""     def __init__(self, total_token_budget: int = 8000):        self.summaries: List[ChapterSummary] = []        self.total_budget = total_token_budget        # token预算分配比例        self.budget_alloc = {            "character_profiles": 0.20,            "recent_summaries": 0.35,            "older_summaries": 0.15,            "current_outline": 0.10,            "generation_space": 0.20,        }     def add_summary(self, summary: ChapterSummary):        self.summaries.append(summary)        self.summaries.sort(key=lambda s: s.chapter_num)     def get_context_for_chapter(        self,        current_chapter: int,        characters: List[CharacterProfile],        current_outline: str,    ) -> str:        """为当前章节生成完整的上下文提示"""        parts = []         # 1. 注入相关角色档案        char_budget = int(self.total_budget * self.budget_alloc["character_profiles"])        char_texts = []        for char in characters:            char_texts.append(char.to_prompt_text())        parts.append("=== 角色档案 ===")        parts.append("\n\n".join(char_texts))         # 2. 近期章节详细摘要        recent = [s for s in self.summaries                  if current_chapter - 3 <= s.chapter_num < current_chapter]        if recent:            parts.append("\n=== 近期章节摘要 ===")            for s in recent:                parts.append(f"第{s.chapter_num}章: {s.detailed_summary}")         # 3. 较早章节简要摘要        older = [s for s in self.summaries                 if current_chapter - 10 <= s.chapter_num < current_chapter - 3]        if older:            parts.append("\n=== 前情概要 ===")            for s in older:                parts.append(f"第{s.chapter_num}章: {s.brief_summary}")         # 4. 当前章节大纲        parts.append(f"\n=== 当前章节大纲 ===\n{current_outline}")         return "\n".join(parts)  def demo():    """演示: 摘要链 + 角色档案注入的简化版小说生成系统"""    memory = SummaryChainMemory(total_token_budget=8000)     # 创建角色    protagonist = CharacterProfile(        name="林逸",        personality_tags=["冷静", "聪慧", "重情义"],        speaking_style="言简意赅,偶尔使用古文引用",        background="青云宗外门弟子,天赋平平但毅力惊人",        relationships={"苏瑶": "挚友", "赵无极": "师兄"}    )     # 添加前情摘要    memory.add_summary(ChapterSummary(        chapter_num=10,        detailed_summary="林逸在宗门大比中意外获胜,引起长老注意。苏瑶提醒他小心赵无极的嫉妒。",        brief_summary="林逸宗门大比获胜,初露锋芒。",        key_events=["宗门大比", "长老关注"]    ))    memory.add_summary(ChapterSummary(        chapter_num=11,        detailed_summary="赵无极暗中设局陷害林逸,被林逸识破。两人关系恶化。",        brief_summary="赵无极陷害林逸,关系破裂。",        key_events=["赵无极陷害", "关系恶化"]    ))     # 生成第12章的上下文    context = memory.get_context_for_chapter(        current_chapter=12,        characters=[protagonist],        current_outline="林逸发现宗门后山的神秘洞府,决定独自探索。"    )    print("=== 第12章生成上下文 ===")    print(context)  if __name__ == "__main__":    demo()
目的:演示一个简化版的摘要链加角色档案注入系统,展示DreamPress如何在LLM有限的上下文窗口内,通过分层摘要策略和按需角色注入来维持多章节小说的连贯性和角色一致性。
  1. @dataclass class CharacterProfile:定义角色档案数据类,包含姓名、性格标签、说话风格、背景和人物关系等字段。
  2. def to_prompt_text(self, max_tokens=500) -> str:将角色档案序列化为可注入LLM提示的纯文本格式,支持token上限控制。
  3. @dataclass class ChapterSummary:定义章节摘要数据类,包含详细摘要和简要摘要两个层级。
  4. class SummaryChainMemory:摘要链记忆管理器,核心类,负责分层摘要管理和token预算分配。
  5. self.budget_alloc = {...}定义token预算分配比例,将可用token分配给角色档案、近期摘要、早期摘要、大纲和生成空间。
  6. def add_summary(self, summary):将新章节摘要加入摘要链,按章节号排序维护链条顺序。
  7. def get_context_for_chapter(self, ...):核心方法:为指定章节构建完整上下文,包括角色注入、分层摘要和当前大纲。
  8. char_budget = int(self.total_budget * ...)根据预算比例计算角色档案可用的token数量。
  9. recent = [s for s in self.summaries if ...]筛选近期章节(最近3章),使用详细摘要保证情节连贯性。
  10. older = [s for s in self.summaries if ...]筛选较早章节(4-10章前),使用简要摘要节省token。
  11. def demo():演示函数:创建角色、添加摘要、生成上下文,展示完整工作流程。
  12. context = memory.get_context_for_chapter(...)调用核心方法生成第12章的完整上下文,包含角色档案和前情摘要。

常见问答

DreamPress 的情节推理引擎为什么不对 LLM 进行完全自由的生成?
因为完全自由的生成容易导致情节散乱、结构失控。DreamPress 通过 Plot Prompt 模板和三幕式结构对 LLM 输出施加叙事约束,确保生成的内容符合小说创作的基本规律,包括合理的起承转合、张力曲线和伏笔管理。
DreamPress 的混合记忆架构由哪两部分组成?各自解决什么问题?
混合记忆架构由摘要链 (Summary Chain) 和向量检索 (Vector Retrieval) 两部分组成。摘要链通过分层摘要 (详细摘要和简要摘要) 在有限 token 预算内最大化上下文覆盖范围,解决宏观情节连贯性问题。向量检索通过语义相似度匹配,精确召回历史特定细节,解决微观细节一致性问题。
什么是上下文注入 (Context Injection)? DreamPress 如何实现按需注入?
上下文注入是指将相关信息插入到 LLM 的提示 (Prompt) 中的过程。DreamPress 的按需注入策略是:根据当前章节涉及的出场角色,从角色数据库中动态选择相关角色的核心信息进行注入,而非注入全部角色档案,从而在有限的 token 预算内最大化信息的针对性。
DreamPress 的分支叙事系统中,状态变量起什么作用?
状态变量是分支叙事系统的关键机制,用于记录读者的选择历史和关键剧情标志。全局状态变量决定了后续可用的分支选项以及 AI 生成内容的情节走向。例如,玩家选择怀疑某个嫌疑人后,状态变量会更新,后续 AI 生成的内容会围绕这一选择展开。
DreamPress 与 ChatGPT 在小说创作方面的核心架构差异是什么?
ChatGPT 采用单轮或多轮对话模式,每次推理的上下文相互独立,缺乏持久化的项目数据管理。DreamPress 采用持久化项目管理模式,小说的世界观设定、角色档案、章节内容等作为项目数据持久存储,推理时按需检索注入。此外,DreamPress 具备专门的角色管理系统、叙事结构约束和混合记忆架构,这些是 ChatGPT 所不具备的。
Token 预算管理中,系统如何决定不同类型信息的分配比例?
Token 预算分配策略根据小说类型和创作阶段动态调整。系统预设了角色档案、前情摘要、向量检索结果和当前大纲的初始分配比例,但会根据当前章节的特征进行调整。例如,在角色对话密集的场景中增加角色档案的配额,在情节推进的关键节点增加前情摘要的配额。

常见误区

误区认为 DreamPress 的小说生成完全由 LLM 自由发挥,无结构约束

正解DreamPress 实际上通过 Plot Prompt 模板和三幕式结构 (铺垫-对抗-解决) 对 LLM 的输出施加了严格的叙事约束。系统会根据当前章节所处的幕次注入不同的叙事要求,同时配合叙事张力曲线、伏笔管理系统和类型惯例约束等多重机制,确保生成的内容符合小说创作的结构规律。LLM 的自由发挥被限制在结构框架之内。

为何常见:许多用户将 AI 小说创作等同于在 ChatGPT 中输入'帮我写一部小说'的自由对话模式,不了解专业的 AI 小说平台会在 LLM 之上构建完整的叙事工程体系。

误区认为多章节连续性仅靠增大 LLM 上下文窗口即可解决

正解即使上下文窗口达到 128K 甚至更大,也无法容纳一部数十万字的完整小说。更重要的是,研究表明 LLM 在超长上下文中的注意力会衰减 (Lost in the Middle 问题),即使文本全部放入窗口,中间部分的信息也可能被忽略。因此,DreamPress 采用摘要链加向量检索的混合记忆架构,通过分层压缩和按需检索,在有限窗口内实现高效的信息利用。

为何常见:随着 LLM 上下文窗口不断增大 (从 4K 到 128K 甚至 1M),人们容易产生'窗口足够大就不需要记忆管理'的直觉误解,忽略了信息密度和注意力分布的核心问题。

误区认为 DreamPress 与 ChatGPT 在小说创作上能力等同,只是界面不同

正解DreamPress 与 ChatGPT 在小说创作能力上存在本质差异。ChatGPT 是通用型 LLM,缺乏持久化的角色数据库、叙事结构约束和跨章节记忆管理。DreamPress 构建了专门的角色管理系统 (持久化角色档案、关系网络追踪)、情节推理引擎 (Plot Prompt 模板、三幕式约束) 和混合记忆架构 (摘要链加向量检索),这些专业化工程能力使 DreamPress 在长篇小说创作中远超通用工具。

为何常见:ChatGPT 的广泛知名度使得人们容易将'能写小说的 AI'等同于 ChatGPT,不了解垂直领域平台在工程化层面所做的专业化工作。

参考来源