1. 项目定位与核心价值
如果你和我一样,是个喜欢用AI写点东西,但又总被“写不长”、“前后矛盾”、“角色性格漂移”这些问题折磨的创作者,那你肯定能理解我当初看到InkOS项目时那种“终于有人懂我”的感觉。但说实话,InkOS更像一个宏伟的蓝图,一个概念验证,真要把它塞进我日常用的OpenClaw里,让它变成一个能稳定跑起来的“技能”,中间还隔着不少脏活累活。这就是我动手搞这个“inkos-like-novel-os”项目的初衷:把一个关于“连续性写作”的好想法,落地成一个能真正嵌入工作流、开箱即用的工具。
简单来说,这不是一个“写一章”的工具,而是一个“写一本”的流程管理器。它的核心价值,我总结为三点:状态可维护、流程可闭环、历史可回溯。想象一下,你写一本百万字的网文,角色关系、世界设定、未解伏笔会像雪球一样越滚越大。传统的一次性prompt或者简单的“续写”功能,很容易让AI写出前后打架的情节,或者把重要设定给忘了。这个skill要解决的,就是通过一套结构化的文件(我们叫它truth files)和一系列标准化的操作(如write-next,revise),把写作变成一个可管理、可审计的工程项目,而不是一次次充满不确定性的“开盲盒”。
它最适合的,就是那些有明确长期规划的故事创作场景:网文日更、同人长篇连载、需要严密设定的奇幻/科幻小说创作。如果你只是想用AI快速生成一篇千字短文,或者写个朋友圈文案,那这个工具确实显得“杀鸡用牛刀”了。但如果你真的想和AI协作,完成一部结构完整、人物鲜活、逻辑自洽的长篇作品,那这个基于OpenClaw的workflow skill,可能就是你现在最缺的那块拼图。
2. 核心工作流拆解:从骨架到血肉
这个项目的灵魂,就藏在那个核心的工作流循环里:init -> write-next -> draft -> revise -> extract-state -> state-update。乍一看像一串命令,但背后是一整套维持故事“生命体征”的机制。我们来把它拆开揉碎了看。
2.1 初始化:打好地基比什么都重要
万事开头难,对于AI协作写作更是如此。init阶段绝不是简单地创建一个空文件夹。它的核心产出是一个结构清晰的项目模板,这直接决定了后续所有流程能否顺畅运行。这个模板里最关键的,就是truth files目录。你可以把它理解成你故事的“中央数据库”或“设定集”。通常,我会建议至少包含这几个文件:
worldview.md: 世界观的“宪法”。这里定义物理法则、社会结构、历史大事件、魔法或科技体系的上限与规则。要具体,避免“一个剑与魔法的世界”这种描述,而是“该世界魔力源于地脉,法师施法会消耗自身生命力,因此高阶法术通常由多人协作或借助魔法道具完成”。characters.md: 角色档案。不止是姓名、外貌,更重要的是性格内核、行为动机、成长弧光以及与其他角色的关系变化图。我会为每个主要角色准备一个“角色状态快照”,记录到最新章节为止,他的情绪、健康状况、持有物品、人际关系亲密度等动态信息。plot_points.md: 情节线索引。记录已发生的关键事件、埋下的伏笔、待解决的矛盾。这相当于故事的“记忆中枢”,防止AI在后面章节里把前面挖的坑给忘了。current_state.md: 当前局势总结。这是最动态的文件,总结上一章结束时的场景、人物位置、悬而未决的冲突。它是write-next命令最重要的输入之一。
实操心得:在
init阶段多花一小时,能在后续写作中省下十小时。不要怕啰嗦,把你能想到的所有设定细节都塞进truth files。AI不擅长推理你没写出来的东西,但它很擅长在你给出的框架内进行演绎。一个详尽的初始化,是维持故事一致性的第一道,也是最坚固的防火墙。
2.2 撰写下一章:不是“续写”,是“任务规划”
write-next是这个工作流中最具创新性的一环。它不是一个直接调用大模型生成文本的指令,而是一个规划与准备指令。当你运行write-next时,它会做以下几件事:
- 状态收集:自动读取
truth files下的所有文件,特别是current_state.md和plot_points.md,理解故事当前进展到哪里,有哪些线头待处理。 - 冲突检测:基于角色档案和世界观,初步判断如果按照现有趋势发展,可能产生哪些逻辑矛盾(例如,一个怕水的角色是否可能突然被安排进行水下探险?)。
- 生成章节纲要:输出一个结构化的“写作任务包”。这个任务包通常包括:
- 本章核心目标:要推进哪条主线?要解决哪个伏笔?要展现哪个角色的成长?
- 场景建议:基于当前局势,可能发生在哪些地点?这些地点在世界观下有何特点?
- 人物出场列表:哪些角色必须出场?哪些角色可能被提及?他们当前的状态(情绪、装备)如何?
- 潜在冲突点:根据角色性格和关系,他们在此场景下可能产生哪些自然摩擦?
- 需遵守的规则:从
worldview.md中提取的本章必须遵守的设定清单。
这个“任务包”会以JSON或Markdown的形式保存下来,作为下一步draft(起草)阶段的权威输入。这样做的好处是,将“创意规划”和“文本生成”两个高认知负荷的任务解耦了。你先和AI(或自己)一起,像导演和编剧开会一样,把下一幕的戏份、走位、冲突点敲定,然后再让AI去填充台词和细节描写。
2.3 起草与修订:形成质量闭环
有了清晰的“任务包”,draft阶段就相对明确了。你可以配置OpenClaw调用指定的大模型(如GPT-4、Claude-3),将“任务包”和相关的truth files片段作为上下文,生成章节初稿。初稿会保存为独立的章节文件,例如chapter_05.md。
紧接着,revise环节登场。这是确保作品质量的核心纠偏机制。修订不是简单地说“这里写得不好,重写”。本skill提供的revise流程通常是结构化的:
- 一致性审查:自动将初稿与
truth files进行比对,标记出可能存在的设定冲突(比如角色用了一个他还没学会的技能)。 - 叙事节奏检查:分析对话与描写的比例,情节推进的密度是否合理。
- 风格与语气审计:确保本章的叙述风格与之前章节保持一致,角色对话符合其性格档案。
- 生成修订意见:基于以上分析,产生具体的、可操作的修改建议列表,例如:“角色A在此处表现过于冷静,与其‘易怒’的设定不符,建议增加一些肢体上的焦躁描写。”
你可以根据这些修订意见,手动修改文本,或者再次调用AI进行针对性重写。revise的关键在于,它基于客观的truth files和既定规则进行审查,减少了主观臆断,让修订过程有据可依。
2.4 状态提取与更新:让故事“活”起来
一章写完后,故事的状态发生了变化。extract-state命令就是用来“捕捉”这一新状态的。它会自动分析刚完成的新章节(chapter_05.md),并提取出关键信息:
- 新出现的事实:例如,“国王在宴会上公开指责了主教”。
- 角色状态变化:例如,“主角因受伤,武力值暂时下降”,“角色A和角色B的关系因本次事件从‘友好’变为‘猜疑’”。
- 新埋下的伏笔:例如,“神秘人留下了一把刻有龙纹的匕首”。
- 当前场景:章节结束时,各个角色身在何处?
提取出的信息会被整理成一份结构化的“状态更新报告”。随后,state-update命令会负责将这些新信息,审慎地合并到永久的truth files中。特别是更新current_state.md和characters.md里的动态部分。这个过程就像是游戏的“保存进度”,确保了下一章开始时,AI拥有的“记忆”是最新且准确的。
避坑指南:
state-update是自动化程度最高,也最容易出错的一环。务必审阅“状态更新报告”,确认AI的提取是否准确。我曾遇到过AI把角色的心理活动误判为客观事实的情况(如“他觉得世界抛弃了他”被提取为“世界抛弃了他”)。建议将此环节设为“半自动”,人工确认后再执行合并。
3. 项目结构与实操部署详解
理解了工作流,我们来看看这个skill本身如何安装和使用。它不是一个独立的桌面软件,而是作为OpenClaw的一个“技能包”存在。
3.1 环境准备与技能安装
首先,你需要一个正在运行的OpenClaw环境。OpenClaw是一个AI智能体框架,你可以把它想象成一个能安装各种技能(skill)的“操作系统”。本skill的安装通常通过git克隆到OpenClaw的特定技能目录:
# 假设你的OpenClaw技能目录是 ~/openclaw/skills cd ~/openclaw/skills git clone https://github.com/qiyan233/inkos-like-novel-os.git克隆后,OpenClaw通常需要重新扫描技能目录或重启,才能识别到这个新技能。安装成功后,你可以在OpenClaw的界面或通过其命令行工具,看到名为novel_workflow或类似名称的技能可用。
3.2 核心文件与目录导航
项目仓库的结构体现了其设计思想:
/SKILL.md:这是最重要的文件,是给AI智能体看的“说明书”。它用结构化的语言定义了本技能的能力、输入输出格式、工作流步骤。当你让OpenClaw执行小说写作任务时,它内部就是参考这个文件来理解该做什么。作为人类,阅读它能最准确地理解技能的设计意图。/scripts/:存放具体的可执行脚本,是SKILL.md中描述的逻辑的具体实现。例如,write_next.py、revise_chapter.py等。/assets/project-template/:当你运行init时,实际拷贝的就是这个模板。你可以根据自己常写的题材(如科幻、武侠),复制并修改这个模板,创建属于自己的专属初始化模板。/examples/demo-novel/:最佳学习路径。这里包含一个完整的、可运行的小说项目示例,里面有写好的truth files和几章示例内容。通过看这个例子,你能直观地理解各个文件如何配合,比读十篇文档都管用。/docs/cli.md:如果你喜欢通过命令行直接与技能交互,这份文档列出了所有可用的命令及其参数。对于调试和自动化集成非常有用。/references/:存放了JSON Schema定义、工作流剧本等参考材料。当你需要深度定制技能行为(比如修改状态提取的规则)时,需要查阅这里。
对于绝大多数使用者,我的建议是:先跑通/examples/demo-novel/,再回头细读SKILL.md,最后在需要自动化时查阅docs/cli.md。
3.3 配置与定制化要点
要让这个技能发挥最大效力,通常需要一些配置:
- 模型选择:在OpenClaw的配置中,指定
draft(起草)阶段使用哪个大语言模型。对于需要强逻辑和长上下文的小说写作,像GPT-4、Claude-3 Opus这类模型效果更好,虽然成本更高。revise和extract-state阶段可以使用稍快或便宜的模型,如Claude-3 Haiku,因为它们执行的是更结构化、规则性更强的任务。 - Truth Files模板定制:不要满足于默认模板。根据你的小说类型,丰富模板内容。比如写侦探小说,可以在模板中加入
clues.md(线索档案)和timeline.md(精确时间线);写群像剧,可以强化relationships.md(关系图谱)的格式。 - 工作流钩子:技能支持在某些步骤前后插入自定义脚本(钩子)。例如,你可以在
state-update之前,运行一个自己的脚本,对提取的状态进行二次校验;或者在draft之后,自动调用一个文本朗读工具来听一遍初稿,从听觉上检查流畅度。
4. 实战场景:从零开始创作一篇奇幻网文
让我们用一个具体的例子,把整个流程串起来。假设我们要写一部名为《深渊回响》的奇幻小说。
4.1 第一阶段:初始化与世界观搭建
首先,在OpenClaw中触发技能,选择init操作,并指定项目名称deep_echo。技能会基于模板创建项目文件夹。
接下来,我们花时间精心填充truth files:
- 在
worldview.md里,我们定义:“魔力‘玛那’源于生命情感,喜悦产生治愈白光,愤怒产生破坏红光,且每个人天生亲和一种颜色。过度使用魔力会导致情感钝化。” - 在
characters.md里,定义主角“艾文”:亲和“蓝色-忧郁”魔力,能力是制造寂静领域和读取物品上的残留情感,性格内向敏感,因童年创伤害怕喧闹。 - 在
plot_points.md里,写下开篇悬念:“艾文在旧货市场买到的怀表,总是传出无法辨认的深渊低语。” current_state.md初始化为:“艾文在卧室,独自研究发出低语的怀表,感到既恐惧又好奇。”
4.2 第二阶段:规划与撰写第一章
运行write-next。技能读取初始状态,生成第一章任务包:
- 核心目标:引入怀表悬念,展现艾文的性格与能力,发生一个小型冲突事件。
- 场景建议:从卧室开始,可转移到夜晚的街头。
- 冲突点:怀表低语突然加剧,引来一只对魔力敏感的小型暗影生物。
- 规则:艾文只能使用“蓝色”魔力,表现为寂静、迟缓、感知类效果。
根据这个任务包,运行draft,生成第一章内容。假设AI写出了:艾文试图用寂静领域隔绝低语失败,暗影生物袭击,他情急之下用怀表格挡,怀表发出强光击退生物,但艾文感到一阵剧烈的悲伤(情感钝化初现)。
4.3 第三阶段:修订与状态更新
运行revise。审查报告可能提示:“暗影生物的出现略显突兀,建议在前文增加环境铺垫,如窗外的阴影不自然地扭动。” 我们采纳建议,进行修改。
修改完成后,运行extract-state和state-update。技能从第一章提取出:
- 新事实:怀表对暗影生物有驱散作用,使用时会引发使用者悲伤。
- 状态变化:艾文情绪状态添加“疲惫与莫名悲伤”,魔力水平“轻微钝化”。
- 新伏笔:怀表的低语在击退生物后,变成了断断续续的求救语句。
- 当前场景:艾文在午夜街角,手持发烫的怀表,惊魂未定。
这些信息被更新到truth files中。现在,准备第二章时,AI就知道怀表的新特性、艾文的情感损耗,以及“求救声”这个新线索。
4.4 第四阶段:长期维护与回溯
如此循环往复。每写完一章,状态都被及时捕获和固化。当你写到第50章,突然忘了某个配角在第10章获得的关键道具是什么时,你可以直接在truth files的plot_points.md或相关角色的档案里搜索。当你想调整后期大纲时,可以回顾current_state.md的演变历史,清晰地看到故事是如何一步步发展到今天的。
5. 常见问题与排查技巧实录
在实际使用中,你肯定会遇到各种问题。下面是我踩过坑后总结的一些典型问题与解决方法。
5.1 状态提取不准确或遗漏
这是最常见的问题。AI可能漏提了某个重要对话中隐含的关系变化,或者错误地将角色的比喻说法当成了事实。
- 排查技巧:
- 检查原始文本清晰度:AI提取依赖明确的陈述。确保你的章节文本本身没有过多模糊、诗意的表达。重要的状态变化,尽量通过角色的直接对话、动作或叙述者的明确说明来展现。
- 细化提取规则:参考
/references/下的JSON Schema,你可以尝试微调状态提取的提示词(prompt),明确告诉AI需要关注哪些元素(如“重点提取角色情绪、身体状况、持有物品的变更,以及新出现的地点信息”)。 - 启用人工审核环节:在
extract-state后,不要直接运行state-update。先将提取报告保存为中间文件,人工核对无误后,再手动触发或用一个确认脚本触发更新。
5.2 故事走向逐渐偏离大纲
即使有truth files,AI在长期生成中也可能因为单次提示的随机性,让故事慢慢“跑偏”。
- 排查技巧:
- 定期运行“一致性审计”:可以每周或每十章,专门运行一个额外的检查脚本。这个脚本将最新章节与最初的
worldview.md和角色核心设定进行比对,生成一份偏离度报告。 - 强化
write-next的约束力:在生成章节任务包时,除了当前状态,也加入“长期目标”或“本卷主题”作为约束。例如,在任务包中强调“本章需为三个月后‘王都叛乱’事件埋下至少一个伏笔”。 - 利用修订环节强力纠偏:在
revise阶段,除了自动检查,手动加入一条硬性规则:必须评估本章内容对核心主线的推进程度。如果偏离过多,则要求在本章内通过对话或事件进行“拉回”。
- 定期运行“一致性审计”:可以每周或每十章,专门运行一个额外的检查脚本。这个脚本将最新章节与最初的
5.3 性能与成本问题
处理长文本、频繁调用大模型,尤其是GPT-4这类高级模型,时间和金钱成本会累积。
- 排查技巧:
- 分层使用模型:将成本高的模型用在刀刃上。
draft(创作)使用高质量模型(如GPT-4)。revise(修订)中的语法检查、基础一致性校验可以使用快速廉价模型(如GPT-3.5-Turbo)。extract-state(提取)可以使用在结构化任务上表现好的模型(如Claude-3 Haiku)。 - 优化Truth Files的检索:不要每次都将全部
truth files内容一股脑塞给AI。实现一个简单的向量检索(RAG)系统,在write-next和draft时,只检索与当前章节最相关的设定片段,大幅减少令牌(Token)消耗。 - 设置章节长度预算:在
draft的指令中明确章节的字数范围(如2000-3000字),避免AI生成过于冗长或简短的内容,造成不必要的计算浪费。
- 分层使用模型:将成本高的模型用在刀刃上。
5.4 技能与OpenClaw集成故障
有时技能命令无法被正确调用,或者输出结果OpenClaw无法解析。
- 排查技巧:
- 首先检查
SKILL.md格式:OpenClaw严重依赖此文件的格式。确保能力描述、输入输出格式严格遵循OpenClaw skill的规范。一个常见的错误是JSON Schema定义有误。 - 查看OpenClaw日志:运行技能时,打开OpenClaw的调试日志,查看具体是哪一步出错,是参数传递错误,还是脚本执行超时。
- 在本地直接测试脚本:脱离OpenClaw,直接在命令行运行
scripts/目录下的Python脚本,并传入模拟参数,看是否能正常工作。这能帮你快速定位是技能逻辑问题还是框架集成问题。
- 首先检查
这个项目的魅力在于,它正视了AI写作在“连续性”上的短板,并用工程化的思维去弥补。它不保证你能写出惊世杰作——那依然取决于你的创意和审美——但它能极大地降低管理长篇故事设定的心智负担,让AI从一个容易失忆的临时写手,变成一个靠谱的、有“项目文档”可查的协作伙伴。我最深的体会是,使用这套流程后,我不再害怕写长篇了,因为我知道,故事的“记忆”被可靠地保存着,我可以随时从中断的地方,有条不紊地继续下去。