【AI项目】AI辅助小说创作系统:规则引擎与LLM双校验的长文本一致性工程实践


✨文末附开源仓库地址,做 AI 应用落地的同学可以直接拉下来跑。

⚠️ 本文为技术演示项目,仅供学习和交流参考,不建议直接用于生产环境。

当 LLM 遇见小说创作,如何解决"角色太多记混、时间线出错、伏笔忘了收"这些痛点?


前言

AI 写长文本最大的痛点是什么?不是写不出来,是写完就忘------角色死了后面又出场、左手断了还用左手写字、伏笔埋了不收。

让 AI 生成内容容易,让 AI 生成的长文本和已有设定保持一致,才是真正的工程难题。

最近在关注 AI 长文本生成与一致性保障的落地实践,把这套问题在真实场景里跑了一遍:写作流程状态机 + 规则引擎(5 条硬矛盾)+ AI 软矛盾双重检测 + 章节信息自动提取存档,一个完整的 AI 辅助创作闭环。

把字段不一致、状态机流转、信息提取这些坑都沉淀进这套可运行 Demo 里了,文末附开源仓库地址,做 AI 内容生成落地的同学可以直接拉下来跑。

项目目标:为小说作者打造一套 AI 辅助创作系统,作者提供大纲后,AI 逐章生成内容,每章完成后自动进行一致性审查(含软矛盾检测),支持对话式修改和风格指定。

技术挑战

  • 如何让 AI 生成的长文本与已有设定保持一致?
  • 如何检测"角色左手断了但用左手写字"这类硬矛盾?
  • 如何在章节审核通过后自动提取新信息并更新各管理模块?
  • 如何处理多模型协同(LLM 生成 + LLM 审查 + LLM 信息提取)?

系统架构

整体设计

复制代码
┌─────────────────────────────────────────────────────────────────┐
│                        前端 Vue 3                                │
│  ┌──────────┐ ┌────────── ┌──────────┐ ┌────────────────────┐ │
│  │ 大纲规划 │ │ AI写作   │ │ 对话修改 │ │ 六大设定管理模块   │ │
│  └──────────┘ └────────── └──────────┘ └────────────────────┘ │
│  ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌────────────────────┐ │
│  │ 关系图谱 │ │ 时间线   │ │ 伏笔追踪 │ │ Dashboard 仪表盘  │ │
│  └──────────┘ ──────────┘ └──────────┘ ────────────────────┘ │
└─────────────────────────────────────────────────────────────────┘
                              │
                              ▼
┌─────────────────────────────────────────────────────────────────┐
│                      后端 FastAPI                                │
│  ┌─────────────────────────────────────────────────────────┐   │
│  │                   写作流程状态机                          │   │
│  │  ┌─────┐   ┌─────┐   ┌─────   ┌─────┐   ┌─────────┐  │   │
│  │  │大纲  │──▶│逐章  │──▶│审核  │──▶│矛盾  │──▶│信息提取 │  │   │
│  │  │确认  │   │生成  │   │      │   │检查  │   │+存档    │  │   │
│  │  └─────┘   └─────┘   └─────┘   └─────┘   └─────────┘  │   │
│  └─────────────────────────────────────────────────────────   │
│  ┌─────────────────────────────────────────────────────────┐   │
│  │              硬矛盾规则引擎 (5条规则)                     │   │
│  └─────────────────────────────────────────────────────────┘   │
└─────────────────────────────────────────────────────────────────┘
                              │
                              ▼
┌─────────────────────────────────────────────────────────────────┐
│                    阿里云百炼 API                                 │
│  Qwen-Plus (章节生成 / 矛盾检测 / 信息提取 / 对话修改)          │
└─────────────────────────────────────────────────────────────────┘
                              │
                              ▼
┌─────────────────────────────────────────────────────────────────┐
│                    本地 JSON 文件存储                             │
│  /项目目录/小说名/                                               │
│    ├── meta.json / world.json / characters.json                 │
│    ├── relationships.json / timeline.json / items.json          │
│    ├── foreshadowing.json / outline.json / contradictions.json  │
│    ├── style.json / chapters/ch001.json ...                     │
└─────────────────────────────────────────────────────────────────┘

