docs: update README for v0.3.0, add LinuxDo post

- Three-layer rule architecture section
- 19-dimension audit table
- Anti-AI-taste rules section
- Genre CLI commands in command reference
- Updated roadmap and project structure
This commit is contained in:
majx_mac
2026-03-13 15:04:58 +08:00
parent daa3082eca
commit 9adacb54a2
3 changed files with 262 additions and 65 deletions
+104 -22
View File
@@ -27,7 +27,7 @@ Agent 写小说。写、审、改,全程接管。
用 AI 写小说不是简单的"提示词 + 复制粘贴"。长篇小说很快就会崩:角色记忆混乱、物品凭空出现、同样的形容词每段都在重复、伏笔悄无声息地断掉。InkOS 把这些当工程问题来解决。
- **三大真相文件** — 追踪世界的真实状态,而非 LLM 的幻觉
- **长期记忆** — 追踪世界的真实状态,而非 LLM 的幻觉
- **反信息泄漏** — 确保角色只知道他们亲眼见证过的事
- **资源衰减** — 物资会消耗、物品会损坏,没有无限背包
- **词汇疲劳检测** — 在读者发现之前就捕捉过度使用的词语
@@ -35,23 +35,23 @@ Agent 写小说。写、审、改,全程接管。
## 工作原理
InkOS 为每一章运行多智能体管线
每一章由五个 Agent 接力完成
<p align="center">
<img src="assets/screenshot-pipeline.png" width="800" alt="管线流程图">
</p>
| 智能体 | 职责 |
|--------|------|
| Agent | 职责 |
|-------|------|
| **雷达 Radar** | 扫描平台趋势和读者偏好,指导故事方向(可插拔,可跳过) |
| **建筑师 Architect** | 规划章节结构:大纲、场景节拍、节奏控制 |
| **写手 Writer** | 根据大纲 + 当前世界状态生成正文 |
| **连续性审计员 Auditor** | 对照三大真相文件验证草稿 |
| **连续性审计员 Auditor** | 对照长期记忆验证草稿 |
| **修订者 Reviser** | 修复审计发现的问题 — 关键问题自动修复,其他标记给人工审核 |
如果审计不通过,管线自动进入"修订 → 再审计"循环,直到所有关键问题清零。
### 三大真相文件
### 长期记忆
每本书维护三个文件作为唯一事实来源:
@@ -64,12 +64,85 @@ InkOS 为每一章运行多智能体管线:
连续性审计员对照这三个文件检查每一章草稿。如果角色"记起"了从未亲眼见过的事,或者拿出了两章前已经丢失的武器,审计员会捕捉到。
<p align="center">
<img src="assets/screenshot-state.png" width="800" alt="三大真相文件快照">
<img src="assets/screenshot-state.png" width="800" alt="长期记忆快照">
</p>
### 三层规则架构
InkOS 采用三层规则合并机制,让通用规则、题材规范、单本书定制层层叠加:
```
通用规则(~25 条,代码内置)
↓ 合并
题材规范(genres/*.md,按题材定制)
↓ 合并
单本书规则(books/{id}/story/book_rules.md,逐本定制)
↓ 注入 prompt
LLM
```
**通用层** — 人物塑造、叙事技法、逻辑自洽、语言约束、去AI味铁律(共 ~25 条),适用于所有题材。
**题材层** — 内置 5 个题材 profile(玄幻、仙侠、都市、恐怖、通用),每个 profile 定义:
- 章节类型(战斗章/氛围章/商战章…)
- 高疲劳词列表 + AI 标记词检测
- 数值系统 / 战力体系 / 年代考据开关
- 节奏规则、爽点类型
- 审计维度启用列表
- 题材禁忌、语言铁律(带 ✗→✓ 示例)、叙事指导
**书籍层** — 主角人设锁定、题材锁定、数值上限、自定义禁令等,由建筑师 agent 在创建书籍时生成,也可手动编辑。
```bash
inkos genre list # 查看所有可用题材
inkos genre show xuanhuan # 查看玄幻 profile 详情
inkos genre create wuxia --name 武侠 # 创建自定义题材
inkos genre copy xuanhuan # 复制内置 profile 到项目中定制
```
### 19 维度连续性审计
审计员对每章草稿进行 19 个维度的检查,维度按题材自动启用:
| 维度 | 说明 | 条件 |
|------|------|------|
| OOC 检查 | 角色行为是否符合人设 | 始终 |
| 时间线检查 | 时间线是否连贯 | 始终 |
| 设定冲突 | 是否与已建立设定矛盾 | 始终 |
| 战力崩坏 | 战力是否前后一致 | powerScaling=true |
| 数值检查 | 资源/数值是否正确结算 | numericalSystem=true |
| 伏笔检查 | 伏笔是否遗忘或矛盾 | 始终 |
| 节奏检查 | 节奏是否符合题材预期 | 始终 |
| 文风检查 | 文风是否一致 | 始终 |
| 信息越界 | 角色是否知道不该知道的事 | 始终 |
| 词汇疲劳 | 高疲劳词 + AI 标记词密度 | 始终 |
| 利益链断裂 | 利益关系是否逻辑完整 | 始终 |
| 年代考据 | 年代细节是否准确 | eraResearch=true |
| 配角降智 | 配角是否被降智 | 始终 |
| 配角工具人化 | 配角是否沦为工具人 | 始终 |
| 爽点虚化 | 爽点是否落地 | 始终 |
| 台词失真 | 对话是否符合角色身份 | 始终 |
| 流水账 | 是否平铺直叙无起伏 | 始终 |
| 知识库污染 | 是否把设定资料原样搬进正文 | 始终 |
| 视角一致性 | 视角切换是否有过渡 | 始终 |
玄幻/仙侠启用全部 19 维度(含数值和战力),都市启用 17 维度(含年代考据,无数值/战力),恐怖启用 15 维度(无数值/战力/利益链)。
### 去 AI 味铁律
写手 agent 内置 5 条强制去 AI 味规则:
- 叙述者不替读者下结论 — 行为传达意图,不直说
- 禁止分析报告式语言 — "核心动机""信息边界"等推理术语禁入正文
- AI 标记词限频 — 仿佛/忽然/竟然/不禁等每 3000 字不超过 1 次
- 意象渲染限两轮 — 同一意象第三次出现必须切入新信息
- 方法论术语隔离 — 六步走心理分析的术语只在内部推理用,不入正文
每个题材还有专属语言铁律(带 ✗→✓ 对比示例),从源头限制 AI 味。
### 内置创作规则体系
写手 agent 内置了一套从大量网文创作实践中提炼的规则体系,覆盖 6 个维度:
通用层覆盖 6 个维度:
- **人物塑造铁律** — 角色行为由"过往经历 + 当前利益 + 性格底色"共同驱动;配角必须有独立动机
- **叙事技法** — Show don't tell、五感代入法、每章结尾必须设置钩子、信息分层植入
@@ -78,7 +151,7 @@ InkOS 为每一章运行多智能体管线:
- **禁忌清单** — 禁止机械降神、反派降智、主角圣母、特定句式和标点
- **数值验算铁律** — 每次数值变动必须从账本取值验算,同质资源有衰减公式
每本书还有自己的 `style_guide.md`文风指南)和 `story_bible.md`(世界观设定),由建筑师 agent 在创建书籍时生成。
每本书还有自己的 `book_rules.md`写作规则)和 `story_bible.md`(世界观设定),由建筑师 agent 在创建书籍时生成。
## 三种使用模式
@@ -99,9 +172,9 @@ inkos audit 吞天魔帝 31 --json
inkos revise 吞天魔帝 31 --json
```
每个命令独立执行单一操作,`--json` 输出结构化数据。可被 OpenClaw 等自主智能体通过 `exec` 调用,也可用于脚本编排。
每个命令独立执行单一操作,`--json` 输出结构化数据。可被 OpenClaw 等 AI Agent 通过 `exec` 调用,也可用于脚本编排。
### 3. 自然语言 Agent 模式LLM 自主编排)
### 3. 自然语言 Agent 模式
```bash
inkos agent "帮我写一本都市修仙,主角是个程序员"
@@ -109,7 +182,7 @@ inkos agent "写下一章,重点写师徒矛盾"
inkos agent "先扫描市场趋势,然后根据结果创建一本新书"
```
内置 9 个工具(write_draft、audit_chapter、revise_chapter、scan_market、create_book、get_book_status、read_truth_files、list_books、write_full_pipeline),LLM 通过 tool-use 自主决定调用顺序。
内置 9 个工具(write_draft、audit_chapter、revise_chapter、scan_market、create_book、get_book_status、read_truth_files、list_books、write_full_pipeline),LLM 通过 tool-use 决定调用顺序。
## 快速开始
@@ -159,6 +232,10 @@ inkos up # 守护进程模式
| `inkos status` | 项目状态 |
| `inkos export <id>` | 导出书籍为 txt/md |
| `inkos radar scan` | 扫描平台趋势 |
| `inkos genre list` | 列出所有题材 profile |
| `inkos genre show <id>` | 查看题材 profile 详情 |
| `inkos genre create <id>` | 创建自定义题材 |
| `inkos genre copy <id>` | 复制内置 profile 到项目定制 |
| `inkos config set/show` | 查看/更新配置 |
| `inkos doctor` | 诊断配置问题 |
| `inkos up / down` | 启动/停止守护进程 |
@@ -203,7 +280,7 @@ inkos up # 守护进程模式
### 守护进程模式
`inkos up` 启动自主循环,按计划写章。管线对非关键问题全自动运行,当审计员标记无法自动修复的问题时暂停等待人工审核。
`inkos up` 启动后台循环,按计划写章。管线对非关键问题全自动运行,当审计员标记无法自动修复的问题时暂停等待人工审核。
### 通知推送
@@ -211,22 +288,23 @@ inkos up # 守护进程模式
### 外部 Agent 集成
原子命令 + `--json` 输出让 InkOS 可以被 OpenClaw 等自主智能体调用。OpenClaw 通过 `exec` 工具执行 `inkos draft`/`audit`/`revise`,读取 JSON 结果决定下一步操作。
原子命令 + `--json` 输出让 InkOS 可以被 OpenClaw 等 AI Agent 调用。OpenClaw 通过 `exec` 工具执行 `inkos draft`/`audit`/`revise`,读取 JSON 结果决定下一步操作。
## 项目结构
```
inkos/
├── packages/
│ ├── core/ # 智能体运行时、管线、状态管理
│ ├── core/ # Agent 运行时、管线、状态管理
│ │ ├── agents/ # architect, writer, continuity, reviser, radar
│ │ ├── pipeline/ # runner (原子操作 + 完整管线), agent (tool-use 编排), scheduler
│ │ ├── state/ # 基于文件的状态管理器
│ │ ├── llm/ # OpenAI 兼容接口 (流式)
│ │ ├── notify/ # Telegram, 飞书, 企业微信
│ │ ── models/ # Zod schema 校验
│ └── cli/ # Commander.js 命令行 (15 条命令)
└── commands/ # init, book, write, draft, audit, revise, agent, review, status, export...
│ │ ── models/ # Zod schema 校验 (genre-profile, book-rules)
│ └── genres/ # 内置题材 profile (xuanhuan, xianxia, urban, horror, other)
│ └── cli/ # Commander.js 命令行
│ └── commands/ # init, book, write, draft, audit, revise, agent, review, genre, status, export...
└── (规划中) studio/ # 网页审阅编辑界面
```
@@ -234,10 +312,14 @@ TypeScript 单仓库,pnpm workspaces 管理。
## 路线图
- [x] 完整智能体管线(雷达 → 建筑师 → 写手 → 审计 → 修订)
- [x] 三大真相文件 + 连续性审计
- [x] 内置创作规则体系
- [x] CLI 全套命令(15 条
- [x] 完整管线(雷达 → 建筑师 → 写手 → 审计 → 修订)
- [x] 长期记忆 + 连续性审计
- [x] 内置创作规则体系(~25 条通用规则 + 去AI味铁律)
- [x] 三层规则架构(通用 → 题材 → 单本书
- [x] 5 个内置题材 profile(玄幻、仙侠、都市、恐怖、通用)
- [x] 19 维度连续性审计(按题材自动启用)
- [x] 题材管理 CLIgenre list/show/create/copy
- [x] CLI 全套命令
- [x] 状态快照 + 章节重写
- [x] 守护进程模式
- [x] 通知推送(Telegram / 飞书 / 企微)
+31 -43
View File
@@ -1,64 +1,52 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512" fill="none">
<defs>
<linearGradient id="inkGrad" x1="0%" y1="0%" x2="100%" y2="100%">
<stop offset="0%" stop-color="#1a1a2e"/>
<stop offset="50%" stop-color="#16213e"/>
<stop offset="100%" stop-color="#0f3460"/>
<linearGradient id="bg" x1="0%" y1="0%" x2="100%" y2="100%">
<stop offset="0%" stop-color="#2d1b0e"/>
<stop offset="100%" stop-color="#1a1008"/>
</linearGradient>
<linearGradient id="penGrad" x1="0%" y1="0%" x2="100%" y2="100%">
<stop offset="0%" stop-color="#e94560"/>
<stop offset="100%" stop-color="#c23152"/>
<linearGradient id="drop" x1="0%" y1="0%" x2="0%" y2="100%">
<stop offset="0%" stop-color="#f4a261"/>
<stop offset="100%" stop-color="#e76f51"/>
</linearGradient>
<linearGradient id="dropGrad" x1="0%" y1="0%" x2="0%" y2="100%">
<stop offset="0%" stop-color="#533483"/>
<stop offset="100%" stop-color="#0f3460"/>
<linearGradient id="nib" x1="0%" y1="0%" x2="100%" y2="100%">
<stop offset="0%" stop-color="#fefae0"/>
<stop offset="100%" stop-color="#dda15e"/>
</linearGradient>
<filter id="glow">
<feGaussianBlur stdDeviation="3" result="coloredBlur"/>
<feGaussianBlur stdDeviation="4" result="blur"/>
<feMerge>
<feMergeNode in="coloredBlur"/>
<feMergeNode in="blur"/>
<feMergeNode in="SourceGraphic"/>
</feMerge>
</filter>
</defs>
<!-- Background circle -->
<circle cx="256" cy="256" r="240" fill="url(#inkGrad)" stroke="#e94560" stroke-width="3"/>
<!-- Background -->
<circle cx="256" cy="256" r="240" fill="url(#bg)" stroke="#f4a261" stroke-width="2.5" opacity="0.95"/>
<!-- Inner ring - circuit pattern -->
<circle cx="256" cy="256" r="210" fill="none" stroke="#533483" stroke-width="1.5" stroke-dasharray="12 6" opacity="0.6"/>
<!-- Subtle ring -->
<circle cx="256" cy="256" r="210" fill="none" stroke="#dda15e" stroke-width="1" stroke-dasharray="8 8" opacity="0.25"/>
<!-- Ink drop shape - main icon -->
<path d="M256 70 C256 70, 345 185, 345 268 C345 317, 305 362, 256 362 C207 362, 167 317, 167 268 C167 185, 256 70, 256 70Z"
fill="url(#dropGrad)" stroke="#e94560" stroke-width="2.5" filter="url(#glow)"/>
<!-- Ink drop -->
<path d="M256 80 C256 80, 340 190, 340 265 C340 312, 302 352, 256 352 C210 352, 172 312, 172 265 C172 190, 256 80, 256 80Z"
fill="url(#drop)" filter="url(#glow)" opacity="0.9"/>
<!-- Quill nib inside the drop -->
<path d="M256 130 L238 278 L256 312 L274 278 Z"
fill="url(#penGrad)" opacity="0.9"/>
<!-- Quill nib -->
<path d="M256 140 L240 275 L256 305 L272 275 Z"
fill="url(#nib)" opacity="0.85"/>
<!-- Quill split line -->
<line x1="256" y1="170" x2="256" y2="302" stroke="#1a1a2e" stroke-width="2" opacity="0.5"/>
<!-- Nib split -->
<line x1="256" y1="175" x2="256" y2="295" stroke="#2d1b0e" stroke-width="1.5" opacity="0.4"/>
<!-- Circuit nodes -->
<circle cx="185" cy="195" r="4" fill="#e94560" opacity="0.8"/>
<circle cx="327" cy="195" r="4" fill="#e94560" opacity="0.8"/>
<circle cx="165" cy="290" r="4" fill="#e94560" opacity="0.8"/>
<circle cx="347" cy="290" r="4" fill="#e94560" opacity="0.8"/>
<!-- Warm accent dots -->
<circle cx="190" cy="200" r="3" fill="#f4a261" opacity="0.5"/>
<circle cx="322" cy="200" r="3" fill="#f4a261" opacity="0.5"/>
<circle cx="170" cy="285" r="3" fill="#e9c46a" opacity="0.4"/>
<circle cx="342" cy="285" r="3" fill="#e9c46a" opacity="0.4"/>
<!-- Circuit lines -->
<line x1="185" y1="195" x2="165" y2="290" stroke="#e94560" stroke-width="1.5" opacity="0.4"/>
<line x1="327" y1="195" x2="347" y2="290" stroke="#e94560" stroke-width="1.5" opacity="0.4"/>
<!-- Data flow dots -->
<circle cx="148" cy="240" r="2.5" fill="#e94560" opacity="0.6"/>
<circle cx="364" cy="240" r="2.5" fill="#e94560" opacity="0.6"/>
<!-- Text: InkOS -->
<text x="256" y="420" text-anchor="middle" font-family="'Helvetica Neue', Arial, sans-serif" font-size="48" font-weight="700" fill="#ffffff" letter-spacing="4">InkOS</text>
<!-- Text -->
<text x="256" y="425" text-anchor="middle" font-family="'Helvetica Neue', Arial, sans-serif" font-size="50" font-weight="700" fill="#fefae0" letter-spacing="5">InkOS</text>
<!-- Subtitle -->
<text x="256" y="452" text-anchor="middle" font-family="'Helvetica Neue', Arial, sans-serif" font-size="13" fill="#e94560" letter-spacing="2" opacity="0.9">MULTI-AGENT NOVEL ENGINE</text>
<!-- Chinese subtitle -->
<text x="256" y="474" text-anchor="middle" font-family="'PingFang SC', 'Microsoft YaHei', sans-serif" font-size="11" fill="#ffffff" opacity="0.5">多智能体网文生产系统</text>
<text x="256" y="460" text-anchor="middle" font-family="'Helvetica Neue', Arial, sans-serif" font-size="13" fill="#f4a261" letter-spacing="3" opacity="0.8">NOVEL WRITING AGENT</text>
</svg>

Before

Width:  |  Height:  |  Size: 2.9 KiB

After

Width:  |  Height:  |  Size: 2.2 KiB

+127
View File
@@ -0,0 +1,127 @@
# InkOS v0.3.0 大更新:三层规则架构 + 19 维度审计 + 去 AI 味铁律
## 回顾
InkOS 是一个开源的自动化小说写作 CLI Agent,写、审、改全程接管。之前发过一次帖子介绍基本功能:5 个 Agent 接力写章节、长期记忆追踪、资源账本、伏笔管理等。
这次是一个架构级大更新,主要解决一个核心问题:**之前的规则全部硬编码为玄幻/爽文,换个题材写出来就是垃圾**。
## 这次更新了什么
### 1. 三层规则架构
之前 prompt 里 148 行规则全是"杀伐果断""同质吞噬衰减公式"这种玄幻专属内容。现在拆成三层:
```
通用规则(~25 条,代码内置,适用所有题材)
↓ 合并
题材规范(genres/*.md,按题材定制)
↓ 合并
单本书规则(books/{id}/story/book_rules.md,逐本定制)
↓ 注入 prompt
LLM
```
- **通用层**:人物塑造、叙事技法、逻辑自洽、语言约束、去AI味,~25 条硬规则
- **题材层**:内置 5 个题材 profile(玄幻、仙侠、都市、恐怖、通用),各有自己的章节类型、疲劳词、禁忌、语言铁律
- **书籍层**:主角人设锁定、数值上限、自定义禁令,建筑师 agent 自动生成,也可以自己改
好处:写都市文不会出现"同质吞噬衰减公式",写恐怖不会要求"三章内必须打脸"。
### 2. 19 维度连续性审计
审计员从笼统的"检查一致性"升级到 19 个明确维度:
OOC检查、时间线、设定冲突、战力崩坏、数值检查、伏笔、节奏、文风、信息越界、词汇疲劳、利益链断裂、年代考据、配角降智、配角工具人化、爽点虚化、台词失真、流水账、知识库污染、视角一致性。
关键点是**按题材自动启用**
- 玄幻/仙侠:全部 19 维度(含数值和战力)
- 都市:17 维度(加年代考据,去数值/战力)
- 恐怖:15 维度(去数值/战力/利益链)
不会出现恐怖小说被审计"战力崩坏"这种离谱结果。
### 3. 去 AI 味铁律
这是花了最多时间调的部分。用 3 个题材各跑了 3 章实测,发现 AI 味的核心来源:
1. **叙述者替读者下结论** — "他想看对方能不能活" 这种,应该只写动作让读者自己判断
2. **分析报告式语言** — "核心动机""信息边界""信息落差"这些推理术语渗入正文
3. **AI 标记词密度** — 仿佛/忽然/竟然/不禁/宛如/猛地,AI 特别爱用
4. **意象原地打转** — "火在体内流动"连写三遍
5. **方法论术语泄漏** — 内部推理用的"六步走心理分析"术语跑到正文里
对策:通用层加了 5 条硬性铁律,每个题材还有专属语言铁律带 ✗→✓ 对比示例。比如:
**玄幻**
- ✗ "他的火元从12缕增加到24缕" → ✓ "手臂比先前有力了,握拳时指骨发紧"
**都市**
- ✗ "他迅速分析了当前的债务状况" → ✓ "他把那叠皱巴巴的白条翻了三遍"
- ✗ "信息落差就在这儿" → ✓ "他们不知道的,他知道"
**恐怖**
- ✗ "他感到一阵恐惧" → ✓ "他后颈的汗毛一根根立起来"
### 4. 题材管理 CLI
```bash
inkos genre list # 查看所有可用题材
inkos genre show xuanhuan # 查看玄幻 profile 详情
inkos genre create wuxia --name 武侠 # 创建自定义题材
inkos genre copy xuanhuan # 复制内置 profile 到项目中定制
```
想加新题材?`inkos genre create` 生成模板,填好 YAML 头和 markdown 规则就行。想微调内置题材?`inkos genre copy` 复制一份到项目目录,改了就生效。
### 5. 单本书可调参数
每本书的 `story/book_rules.md` 支持 YAML 头配置:
```yaml
protagonist:
name: 林烬
personalityLock: ["强势冷静", "能忍能杀"]
behavioralConstraints: ["不圣母不留手"]
genreLock:
primary: xuanhuan
forbidden: ["都市腔", "科幻腔"]
fatigueWordsOverride: ["冷笑", "蝼蚁"] # 覆盖题材默认
additionalAuditDimensions: [12] # 额外启用年代考据
```
markdown body 部分可以写叙事视角、文风要求等自由格式的创作指导。
## 实测结果
用 3 个题材各跑了 2-3 章:
| 题材 | 书名 | 章节 | 特点 |
|------|------|------|------|
| 玄幻 | 烈焰吞天 | 3 章 | 数值追踪、战力验算、资源账本全程工作 |
| 都市 | 重生2003 | 3 章 | 无数值系统、年代考据启用、法律/商业术语匹配 2003 年语感 |
| 恐怖 | 末班地铁 | 3 章 | 无战力/数值审计、氛围递进、克制叙事 |
审计结果确认:
- 题材错位问题消失(恐怖不出现"战力崩坏"审计)
- 数值系统按题材条件化(都市/恐怖不生成 particle_ledger.md
- 词汇疲劳审计现在检测 AI 标记词密度
- 文风检查报告"场景落点具体""冷感与设备层细节稳定"
## 安装 & 使用
```bash
npm i -g @actalk/inkos
inkos init # 初始化项目
inkos book create --title "末班地铁" --genre horror # 创建恐怖题材书籍
inkos write next 末班地铁 # 写下一章
```
支持所有 OpenAI 兼容接口(需要支持 streaming)。
GitHubhttps://github.com/nicepkg/inkos
---
有问题直接问,欢迎提 issue 和 PR。