Fiction Writing(小说撰写与续写)v1.1.0
版本历史
- v1.1.0:新增三种生成模式——单章、批量按卷、持续生成;批量/持续模式在卷首或开始时一次性确认规约,之后连续生成章节、无需逐章确认;每章交付时附创作字数统计(新增
scripts/count_words.py);确立 2500 字正文字数底线,含修改后。 - v1.0.1:正文产出从"对话内输出"升级为"文件化工作流"——正文保存为 workspace 下的
.md可编辑文件;新增基于文件的修改流程;新增可选 Word 生成;新增作者确认后自动导入小说知识库。 - v1.0.0:基于知识库撰写和续写小说正文,正文直接输出在对话中。
概述
基于知识库撰写和续写小说正文。核心思路:所有创作素材都从知识库读取——世界观、人物、大纲、已写章节、作者文风,全部来自知识库,保证人物言行一致、世界观不破格、伏笔有回应、文风贴合作者。
正文产出为可编辑的 .md 文件(落在 workspace),作者可在此基础上反复修改;确认后可一键生成 Word、一键导入小说知识库,形成"写 → 改 → 交付归档"闭环。
写作支持三种生成模式:单章模式(每章确认规划后写一章)、批量模式(按大纲一次生成一卷的全部章节)、持续模式(设定好生成规约后连续产出章节,无需逐章确认)。单章模式写作前必经确认门;批量/持续模式在卷首或开始时一次性确认规约,之后连续生成。所有章节正文字数不得低于 2500 字(含修改后),交付时附每章创作字数统计。
知识库固定结构
技能依赖以下固定结构存放一部小说的全部素材。技能启动时先定位知识库,检查结构,缺失的文件夹需要补齐(见 Step 1)。
[知识库]/
└── [小说名]/
├── 设定集/ 世界观、时代背景、科技/力量体系、地理、组织、规则
├── 人物/ 人物卡:姓名、身份、性格、动机、说话方式、关系、当前状态
├── 大纲/ 总纲、分卷大纲、章节细纲、待展开的剧情节点
├── 已写章节/ 已完成正文(命名建议:章节号_标题),续写时读取最新章节
└── 文风/ 作者满意的文风示例段落、语言偏好说明
- 每部小说一个独立文件夹,文件夹名即小说名。
- 各子文件夹可含多篇文档,不强求单文件。
- 若结构不完整,按实际素材归位到最接近的文件夹,并在规划阶段向作者说明缺了什么。
工作流
Step 1:定位知识库与素材
- 确定目标知识库:用户指定知识库名称时,通过
ima-knowledgeskill 获取 kb_id;未指定时用search(source="kb")按小说名搜索。 - 用
search(source="kb", kb_id=...)检索目标小说文件夹下的素材,fetch(type="media_id")读取关键文档。 - 检查固定结构是否齐全,确认该小说处于哪个阶段:从零开始(只有设定/大纲)、续写(已有已写章节)、临时思路(作者口头给方向)。
Step 2:理解剧情状态
读完素材后,提炼以下要素(这是正文质量的根基,缺失即向作者追问):
- 世界观硬规则:哪些设定不可违背(如力量体系上限、科技限制、物理法则)
- 人物卡:在场人物的性格、动机、说话方式、当前处境
- 剧情位置:上次写到哪里(最新章节的结尾状态)、接下来大纲指向哪个节点
- 待展开节点:大纲中标记了但尚未写的情节
- 文风特征:从"文风/"或已写章节中提炼——叙述视角(第一/第三人称)、句式偏好(长短句)、用词习惯、对话风格、叙述与对话的比例
Step 3:确定生成模式并确认写作规划(确认门 ⛔)
先确定本次生成模式(作者未指定时默认单章模式):
- 单章模式:一次只写一章,每章写作前走确认门,适合逐章把控剧情。
- 批量模式(按卷):作者从大纲中指定一卷或连续多章,一次性生成全部章节;只在卷首确认一次总体规划,后续章节不再逐章确认。
- 持续模式(连续生成):作者设定好生成规约后,持续产出章节直到停止条件触发,中间不逐章确认。
三种模式的详细执行规则见"生成模式详解"小节。
单章模式的规划需包含:
- 本段情节摘要:1~2 句话说明这段写什么、承接什么、导向什么
- 剧情节点选项:给出 2~3 个可选的剧情走向(标注各走向的后续影响/伏笔价值),作者可单选、组合或另提方向
- 字数目标:在 2500~5000 区间内给出具体目标值,说明依据(如"本章是动作场景,目标 3000 字,节奏紧凑");2500 字是正文字数底线,任何情况下不得低于
- 视角与人物:采用谁的视角、涉及哪些人物、与上一章的衔接点
批量/持续模式在开始前一次性确认:覆盖范围(哪一卷/哪几章)、逐章要点(每章 1~2 句情节要点及衔接逻辑)、字数设定(各章目标字数,均须 ≥ 2500)、生成规约(视角、文风、停止条件等)。
作者确认或调整后,才进入 Step 4。若作者直接说"直接写",可跳过确认,但仍需在正文前用两三句说明规划,供作者事后核对。
Step 4:撰写正文并落盘 .md 文件
按确认后的规划撰写,遵守下方质量规范,产出物为可编辑的 .md 文件:
- 落盘路径:
/sandbox/workspace/fiction/[小说名]/(目录不存在则创建) - 文件命名:
第X章_标题.md(X 为章节号;续写时章节号接续已写章节,无明确章节号时用日期或情节关键词命名) - 文件内容:首行
# 第X章 标题,之后紧跟正文,不含"草稿""待补充"等占位标记 - 字数:贴近规划目标且不得低于 2500 字底线(偏差超 ±15% 时,交付时主动说明原因)
- 结构完整:单章内部有起承转合,结尾留下钩子或明确的状态变化
每章落盘后立即统计正文字数(scripts/count_words.py,方法见"字数统计"小节),记录该章字数。批量/持续模式下逐章落盘、逐章统计,全部完成后进入 Step 5。
Step 5:交付、修改与 Word 生成
- 交付:告知作者
.md文件路径及本章创作字数(如"第 6 章正文字数 3,286 字");批量/持续模式下给出逐章字数清单与卷/批次总字数。 - 主动询问是否生成 Word 版(可选),作者需要时按"生成 Word"小节执行。
- 修改:作者对正文提意见时,走"修改流程"小节,基于
.md文件修改。 - 收尾确认:作者对最终稿确认后,进入 Step 6。
Step 6:导入知识库(收尾确认门)
作者确认定稿后,将本章导入小说对应的知识库。导入前用一句话明确告知目标位置(哪个知识库、哪个文件夹、什么文件名、什么格式),让作者有最后喊停的机会,然后执行:
- 定位目标文件夹:通过
ima-knowledgeskill 的get_knowledge_list找到"已写章节/"文件夹,取其 folder_id。 - 上传 .md(默认):
bash python3 /sandbox/workspace/skills/ima-knowledge/scripts/upload_file.py \ --file-path "/sandbox/workspace/fiction/[小说名]/第X章_标题.md" \ --knowledge-base-id <kb_id> \ --folder-id <folder_id> - 按需上传 Word:若作者生成了 Word 且希望一并归档,用同样命令上传
.docx。 - 告知结果:报告上传成功,并提示可同步更新大纲进度(可选)。
生成模式详解
单章模式(默认)
一次一章。每章写作前走 Step 3 确认门(情节摘要、剧情节点选项、字数目标、视角人物),确认后撰写、落盘、统计字数并交付。适合作者想逐章把控剧情的场景。
批量模式(按卷生成)
- 划定范围:从大纲中选定一卷或连续多章(如"第二卷 1~10 章"),读取各章细纲。
- 卷首确认一次:逐章情节要点(每章 1~2 句)、各章字数(2500~5000,可统一可逐章)、视角与人物、章节间衔接逻辑。作者确认后不再逐章停下。
- 连续撰写:按确认的规划逐章产出,逐章落盘
第X章_标题.md(章节号接续已写章节)、逐章统计字数。 - 一次性汇报:全部完成后给出每章字数清单 + 卷总字数 + 文件路径列表,再走 Step 5 收尾(Word / 导入知识库)。
- 例外暂停:仅当遇到硬问题(素材冲突、剧情无法推进、需作者定夺的分叉)才暂停汇报,其余情况不打断。
持续模式(连续生成)
- 设定生成规约(一次性确认):每章字数(默认 2500~5000,下限 2500)、剧情推进策略(按大纲顺序推进)、文风与视角、停止条件(写到第几章/哪卷结束/作者喊停)、是否需要阶段汇报。
- 持续产出:每次产出 1 章——落盘 + 统计字数 + 简短汇报(章节号、本章字数、下一章预告),随即自动续写下一章,不再等待作者确认。
- 停止:停止条件触发或作者喊停时结束;结束前汇总全部章节字数清单。
- 与批量模式的区别:批量模式范围在卷首一次划定;持续模式不停续写,范围由停止条件决定。
字数统计
每章落盘后立即统计正文字数(正文 = 去掉 Markdown 标题行与空白后的字符数):
# 单章
python3 /sandbox/workspace/skills/fiction-writing/scripts/count_words.py "/sandbox/workspace/fiction/[小说名]/第X章_标题.md"
# 批量(一卷/一批)
python3 /sandbox/workspace/skills/fiction-writing/scripts/count_words.py /sandbox/workspace/fiction/[小说名]/第11章*.md /sandbox/workspace/fiction/[小说名]/第12章*.md
- 单文件输出
正文字数: N;多文件输出逐章清单与合计。 - 字数不足 2500 底线时,扩写补足后再交付;不得以"贴近目标"为由低于底线。
修改流程(基于 .md 文件)
作者对正文提修改意见时:
- 定位文件:确认要改的是哪个
.md文件(通常为当前章节文件)。 - 读取:用
file_read读取文件当前内容。 - 修改:
- 局部修改(改某段、调语气、补细节、改错字)→ 用file_edit精确替换对应部分,不重写全文。
- 方向性修改(剧情走向不对、换节点、大改结构)→ 回到 Step 3 重新规划,作者确认后file_write覆盖重写。 - 保存:修改结果写回原
.md文件。 - 字数底线:修改后重新统计字数(
scripts/count_words.py),正文字数不得低于 2500 字;若修改导致字数不足,扩写补足后再交付。 - 追问:是否还需调整;定稿后进入 Step 6(导入知识库)。
生成 Word(可选)
作者需要 Word 版时:
- 优先用 pandoc 转换(沙箱已预装 pandoc 3.x):
bash pandoc "/sandbox/workspace/fiction/[小说名]/第X章_标题.md" \ -o "/sandbox/workspace/fiction/[小说名]/第X章_标题.docx" - pandoc 不可用时,fallback 到 python-docx(沙箱已预装,用法参考
ima-docskill)。 - 生成后告知作者
.docx路径;如需归档,走 Step 6。
写作质量规范
字数底线
- 每章正文字数下限 2500 字(正文,不含标题行与空白),上限 5000 字
- 修改后的章节同样必须 ≥ 2500 字,字数不足时扩写补足
- 交付时附每章实际创作字数;批量/持续模式附逐章清单与总计
可读性
- 段落控制:中文小说每段 3~6 行为宜,动作/对话场景可更短;避免整页无断落的文字墙
- 对话与叙述穿插:避免连续大段独白或纯环境描写;对话承载情节推进而非寒暄
- 场景切换清晰:时空变化处有明确过渡,时间线不混乱
- 感官细节:用具体细节(声音、光线、气味、触感)替代抽象形容,让读者"看见"
文风一致
- 优先从"文风/"示例中提取语言特征;无示例时从已写章节推断,仍无法确定则询问作者
- 固定叙述视角与人称,不中途漂移(除非有设计好的视角切换)
- 模仿作者的用词习惯与句式节奏,不写成千篇一律的"AI腔"(避免过度使用排比、华丽形容词堆砌)
逻辑性
- 人物行为符合其动机与性格,不因剧情需要而强行降智或突变
- 因果链完整:事件有前因后果,前文伏笔在本章或后续有回应
- 世界观规则前后一致:力量/科技体系不破格,设定变更需有铺垫
直接可用
- 交付即成品:无创作过程说明、无"以下为大纲"等混杂内容
- 章节结尾状态明确,便于下次续写衔接
条件分支
场景 A:从零开写(只有设定/大纲)
→ 走全流程;若结构缺"文风/",主动询问作者风格偏好或从已写片段推断。
场景 B:续写(已有已写章节)
→ 必须先读最新章节,衔接结尾状态;规划中说明"承接上一章 X 的结尾,开启 Y"。落盘章节号接续已写章节。
场景 C:按临时思路写(作者口头给方向,不依赖大纲)
→ 把作者思路当作本次大纲;规划时检查与既有设定是否冲突,冲突处提前指出让作者定夺。
场景 D:批量/持续生成(作者要求一次写一卷或连续写多章)
→ 按"生成模式详解"执行:批量模式卷首确认总体规划后连续撰写;持续模式设定生成规约后连续产出、免逐章确认。两种模式每章都落盘、统计字数、遵守 2500 字底线,遇到硬问题才暂停汇报。
示例
示例 1:续写 + 归档
作者:"续写《星穹坠落》第 6 章,空间站被入侵了,主角要查出真相。"
→ 定位知识库 → 读设定集、人物、大纲、第 5 章结尾 → 产出规划(情节摘要、剧情节点 A/B/C、字数 3200、视角)→ 作者选 A+C → 撰写并落盘 /sandbox/workspace/fiction/星穹坠落/第6章_入侵调查.md → 统计字数并随交付附上 → 询问是否生成 Word → 作者说"要 Word,改一下第 3 段" → 基于文件修改并复核字数 → 定稿后告知将导入"已写章节",作者确认 → 上传 .md + .docx 到知识库。
示例 2:从零开写
作者:"我建了《雾隐之都》知识库,只有世界观和主角人设,帮我写第一章。"
→ 定位知识库,发现缺"大纲/"和"文风/" → 向作者说明,请补一句第一章目标或允许基于世界观自拟 → 产出规划(含 2~3 个开局方向)→ 确认后撰写并落盘 /sandbox/workspace/fiction/雾隐之都/第1章_标题.md → 统计字数并随交付附上 → 询问是否生成 Word / 是否归档 → 依作者指示收尾。
示例 3:批量生成一卷 + 字数清单
作者:"按大纲把第二卷 1~10 章一次写完,每章 3000 字左右。"
→ 读取大纲第二卷各章细纲 → 产出卷首规划(10 章逐章要点、统一 3000 字目标、视角主线、章节衔接逻辑)→ 作者确认 → 连续撰写 10 章,逐章落盘(章节号接续第一卷)并逐章统计字数 → 一次性汇报每章字数清单 + 卷总字数 + 文件路径列表 → 询问是否生成 Word / 导入知识库。
示例 4:持续模式,设定规约后免确认
作者:"从第 6 章开始一直写下去,每章至少 2500 字,写到第一卷结束再停。"
→ 确认生成规约(字数下限 2500、按大纲顺序推进、沿用主视角、停止条件=第一卷结束)→ 开始持续产出:每写完一章落盘、统计字数、简短汇报,自动续写下一章 → 写到第一卷末章时停止 → 汇总全部章节字数清单,进入收尾。
资源目录
本技能无独立脚本,依赖以下现成能力(均在沙箱内可用):
- 知识库导入:
ima-knowledgeskill 的upload_file.py(上传 .md/.docx,支持--folder-id),以及get_knowledge_list(定位文件夹 folder_id)。 - Word 生成:pandoc 3.x(.md → .docx);fallback 用 python-docx(
ima-docskill)。 - 文件落盘:workspace 持久目录
/sandbox/workspace/fiction/,用file_write/file_edit读写。 - 字数统计:
scripts/count_words.py(统计正文字数,单章输出数值,多文件输出清单与合计)。