【开源】InkOS v0.3 更新:题材特性与单本书规则支持自定义

2026-04-11 10:241阅读0评论SEO资源
  • 内容介绍
  • 文章标签
  • 相关推荐
问题描述:

还是再简单介绍一下,这是根据 宁 河图 佬分享的 AI 写小说提示词体系工程化后的一个 CLI 工具,五个 agent 流水线自动化了流程,还能够交给OpenClaw使用自主生产。

【开源】InkOS:受佬友启发的一个用于自主生产小说的CLI Agent,31章45万字实测 开发调优
前天看到 宁 河图 佬分享的 AI 写小说提示词体系,花了一些时间Vibe把佬的提示词方法论工程化,做成一个 CLI 工具,五个 agent 流水线自动化了流程,能使用自然语言交互,还能够交给OpenClaw使用可插拔的自主生产。欢迎佬友们star,issue,pr。 核心思路:从手动提示词到自动化管线 这套体系的几个设计: 持久化追踪(状态卡 / 微粒账本 / 伏笔池)作为唯一事实来…

v0.3 把这些规则从代码里提炼出来,做了三层分离:基础护栏(~25 条通用规则,所有题材共享)→ 题材特性(每个题材的专属禁忌、语言铁律、节奏、审计维度)→ 用户自定义规则(每本书独立的主角人设、数值上限、禁令覆盖)。

github.com

GitHub - Narcooo/inkos: Multi-agent novel production system — AI agents...

Multi-agent novel production system — AI agents autonomously write, audit, and revise novels with human review gates

题材自定义

内置 5 个题材。

题材 自带规则
玄幻 数值系统、战力体系、同质吞噬衰减公式、打脸/升级/收益兑现节奏
仙侠 修炼/悟道节奏、法宝体系、天道规则
都市 年代考据、商战/社交驱动、法律术语年代匹配、无数值系统
恐怖 氛围递进、恐惧层级、克制叙事、无战力审计
通用 最小化兜底

创建书时指定题材就行:

inkos book create --title "吞天魔帝" --genre xuanhuan

题材规则可以查看、复制到项目中改、或从零创建:

inkos genre list # 查看所有题材 inkos genre show xuanhuan # 查看玄幻的完整规则 inkos genre copy xuanhuan # 复制到项目中,随意改 inkos genre create wuxia --name 武侠 # 从零创建新题材

复制到项目后,增删禁忌、调整疲劳词、修改节奏规则、自定义语言铁律——改完下次写章自动生效。

每个题材有专属语言规则(带 ✗→✓ 示例),写手和审计员同时执行:

  • 玄幻:✗ “火元从12缕增加到24缕” → ✓ “手臂比先前有力了,握拳时指骨发紧”
  • 都市:✗ “迅速分析了当前的债务状况” → ✓ “把那叠皱巴巴的白条翻了三遍”
  • 恐怖:✗ “感到一阵恐惧” → ✓ “后颈的汗毛一根根立起来”

单本书规则

每本书有独立的 book_rules.md,建筑师 agent 创建书时自动生成,也可以随时手改。写在这里的规则注入每一章的 prompt:

protagonist: name: 林烬 personalityLock: ["强势冷静", "能忍能杀", "有脑子不是疯狗"] behavioralConstraints: ["不圣母不留手", "对盟友有温度但不煽情"] numericalSystemOverrides: hardCap: 840000000 resourceTypes: ["微粒", "血脉浓度", "灵石"] prohibitions: - 主角关键时刻心软 - 无意义后宫暧昧拖剧情 - 配角戏份喧宾夺主 fatigueWordsOverride: ["瞳孔骤缩", "不可置信"]

主角人设锁定、数值上限、自定义禁令、疲劳词覆盖——每本书的规则独立调整,不影响题材模板。

19 维度审计

审计细化为 19 个维度,按题材自动启用对应的子集:

OOC检查、时间线、设定冲突、伏笔、节奏、文风、信息越界、词汇疲劳、利益链断裂、配角降智、配角工具人化、爽点虚化、台词失真、流水账、知识库污染、视角一致性、战力崩坏、数值检查、年代考据

玄幻/仙侠全 19 维度,都市 17 维度(含年代考据),恐怖 15 维度。不需要的维度不会干扰审计结果。

去 AI 味

  • AI 标记词限频:仿佛/忽然/竟然/不禁/宛如/猛地,每 3000 字 ≤ 1 次
  • 叙述者不替读者下结论,只写动作
  • 禁止分析报告式语言(“核心动机”"信息落差"不入正文)
  • 同一意象渲染不超过两轮
  • 方法论术语不入正文

词汇疲劳审计同时检测标记词密度,超标即 warning。

