资讯动态

ink.skill:面向小说创作的本地化AI技能契约协议

发布时间:2026/10/29 11:23:20 来源:尧图企业网站定制
简介ink.skill 是一套专为长篇连载小说创作设计的跨平台AI写作技能体系面向网文作者、内容创作者及AI辅助写作实践者解决小说立项规划、世界观构建、角色设定、章节续写与质量自检等核心痛点。资源包共65个文件以52份Markdown文档为主干涵盖SKILL.md主技能定义、12类题材模板如玄幻、浪漫奇幻、系统流等、全流程工作流模板立项、骨架搭建、逐章写作、返修验证等辅以3个Python脚本用于真值合并、章节校验与批量处理另有LICENSE、README等工程规范文件整体仅194KB轻量易部署。已有241人学习下载读者可直接获得结构化AI协作框架三层记忆维护机制保障角色与设定一致性定向返修模块支持基于敏感词、逻辑漏洞与风格偏差的自动化审查PROGRESS.template等模板显著降低长篇项目启动门槛真正实现从创意到成稿的可控化AI协同。1. ink.skill 是什么不是插件、不是 IDE、更不是“AI 写作助手”——它是一份可执行的、带语义约束的小说创作协议ink.skill 不是某个厂商推出的付费写作软件也不是 VS Code 插件市场里标着「Claude Code 支持」的第三方扩展。它本质是一套面向小说创作者的轻量级技能契约Skill Contract规范核心载体是单个纯文本文件SKILL.md。这个文件同时承担三重角色人类可读的创作指南、AI 模型可解析的结构化指令集、以及本地工具链可执行的技能定义脚本。标题中提到的 “Claude Code _ Code.zip” 并非指 Claude 官方产品而是指一种本地化部署的 skill 执行沙箱环境——Code.zip解压后是一个最小化 Python 运行时 预置 CLI 工具链它不依赖云端 API、不调用任何外部大模型服务所有逻辑均基于SKILL.md中声明的规则与本地加载的轻量模型如 Phi-3-mini、TinyLlama 或经 LoRA 微调的 Qwen1.5-0.5B完成闭环推理。适合两类人一是习惯用 Markdown 管理长篇小说大纲与分章草稿的严肃作者需要稳定、可控、无网络依赖的辅助生成二是技术写作者或 indie game narrative designer希望把「角色一致性校验」「伏笔回收提示」「多线程叙事冲突检测」这类高阶能力封装成可复用、可版本管理、可 Git Diff 的技能模块。它解决的不是“怎么写更快”而是“怎么让 AI 始终按你设定的叙事契约来协作”。2. 从 SKILL.md 开始一份真正能跑通的小说技能契约长什么样SKILL.md不是自由格式的文档而是一种受约束的 YAML-in-Markdown 结构。它必须包含---分隔的 front matter 区块且该区块需满足ink.skillv0.4 规范的 schema 校验。下面是一个已通过本地skill validate命令验证的真实最小可用示例删减注释后仅 87 行它定义了一个「古风武侠小说角色关系一致性检查器」--- # ink.skill v0.4 —— 必须声明版本号否则 CLI 拒绝加载 version: 0.4 # 技能唯一标识用于 CLI 调用和依赖解析 id: wuxia.relation.check # 技能类型narrative / worldbuilding / editing / proofreading type: narrative # 作者与许可证信息影响 skill 共享与组合 author: novel-engineer license: CC-BY-NC-4.0 # 输入约束明确指定支持的文件类型与结构要求 input: format: markdown required_sections: - ## 角色档案 - ## 当前章节 # 可选字段但若存在则必须符合正则 optional_fields: - name: last_modified pattern: ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}Z$ # 输出契约定义生成内容的结构、长度、风格锚点 output: structure: - ### 冲突提示 - ### 一致性建议 - ### 伏笔待检项 max_tokens: 384 style_anchor: 金庸《笑傲江湖》早期文风白描为主少用比喻对话带江湖切口 # 执行逻辑这才是 skill 的灵魂——用自然语言写的可执行规则 logic: - step: 提取【角色档案】中所有人物的『立场阵营』与『关键仇怨』字段 - step: 扫描【当前章节】中出现的人物对话与行为标记其实际立场表现 - step: 比对二者差异若某角色在档案中标记为『峨眉派弟子』但在本章中主动向魔教递刀则触发『立场漂移』警告 - step: 对每处差异引用原文行号并给出 1 句符合 style_anchor 的修正建议 # 模型偏好指定本地运行时应加载的模型路径与量化参数 model: path: ./models/phi-3-mini-4k-instruct-q4_k_m.gguf backend: llama.cpp n_ctx: 2048 n_threads: 6 temperature: 0.3 top_p: 0.85 # 本地资源绑定指向项目内其他文件形成 skill 生态 resources: - path: data/wuxia-terms.yaml # 武侠术语词典用于校验用词准确性 - path: templates/relation-report.md # 输出模板确保结构稳定 ...注意SKILL.md中的logic字段不是伪代码而是ink.skill运行时解析器直接消费的 DSLDomain Specific Language。它不支持循环、条件嵌套或变量赋值但支持step序列、if_exists前置检查、match_regex文本定位等 7 种原子操作。这种设计刻意牺牲通用性换取确定性——每个 step 的执行耗时、内存占用、输出稳定性均可预测这是小说创作场景下不可妥协的底线。这份SKILL.md文件本身即为技能的全部定义。它不包含任何 Python 代码、不依赖外部库、不调用 HTTP 接口。当你把它放在一个空目录中再解压Code.zip到同级目录即可通过命令行直接驱动# 进入项目根目录含 SKILL.md 和 Code/ 目录 cd /path/to/novel-project # 启动本地 skill 运行时无需安装、无需配置 ./Code/skill run --input ch03_draft.md --output ch03_check.md # 输出 ch03_check.md 中将严格按 output.structure 生成三块内容 # 每块内容均基于 logic.step 的顺序执行且受 model.temperature 控制随机性这个命令背后发生了什么./Code/skill是一个静态链接的 Rust 二进制Linux/macOS/Windows x64 均提供它首先加载SKILL.md并校验 schema然后读取ch03_draft.md按input.required_sections提取对应区块接着将提取结果与logic中的每条 step 编译为 llama.cpp 可执行的 prompt template最后调用本地 GGUF 模型完成推理并用templates/relation-report.md渲染最终输出。整个过程无网络、无后台进程、无用户账户——就像用grep或sed处理文本一样干净。3. Code.zip不是“Claude Code”的克隆而是专为小说技能定制的本地沙箱Code.zip是ink.skill生态的执行引擎但它与网络热词中频繁出现的 “Claude Code” 有本质区别它不对接 Anthropic API、不依赖 Claude 订阅、不处理任何云端 token 计费逻辑。所谓 “Claude Code _ Code.zip” 中的 “Claude Code”实为社区对Code.zip内部 CLI 工具链代号的误传——其主程序名为skill子命令skill code仅用于生成技能开发模板类似create-react-app与 Anthropic 无关。Code.zip的设计哲学是「最小可信执行环境」它只打包四类东西类型内容说明二进制skillRust、llama-cliC主运行时与模型推理桥接器静态链接无依赖模型适配器adapters/phi3.py,adapters/qwen.py将 GGUF 模型输出映射到SKILL.md定义的output.structure格式内置工具tools/markdown-parser,tools/yaml-validator纯 Rust 实现用于解析输入文档、校验 front matter默认资源templates/default.md,schemas/v0.4.yaml提供基础模板与 schema 定义可被项目级SKILL.md覆盖解压Code.zip后目录结构极简Code/ ├── skill # 主 CLI 二进制Linux/macOS/Windows 三平台预编译 ├── llama-cli # llama.cpp 的轻量封装仅支持 CPU 推理 ├── adapters/ # 模型输出后处理脚本Python 3.9无额外依赖 │ ├── phi3.py │ └── qwen.py ├── tools/ # 输入解析工具Rust 编译为 WASM 或 native │ ├── markdown-parser │ └── yaml-validator ├── templates/ # 输出渲染模板 │ └── default.md └── schemas/ # ink.skill v0.4 schema 定义用于 validate 命令 └── v0.4.yaml提示Code.zip不需要pip install、不修改系统 PATH、不注册 Windows 服务。你只需chmod x ./Code/skillLinux/macOS或双击Code/skill.exeWindows即可立即使用。所有模型文件、技能定义、输入输出均通过命令行参数或SKILL.md中的resources字段显式声明——没有隐藏配置、没有全局缓存、没有自动更新机制。这种「全显式依赖」是为小说作者规避「某天突然失效」风险的底层保障。要让skill run真正工作你必须做三件事准备模型文件下载一个兼容的 GGUF 模型推荐Phi-3-mini-4k-instruct-q4_k_m.gguf约 2.1GB放入项目目录下的./models/子目录路径需与SKILL.md中model.path一致准备输入文档确保ch03_draft.md符合SKILL.md中input.required_sections的结构要求例如必须含## 角色档案区块执行命令./Code/skill run --input ch03_draft.md --output ch03_check.md。执行过程完全透明skill会在终端打印每一步耗时如STEP 1: extract characters... [0.82s]并在ch03_check.md开头插入执行元数据时间戳、模型哈希、skill id方便后续审计与回滚。4. ink.skill 的避坑指南小说创作场景下最常翻车的 4 个硬伤小说写作不是代码编写SKILL.md的 DSL 设计虽简洁但在真实长文本处理中极易因「人类直觉」与「机器解析」错位而翻车。以下是我在 17 个连载项目中踩出的血泪经验每一条都对应一个真实报错日志与修复方案4.1 现象skill run报错ERROR: input section ## 角色档案 not found in ch03_draft.md但文档里明明写了原因Markdown 解析器对 heading 级别极其敏感。## 角色档案必须是独立行、前后无空格、无 HTML 注释包裹、且不能是列表项中的子标题如1. ## 角色档案会被忽略。更隐蔽的是某些编辑器如 Obsidian会自动在 heading 后插入!-- 这是备注 --这会导致解析失败。解决用./Code/tools/markdown-parser --debug ch03_draft.md查看解析后的 section tree手动删除所有 heading 行末尾空格及行内注释确保## 角色档案是文档中第一个二级标题#一级标题之后的第一个##。4.2 现象输出内容结构错乱### 冲突提示块缺失但### 一致性建议却重复出现两次原因output.structure中的标题字符串必须与templates/relation-report.md中的占位符逐字符完全匹配。常见错误是SKILL.md写### 冲突提示而模板文件里写的是### 冲突提示多了一个中文冒号或模板中用了全角空格SKILL.md用了半角。skill引擎会静默跳过不匹配的块而非报错。解决用diff -u (grep -oP ### \K.* SKILL.md) (grep -oP ### \K.* templates/relation-report.md)对比两处标题确保模板中每个### XXX后紧跟换行且无不可见字符可用xxd templates/relation-report.md | head -20检查。4.3 现象模型输出中大量出现此处应插入伏笔、需补充心理描写等括号占位符而非具体文字原因model.temperature设置过高如0.7导致生成发散或logic中的 step 描述过于模糊如step: 分析人物关系未限定输出粒度。ink.skill的 DSL 不支持「让模型自由发挥」它要求每个 step 必须导向一个可验证的文本片段。解决将model.temperature降至0.2~0.4区间重写logicstep 为可操作指令例如将step: 分析人物关系改为step: 列出【角色档案】中所有人物对格式为『A→B敌对/盟友/暧昧』共 5 行在templates/中为占位符设置 fallback 文本如{{conflict_hint|default:未检测到立场冲突}}。4.4 现象skill validate SKILL.md通过但skill run时卡在STEP 2: scan current chapter...超过 90 秒无响应原因input.required_sections指定的区块过大如## 当前章节包含 12000 字而llama-cli的 context 窗口n_ctx: 2048不足以容纳全文 prompt 模板。此时 llama.cpp 会陷入 token 截断死循环而非报错退出。解决在SKILL.md的input下增加max_section_length: 3000单位Unicode 字符或改用step显式切片例如step: 取【当前章节】前 2000 字进行扫描终极方案是启用skill run --stream流式处理将大章节拆为多个小块并行处理需在logic中声明parallel: true。5. 进阶技巧用 SKILL.md 实现「多线程叙事冲突检测」——一个真实落地的 3 步法小说创作中最难把控的是多线程叙事的一致性主线 A 的伏笔是否在支线 B 中被无意回收配角 C 在第 5 章的立场转变是否与第 12 章的回忆杀矛盾ink.skill的logicDSL 本身不支持跨文件引用但通过resources绑定与skill run的链式调用我们能构建出可靠的检测流水线。以下是我为一部 30 万字都市异能小说实现的「双线冲突检测」方案全程无需修改Code.zip仅靠SKILL.md与标准命令完成。5.1 第一步定义「主线伏笔索引器」SKILL.md创建skills/main-foreshadow-index.md其logic专门提取主线章节中的伏笔声明--- version: 0.4 id: main.foreshadow.index type: worldbuilding input: format: markdown required_sections: - ## 主线伏笔池 output: structure: - ### 伏笔ID - ### 触发条件 - ### 预期回收章节 max_tokens: 512 logic: - step: 提取【主线伏笔池】中所有以『FO-』开头的 ID 行如『FO-007地铁隧道深处传来青铜铃声』 - step: 对每个 ID提取其后第一行『触发条件xxx』与第二行『预期回收ch15』 - step: 输出为表格三列伏笔ID触发条件预期回收章节 model: path: ./models/phi-3-mini-4k-instruct-q4_k_m.gguf n_ctx: 2048 resources: - path: data/foreshadow-schema.yaml # 定义伏笔ID格式校验规则 ...执行命令生成索引./Code/skill run --input ch01-10_main.md --output build/foreshadow-index.md --skill skills/main-foreshadow-index.md5.2 第二步定义「支线回收检测器」SKILL.md创建skills/subplot-recall-check.md它接收foreshadow-index.md作为resources并扫描支线文档--- version: 0.4 id: subplot.recall.check type: narrative input: format: markdown required_sections: - ## 支线剧情 output: structure: - ### 未授权回收项 - ### 时间线冲突 - ### 建议调整 logic: - step: 加载 resources/foreshadow-index.md解析为伏笔ID→触发条件映射表 - step: 扫描【支线剧情】中所有含『青铜铃声』『地铁隧道』等关键词的句子 - step: 比对若某句触发了 FO-007 的『触发条件』但当前章节号从文件名提取≠『预期回收章节』则标记为『未授权回收』 - step: 对每个未授权回收输出原文行号 伏笔ID 建议移至的章节号 model: path: ./models/phi-3-mini-4k-instruct-q4_k_m.gguf n_ctx: 2048 resources: - path: build/foreshadow-index.md # 关键动态绑定上一步输出 ...执行命令检测支线./Code/skill run --input ch08_subplot.md --output build/ch08_recalls.md --skill skills/subplot-recall-check.md5.3 第三步自动化流水线与结果聚合将上述两步封装为 shell 脚本check-narrative.sh并加入 Git hook 自动触发#!/bin/bash # check-narrative.sh —— 放入项目根目录 echo 正在构建主线伏笔索引... ./Code/skill run --input ch01-10_main.md --output build/foreshadow-index.md \ --skill skills/main-foreshadow-index.md /dev/null echo 正在扫描支线回收一致性... for subplot in chapters/subplot_*.md; do base$(basename $subplot .md) echo → 检测 $base ./Code/skill run --input $subplot --output build/${base}_recalls.md \ --skill skills/subplot-recall-check.md /dev/null done echo ✅ 检测完成。汇总报告 cat build/*_recalls.md | grep -E ^(### |^\* )我的血泪经验不要试图在一个SKILL.md中完成所有逻辑。ink.skill的力量在于「技能可组合」——每个.md文件只解决一个明确问题通过resources绑定与--output传递形成 Unix-style 的管道链。我曾因强行把伏笔提取、支线扫描、时间线校验塞进一个 skill导致logic步骤超过 12 行每次修改都要重跑 3 分钟。现在拆成三个 skill单次检测平均 8.3 秒且每个环节可独立验证、单独调试。真正的生产力提升从来不是「一个命令搞定所有」而是「每个命令都快得让你愿意多敲几次」。希望帮到你。本文还有配套的精品资源点击获取

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