核心流程

整个系统的核心是一个写作流程状态机

  1. 大纲规划:作者编写或 AI 生成故事梗概 + 章节目录,确认后进入写作
  2. 逐章生成:基于大纲 + 世界观 + 角色设定 + 前文摘要,调用百炼大模型真实生成
  3. 审核:左右分栏展示正文和设定信息,作者决定通过 / 要求修改 / 重写
  4. 矛盾检查:规则引擎检测硬矛盾 + AI 检测软矛盾,生成矛盾列表
  5. 信息提取:AI 从章节内容自动提取新角色、地点、物品、时间线事件、伏笔
  6. 确认存档:作者确认后,自动更新各管理模块的数据

使用演示

Step 1:创建项目,规划大纲

用户创建小说项目后,可以编写故事梗概和章节目录。支持 AI 自动生成大纲,也可以手动编辑。确认后进入写作阶段:

如图:故事梗概区域展示完整的小说大纲,下方章节目录支持拖拽排序,每章包含标题、摘要和状态。

Step 2:设定世界观,管理角色

在写作前,作者需要完善世界观设定(地理、势力、修炼体系、历史、种族)和角色档案:

如图:世界观设定分为五个维度,支持实时编辑和变更历史追踪。

如图:角色卡片展示姓名、性格、能力、势力等信息,下方显示成长轨迹和持有物品。

Step 3:AI 写作,审核内容

选择章节和写作风格后,点击 AI 生成按钮,系统调用百炼大模型生成章节内容。生成后进入审核流程:

如图:左侧为章节正文编辑器,右侧显示章节信息和 AI 提取的待确认信息(新角色、时间线事件、伏笔等)。

Step 4:对话式修改,diff 对比

如果作者对生成内容不满意,可以进入对话修改界面,以自然语言告诉 AI 哪里需要修改:

如图:左侧展示修改前后的 diff 对比(红色为修改前,绿色为修改后),右侧为对话界面。

Step 5:矛盾检测,保障一致性

每章审核通过后,系统自动进行矛盾检测,包括规则引擎检测的硬矛盾和 AI 检测的软矛盾:

如图:矛盾列表展示类型、严重程度、描述、涉及角色和修改建议,支持解决/忽略操作。可展开查看详细说明和检测规则。

Step 6:时间线管理,冲突检测

时间线页面按时间顺序展示关键事件,支持冲突检测(如同一角色同时出现在不同地点):

如图:时间轴展示事件详情(涉及角色、地点、关联章节),点击"检测冲突"自动检查逻辑矛盾。

Step 7:Dashboard 总览,掌握全局

Dashboard 仪表盘展示创作进度全貌:

如图:顶部统计卡片显示总字数、章节进度、待处理矛盾、未揭晓伏笔;左侧饼图展示章节状态分布;右侧活动时间线展示最近的创作动态。

Step 8:写作进度总览

详细的写作进度页面展示各章节的完成情况和提醒:

如图:章节详情表格展示每章状态和字数进度条,底部提醒区显示待处理矛盾和未揭晓伏笔数量。

技术选型思考

为什么选 FastAPI?

  • 类型安全:Pydantic 自动校验请求参数,减少运行时错误
  • 异步支持:AI 调用是 IO 密集型任务,原生异步提升并发能力
  • 文档自动生成:Swagger UI 方便前后端联调
  • 路由模块化:12 个路由模块清晰分离,易于维护

为什么前端用 Vue 3?

  • Composition API:复杂状态管理更清晰(如写作流程状态机)
  • 生态成熟:Element Plus 组件库开箱即用(表格、时间线、对话框等)
  • 拖拽交互:SortableJS 实现章节拖拽排序
  • SVG 可视化:原生 SVG 实现关系图谱节点连线图

为什么用阿里云百炼?

  • 模型能力:Qwen-Plus 在中文长文本生成和一致性判断上表现优秀
  • API 统一:OpenAI 兼容接口,一个 SDK 调用所有能力
  • 国内访问:无需翻墙,延迟低,适合 Demo 演示

为什么用本地 JSON 存储?

  • Demo 场景:无需数据库,部署简单
  • 数据透明:JSON 文件可直接查看和编辑
  • 按项目隔离:每个小说项目独立目录,数据互不干扰