配置

# 必填 INKOS_LLM_PROVIDER=openai # openai / anthropic INKOS_LLM_BASE_URL=https://api.openai.com/v1 # API 地址(支持中转站) INKOS_LLM_API_KEY=sk-xxx # API Key INKOS_LLM_MODEL= # 模型名 # 可选 # INKOS_LLM_TEMPERATURE=0.7 # INKOS_LLM_MAX_TOKENS=8192 # INKOS_LLM_THINKING_BUDGET=0 # Anthropic 扩展思考预算 # INKOS_LLM_API_FORMAT=chat # chat(默认)或 responses(OpenAI Responses API)

其他

  • 修订者支持 polish / rewrite / rework 三种模式
  • 无数值系统的题材(都市/恐怖)不生成资源账本

实测

3 个题材各 3 章:玄幻(数值追踪、战力验算、资源账本全程工作)、都市(年代考据启用、法律术语匹配 2003 年语感、无数值系统)、恐怖(氛围递进、克制叙事、恐惧层级、无战力审计)。

安装

npm i -g @actalk/inkos 网友解答:


--【壹】--:

问题已修复


--【贰】--:

inkos up Starting InkOS daemon... Write cycle: */15 * * * * Radar scan: 0 */6 * * * Max concurrent books: 3 [writer] Post-write: 1 errors, 1 warnings in chapter 4 [error] 禁止破折号: 出现了破折号「——」 [warning] 连续了字: 检测到4句连续包含"了"字,节奏拖沓 [pipeline] 1 post-write errors detected, triggering spot-fix before audit

出现这种情况应该怎么办?让它重写?一直卡着不动了


--【叁】--:

强到爆炸啊,佬是编辑吗?对网文套路这么熟悉


--【肆】--:

好像主贴被举报下架了,有什么问题佬友们在这里聊吧


--【伍】--:

试一下看效果怎么样,看是不是比市面上常见的那些网文辅助写作工具更好用一些。


--【陆】--: majxxxx:

warning

warning的条目是要手动更改吗?


--【柒】--:

我用inkos agent命令输入了我的书籍预设,工具也回复了一大堆,但是实际上并没有建立任何目录和文档哇

没事了。。。交给了龙虾,搞定了。。。龙虾比敲命令管用


--【捌】--:

感谢大佬,最近正在研究用AI写小说


--【玖】--:

感谢大佬


--【拾】--:

大佬,收藏学习


--【拾壹】--:

回头试试看,有意思


--【拾贰】--:

大佬,请教一下怎么控制单章字数?总是超出限制范围太多。


--【拾叁】--:

这咋还有人举报,我是说怎么看不到主贴了


--【拾肆】--:

image2067×684 144 KB
我说原帖怎么找不到了 用AI搓了个前端,加入了个底层的写作风格提示词,这就去注册番茄账号~


--【拾伍】--:

更新或者卸载重装,都失败

npm install -g @actalk/inkos npm error code EUNSUPPORTEDPROTOCOL npm error Unsupported URL Type "workspace:": workspace:* npm error A complete log of this run can be found in: /Users/mhp/.npm/_logs/2026-03-15T01_27_00_251Z-debug-0.log


--【拾陆】--:

大佬 我安装失败了:
0 verbose cli /Users/muchuan/.nvm/versions/node/v24.13.0/bin/node /Users/muchuan/.nvm/versions/node/v24.13.0/bin/npm
1 info using npm@11.6.2
2 info using node@v24.13.0
3 silly config load:file:/Users/muchuan/.nvm/versions/node/v24.13.0/lib/node_modules/npm/npmrc
4 silly config load:file:/Users/muchuan/.npmrc
5 silly config load:file:/Users/muchuan/.nvm/versions/node/v24.13.0/etc/npmrc
6 verbose title npm i @actalk/inkos
7 verbose argv “i” “–global” “@actalk/inkos”
8 verbose logfile logs-max:10 dir:/Users/muchuan/.npm/_logs/2026-03-17T10_27_38_040Z-
9 verbose logfile /Users/muchuan/.npm/_logs/2026-03-17T10_27_38_040Z-debug-0.log
10 silly packumentCache heap:4496293888 maxSize:1124073472 maxEntrySize:562036736
11 silly logfile start cleaning logs, removing 4 files
12 silly idealTree buildDeps
13 silly fetch manifest @actalk/inkos@*
14 silly packumentCache full:https://registry.npmjs.org/@actalk%2Finkos cache-miss
15 silly logfile done cleaning log files
16 http fetch GET 200 https://registry.npmjs.org/@actalk%2Finkos 1720ms (cache miss)
17 silly packumentCache full:https://registry.npmjs.org/@actalk%2Finkos set size:undefined disposed:false
18 silly placeDep ROOT @actalk/inkos@0.4.6 OK for: want: *
19 verbose stack Error: Unsupported URL Type “workspace:”: workspace:*
19 verbose stack at unsupportedURLType (/Users/muchuan/.nvm/versions/node/v24.13.0/lib/node_modules/npm/node_modules/npm-package-arg/lib/npa.js:369:15)
19 verbose stack at fromURL (/Users/muchuan/.nvm/versions/node/v24.13.0/lib/node_modules/npm/node_modules/npm-package-arg/lib/npa.js:428:13)
19 verbose stack at npa.resolve (/Users/muchuan/.nvm/versions/node/v24.13.0/lib/node_modules/npm/node_modules/npm-package-arg/lib/npa.js:110:12)
19 verbose stack at /Users/muchuan/.nvm/versions/node/v24.13.0/lib/node_modules/npm/node_modules/@npmcli/arborist/lib/arborist/build-ideal-tree.js:1036:39
19 verbose stack at run (/Users/muchuan/.nvm/versions/node/v24.13.0/lib/node_modules/npm/node_modules/promise-call-limit/dist/commonjs/index.js:67:22)
19 verbose stack at /Users/muchuan/.nvm/versions/node/v24.13.0/lib/node_modules/npm/node_modules/promise-call-limit/dist/commonjs/index.js:84:9
19 verbose stack at new Promise ()
19 verbose stack at callLimit (/Users/muchuan/.nvm/versions/node/v24.13.0/lib/node_modules/npm/node_modules/promise-call-limit/dist/commonjs/index.js:35:69)
19 verbose stack at #buildDepStep (/Users/muchuan/.nvm/versions/node/v24.13.0/lib/node_modules/npm/node_modules/@npmcli/arborist/lib/arborist/build-ideal-tree.js:1050:11)
19 verbose stack at async Arborist.buildIdealTree (/Users/muchuan/.nvm/versions/node/v24.13.0/lib/node_modules/npm/node_modules/@npmcli/arborist/lib/arborist/build-ideal-tree.js:182:7)
20 error code EUNSUPPORTEDPROTOCOL
21 error Unsupported URL Type “workspace:”: workspace:*
22 silly unfinished npm timer reify 1773743258232
23 silly unfinished npm timer reify:loadTrees 1773743258249
24 silly unfinished npm timer idealTree:buildDeps 1773743258252
25 silly unfinished npm timer idealTree:ROOT 1773743258252
26 verbose cwd /Users/muchuan
27 verbose os Darwin 24.6.0
28 verbose node v24.13.0
29 verbose npm v11.6.2
30 verbose exit 1
31 verbose code 1
32 error A complete log of this run can be found in: /Users/muchuan/.npm/_logs/2026-03-17T10_27_38_040Z-debug-0.log


--【拾柒】--:

手动初始化、创建书籍、然后写就报错,检查发现初始化时,有些文件写入失败了。
自动写也同样报错

inkos doctor [..] Testing API connectivity... InkOS Doctor [OK] Node.js >= 20: v22.21.1 [OK] inkos.json: Found [OK] .env: Found [OK] Global Config: Found (/Users/mhp/.inkos/.env) [OK] LLM API Key: Configured [OK] Books: 1 book(s) found [OK] API Connectivity: OK (model: claude-opus-4-6, tokens: 7) inkos write next 程序员修仙 [1/1] Writing chapter for "程序员修仙"... [ERROR] Failed to write chapter: Error: book_rules.md missing YAML frontmatter (--- ... ---) cat book_rules.md [book_rules 生成失败,需要重新生成]% inkos agent "帮我写一本都市修仙,主角是个程序员" 好的,我来帮你创建一本都市修仙小说,主角是程序员。 [tool] create_book({"title":"代码修仙","genre":"urban","platform":"qidian","brief":"都市修仙题材,主角是一名程序员,在现代都市中踏上修仙之路。将编程思维与修仙体系结合,探索代码与修炼的奇妙联系。节奏稳健,注重逻辑自洽和爽点设计。"}) [result] create_book → {"bookId":"代码修仙","title":"代码修仙","status":"created"} 书已经建好了,来看看生成的世界观和卷纲设定。 [tool] read_truth_files({"bookId":"代码修仙"}) [result] read_truth_files → {"currentState":"[current_state 生成失败,需要重新生成]","particleLedger":"(文件不存在)","pendingHooks":"[pending_hooks 生成失败,需要重新生成]","storyBible":"## 01_世界观\n\n时代背景:2024年,中国一线城市深圳。互联网行业经历寒冬后缓慢复苏,大厂裁员潮余波未平,35岁危机成为程序员... 世界观已经生成了一部分,核心设定很扎实——"代码即道",程序员通过编程思维感知和调用现实底层逻辑来修炼。境界体系也很有意思:感知期(Debug)→ 编译期(Compile)→ 运行期(Runtime)→ 架构期(Architecture)。 虽然卷纲和部分文件还没完全生成,但核心世界观已经立住了,可以直接开始写第一章。先用完整管线跑一章出来看看效果? [tool] write_full_pipeline({"bookId":"代码修仙","count":1}) [result] write_full_pipeline → {"error":"Error: book_rules.md missing YAML frontmatter (--- ... ---)"} 看起来卷纲和规则文件没完全生成,我先直接用 write_draft 带上创作指导来写第一章。 [tool] write_draft({"bookId":"代码修仙","guidance":"第一章,开篇。主角是深圳的一名普通程序员,正在经历996和35岁危机的焦虑。某天加班到深夜debug一个诡异的bug时,意外触发了灵气感知,进入感知期(Debug阶段)。开篇要接地气,用程序员熟悉的日常场景切入,让读者有代入感。节奏紧凑,结尾留钩子。字数3000左右。"}) [result] write_draft → {"error":"Error: book_rules.md missing YAML frontmatter (--- ... ---)"} 世界观和人物设定已经非常扎实了,问题出在 `book_rules.md` 生成失败导致写作管线跑不起来。让我重新建一次书,这次用更精简的方式试试。 [tool] create_book({"brief":"都市修仙。主角陆辰,28岁深圳程序员,凌晨debug时意外觉醒,能感知世界底层源代码。修炼体系\"代码即道\":感知期(Debug)→编译期(Compile)→运行期(Runtime)→架构期(Architecture)→内核期(Kernel)。术式基于物理规则微调,无火球雷电。势力:国家机构\"栈\"、公司CTO暗藏秘密、民间\"开源社\"、境外\"Root\"。金手指:异常捕获,天生安全审计员。起点男频,节奏紧凑,程序员梗自然融入。","genre":"urban","platform":"qidian","title":"源码修仙"}) [result] create_book → {"bookId":"源码修仙","title":"源码修仙","status":"created"} 好,书建好了,直接试试写第一章。 [tool] write_full_pipeline({"bookId":"源码修仙","count":1}) [result] write_full_pipeline → {"error":"Error: book_rules.md missing YAML frontmatter (--- ... ---)"} 看起来 `book_rules.md` 的生成一直有格式问题,导致写作管线被卡住。让我换个思路,直接用 `write_draft` 带详细指导来尝试绕过这个限制。 [tool] write_draft({"bookId":"源码修仙","guidance":"写第一章,章节标题「段错误」。场景:深夜11点半,深圳南山科技园,云策科技12楼办公室。主角陆辰独自加班debug一个线上内存泄漏bug,已经连续加班第六天。他在服务器日志中发现一行不属于任何已知模块的异常输出,像是某种自组织的逻辑结构。他越排查越觉得诡异,决定去负一层机房实地查看。在机房中,他进入极度专注状态,意外触及源码层——看到空气中有若隐若现的信息丝线在流动。他吓了一跳,以为自己幻觉,揉眼后丝线消失。他强迫自己冷静,把这归结为连续加班导致的精神问题。回到工位收拾东西准备走,但在电梯里,他又短暂地看到了——电梯按钮周围有微弱的光丝。结尾:他回到城中村的出租屋,躺在床上睡不着,打开手机搜索\"长期熬夜 幻觉 精神分裂早期症状\"。风格要求:第三人称有限视角,语言干净利落,内心独白用程序员思维方式(比如把问题拆解为变量和条件),适度穿插程序员日常细节增加真实感,不要过度解释修仙设定(第一章只展示异象,不解释原理)。字数3000-3500字。"}) [result] write_draft → {"error":"Error: book_rules.md missing YAML frontmatter (--- ... ---)"} 看起来 `book_rules.md` 的格式问题是个系统性bug,所有写作工具都依赖这个文件。让我检查一下之前成功建过的书,看看有没有能正常工作的。 [result] list_books → {"error":"SyntaxError: Unexpected end of JSON input"} [ERROR] Agent failed: SyntaxError: Unexpected end of JSON input


--【拾捌】--:

inkos agent "先扫描市场趋势,然后根据结果创建一本新书" 好,先扫描市场看看当前什么题材热门。 [result] scan_market → {"error":"SyntaxError: Unexpected end of JSON input"} [ERROR] Agent failed: SyntaxError: Unexpected end of JSON input

还需要配置什么?