核心代码实现

1. 硬矛盾规则引擎

5 条规则检测常见的逻辑矛盾:

python 复制代码
def check_hard_contradictions(chapter_content, characters, items, timeline):
    contradictions = []
    
    # 规则1:死亡角色出现
    dead_chars = [c for c in characters if c.get('status') in ('死亡', '已死')]
    for dc in dead_chars:
        if dc['name'] in chapter_content:
            contradictions.append({
                "type": "hard", "severity": "high",
                "description": f"角色「{dc['name']}」已死亡但在本章出现"
            })
    
    # 规则2:伤残肢体使用
    # 规则3:位置冲突
    # 规则4:物品归属错误
    # 规则5:能力超限
    return contradictions

2. AI 软矛盾检测

将章节内容 + 角色设定 + 世界观组合成 prompt,调用大模型判断合理性:

python 复制代码
def check_contradiction(chapter_content, characters, world_setting, timeline, items):
    system_prompt = """你是一位专业的小说编辑,负责检查小说内容的一致性。
    检查要点:角色行为是否与性格一致、能力是否超出设定、时间线是否合理...
    请以JSON数组格式返回矛盾列表。"""
    
    messages = [
        {"role": "system", "content": system_prompt},
        {"role": "user", "content": f"世界观:{world_setting}\n角色:{char_info}\n内容:{chapter_content}"}
    ]
    result = chat_completion(messages, temperature=0.3)
    return parse_json(result)

3. 信息提取与自动存档

章节审核通过后,AI 自动提取新信息并更新各模块:

python 复制代码
def confirm_extract(project_id, chapter_index, extracted_data):
    # 更新角色(新增角色 + 成长轨迹)
    for nc in extracted_data.get("new_characters", []):
        characters.append({"name": nc["name"], ...})
    for change in extracted_data.get("character_changes", []):
        c["growth_log"].append({"chapter": chapter_index+1, "change": change["change"]})
    
    # 更新时间线、物品、伏笔...
    # 标记章节为 completed

4. 写作流程状态机

复制代码
大纲确认 → 逐章生成 → 审核 → 矛盾检查 → 信息提取 → 二次确认 → 存档
  pending    draft    approved  extracting  completed

每个状态转换都有对应的 API 端点和前端交互。

踩坑记录

1. Vue 单文件组件重复模板块

问题 :App.vue 底部残留了默认的 <script setup><template> 块,导致编译错误。

原因:使用 Write 工具覆盖文件时,追加而非替换。

解决 :手动删除重复的模板块,确保只有一个 <template> 和一个 <script setup>

2. PowerShell 的 && 语法

问题cd backend && python -m uvicorn 在 PowerShell 中报错。

原因 :PowerShell 不支持 &&,需要使用 ; 分隔。

解决 :改用 cd backend; python -m uvicorn app.main:app --port 8001

3. 字段名不一致

问题:矛盾检测页面不显示涉及角色。

原因 :前端模板使用 row.involved_characters,但 demo 数据使用 characters 字段。

解决 :前端兼容两种字段名 (row.involved_characters || row.characters || [])

4. 端口占用

问题[Errno 10048] 端口 8001 已被占用。

解决:检查已有进程,复用或切换到其他端口。

工程化实践

1. 模块化路由设计

后端 12 个路由模块,每个模块对应一个功能领域:

python 复制代码
app.include_router(projects.router, prefix="/api/projects")
app.include_router(outline.router, prefix="/api/projects/{project_id}/outline")
app.include_router(world.router, prefix="/api/projects/{project_id}/world")
app.include_router(characters.router, prefix="/api/projects/{project_id}/characters")
# ... 共 12 个路由模块

2. 前端 API 封装

统一的 API 封装层,所有请求通过 request() 函数:

javascript 复制代码
async function request(url, options = {}) {
  const res = await fetch(BASE_URL + url, {
    headers: { 'Content-Type': 'application/json', ...options.headers },
    ...options
  })
  if (!res.ok) throw new Error((await res.json()).detail)
  return res.json()
}

3. 本地 JSON 存储

按项目目录组织,每个项目包含所有数据文件:

复制代码
data/
└── demo001/
    ├── meta.json          # 项目元信息
    ├── outline.json       # 大纲+章节目录
    ├── world.json         # 世界观设定
    ├── characters.json    # 角色档案
    ├── relationships.json # 关系图谱
    ├── timeline.json      # 时间线
    ├── items.json         # 物品/装备
    ├── foreshadowing.json # 伏笔追踪
    ├── contradictions.json# 矛盾记录
    ├── style.json         # 风格配置
    └── chapters/          # 章节正文
        ├── ch001.json
        ├── ch002.json
        └── ...

功能清单

模块 功能 状态
项目脚手架 Vue3+Vite+FastAPI+CORS+侧边栏
项目管理 CRUD+卡片列表+示例数据
大纲规划 拖拽排序+AI生成+确认流程
世界观 5维度编辑+变更历史
角色管理 档案+状态追踪+成长轨迹
关系图谱 SVG节点图+变化历史
时间线 事件管理+冲突检测
物品装备 档案+流转历史
伏笔追踪 登记+状态筛选
AI写作 百炼API+风格选择+分栏审核
对话修改 聊天+diff对比+重写
矛盾检测 规则引擎5条+AI软矛盾
信息提取 自动提取+确认+更新各模块
进度总览 饼图+活动时间线+统计
示例数据 5矛盾覆盖全场景

总结

这个项目让我对 AI 应用落地有了更深的理解:

  1. 一致性保障是核心:AI 生成的长文本容易与已有设定矛盾,规则引擎 + AI 双重检测是必要的
  2. 流程状态机很重要:写作流程有明确的状态转换,每个环节都需要清晰的 UI 反馈
  3. 信息提取是闭环关键:章节审核通过后自动提取新信息,才能保持各模块数据同步
  4. Demo 也要功能完整:即使是演示项目,也要覆盖所有功能点,才能展示产品价值

如果你也在做 AI 应用开发,希望这些经验对你有帮助。


源码仓库(已开源)

完整源码已开源至 Gitee,含可运行 Demo + 核心代码注释 + 踩坑修复方案:

项目地址Gitee - ViralWrite-AI ⭐ 欢迎 Star

仓库包含:

  • 写作流程状态机(大纲→生成→审核→矛盾检查→信息提取→存档)
  • 硬矛盾规则引擎(5 条规则)+ AI 软矛盾双重检测
  • 章节信息自动提取 + 各管理模块自动更新
  • 对话式修改 + diff 对比视图
  • SVG 关系图谱 + 时间线冲突检测
  • Vue3 前端 + FastAPI 后端 + 12 个路由模块

本 Demo 仅做技术复盘与学习演示,基于 AI 长文本生成与一致性保障工程实践经验提炼,后续还会持续迭代补充更多场景优化。

相关推荐
9i编程1 小时前
8. AI编写的SKILL,坑我一一试过,这次我自己改写:Beyond Compare逐行CodeReview:Trae写主体,WorkBuddy改bug
人工智能·openai·ai编程
艾伦_耶格宇1 小时前
【AI】-7 从知识库到 AI Agent -进阶
人工智能·知识库·obsidian·opencode·ai运维
千里码aicood1 小时前
基于知识图谱的《平凡的世界》知识问答系统设计与实现
人工智能·知识图谱
tachibana21 小时前
把RAGAS跑起来
数据库·人工智能·ai·架构·大模型·llm·rag
北京晶数信息科技1 小时前
加油机数据采集设备原厂 · OEM 定制 · 五位一体数据采集 · 成品油交易即开票全方案(一)
大数据·人工智能·物联网
AI发掘1 小时前
手写稿被AI检测误标58%?三款AI降重工具实测:只改疑似段,不动原创内容
人工智能·aigc
程序员差不多先生1 小时前
OpenAI 把 Codex Harness 开源:AI Agent 的“操作系统“之争正式开打
人工智能·开源
开发者导航1 小时前
【有趣网站】免费优质资源与实用工具导航:开发者导航
人工智能·程序人生
AI导出鸭PC端1 小时前
告别复制乱码:从「秘塔怎么复制表格」到「AI 导出鸭」的专业解法
人工智能·豆包·ai导出鸭