LLM-for-novel-with-history-and-superheroines
No description
- Stars
- 0
- Language
- JavaScript
- Created
- Sep 19, 2026
- Updated
- Sep 19, 2026
Introduction
dsh-preset-novel · 小说创作模式
一个给 DeepSeek Harness 用的 agent preset: 面向长篇文学创作与续写——不是"帮你写小说"的提示词包,而是一套按任务切换的写作纪律, 加一个确定性的项目扫描器,加一条"小说里人物造的东西必须真做出来"的硬规矩。
英文说明见 README.en.md;开发与设计说明见 docs/DEVELOPING.md。
生成示例见https://huggingface.co/datasets/MARK18964758/LLM_for_novel_with_history_and_superheroines
它解决什么
用大模型续写长篇,出问题的地方从来不是"写不出来",而是这几类:
- 它不知道自己该写什么。 一会儿写正文,一会儿写赏析,一会儿写人物档案,三种文字混成一片。
- 它把痕迹留在成品里。 正文里出现"我把 X 放在这里是为了……",或者人物"先做了个错的、后来才做成对的"——那是修改记录,不是小说。
- 它把该做的东西描述一遍就算做完了。 人物在小说里写了个程序、做了个模式、画了张三维图,它写一段字形容那个程序,而不是把程序写出来。
- 它不查就写。 真实的城市、店名、路线、价格、职务,凭印象编。
- 它一次总结一步。 把整本书切给多个子代理精读,回来一份总结一份——最后漏掉的正是最晚到的那一份。
这个 preset 把上面每一条都变成一条可执行的规矩,并且按任务分给四份技能,而不是塞一大段提示词。
装
这个 preset 不是 Cordis 插件,没有"加一行"这回事。DSH 的 agent-presets 服务从
$DSH_HOME/.agent-presets/ 下按目录发现 preset,所以"安装"= 把这个 preset 的目录放到那儿。
一键(Windows PowerShell)
git clone https://github.com/CHANGE-ME/dsh-preset-novel.git
cd dsh-preset-novel
./install.ps1
装到 %USERPROFILE%\.dsh\.agent-presets\novel\。选项:
| 参数 | 作用 |
|---|---|
-DshHome D:\dsh | 装到别的 DSH home |
-Link | 用 junction 代替复制(就地编辑生效) |
-Force | 覆盖已有安装 |
脚本只把 preset 该有的文件拷进去(preset.yml、agent.cordis.yml、project-scan.js、PRESET.md、skills/),
README、LICENSE、package.json 这些发布用的东西不会进 preset 目录。
手动
把下面这些放进 <你的 DSH_HOME>/.agent-presets/novel/:
<DSH_HOME>/.agent-presets/novel/
├── preset.yml 显示名与描述
├── agent.cordis.yml 组合:19 行插件
├── project-scan.js novel_project 工具
├── PRESET.md 就地维护说明
└── skills/ 四份技能
├── novel-prose/
├── source-research/
├── appreciation-craft/
└── play-within-play/
装完要重启 dsh。 preset 目录在进程启动时被扫描。然后在新建会话里选「小说创作模式」。
用
进去之后它只做一件事:问你要项目文件夹。路径给它,它用 novel_project 扫一遍,把子文件夹
模糊匹配到四类角色请你确认——它不自己挑目录。
| 四类角色 | 是什么 |
|---|---|
| 底本 | 已完成、待续的正文 |
| 待写正文 | 新写的章节 |
| 资料 | 查来的真实材料 |
| 赏析与总结 | 人物档案、情节梗概、结构清单、索引 |
若发现「戏中戏」子文件夹(小说世界里某个人物自己写的东西),它不塞进这四类,单独列出来请你定夺。
四份技能,按任务切换
这是这个 preset 的主要设计。它不是一个流程,是四份技能;每次接到任务先判类别,再加载对应的那一份。 四份各管一头,读错等于没读。
| 任务 | 技能 | 管什么 |
|---|---|---|
| 写小说正文(一章) | novel-prose | 一章的形态与篇幅、章内不许有的东西、节奏、现实细节核证、对话的长度与自然度、外语原文加译 |
| 查资料/落资料/整理既有章节 | source-research | 联网核实的纪律、来源标注、资料档与分析档分家、大文本量分工且等齐再汇总、索引体例 |
| 写赏析、随笔、评论、序跋 | appreciation-craft | 读者是"被打动的读者"不是审稿人、不许有写作说明与 AI 口癖、素材来源分家、成稿清理清单 |
| 写人物自己写的作品 | play-within-play | 力所能及范围内必须真做出来、三层结构不许互借、正文与实物体量必须对得上 |
切换的判据是"这次交付的东西是什么",不是"这次提到了什么"。 为小说做背景调查,交付是资料 → 查资料那份; 人物在小说里写了一篇稿子,交付是那篇稿子 → 戏中戏那份,正文部分仍按正文那份。
几条从实际返工里长出来的具体规矩,举几个例:
- 正文一次成型,不是修改记录。 作者让你改,你就把改完的结果直接写出来;不许让人物"先做了个错的、后来才做成对的"。判据是:假设读者只读过这一版,这句还成立吗?
- 不许替人物编号。 「两条。第一条……第二条……」是最刺眼的一种 AI 味。人说话不长编号:他会把最要紧的先说,说着说着发现不够,再补一条,中间还允许对方插一句质疑。编号只允许出现在人物真在念清单的时候。
- 不许把专业对象简化成玩具。 写一位学者做的、或研究的东西,先查它真正的形状。把一个数学结构做成好画的形状,等于把它删掉了。
- 素材是既成事实。 小说里人物写的那份稿子,可以读、可以引用,一个字都不许改。引文对不上,只能改正文。
novel_project 工具
扫描与分类不靠临场判断——那是一段固定步骤,写成了纸面上的代码(project-scan.js,499 行)。
node project-scan.js "D:\某个项目路径"
不用开会话就能跑,输出和工具返回的一样:目录本体证据(文件数、总大小、扩展名构成、最新改动)、 下一层每个子文件夹的评分与依据、把握程度(确定/较可能/拿不准/无证据),以及单独一栏的戏中戏。
评分刻意做得简单可审计:每一条线索一个固定权重,判决旁边永远印着原始证据——这样人和模型都可以公开地不同意它。
这个包里有什么
| 文件 | 大小 | 作用 |
|---|---|---|
agent.cordis.yml | ~40 KB | 组合。第 1 行是 persona(本模式的全部人格与纪律),最后一行挂 project-scan.js |
project-scan.js | ~22 KB | novel_project 工具 |
preset.yml | ~1 KB | 显示名与描述 |
skills/novel-prose/ | 6,240 净字 | 小说正文章法 |
skills/play-within-play/ | 3,513 净字 | 戏中戏 |
skills/appreciation-craft/ | 2,821 净字 | 赏析随笔 |
skills/source-research/ | 2,717 净字 | 查资料与档案 |
不含 DSH 自带的两份技能(cordis-plugin-development、editing-cordis-compositions)——它们随部署的
cordis 预设走。要写插件或改组合,用那个预设另开会话。
两个坑(都是真踩过的,写在这里省你时间)
1. 工具的 parameters 不是 JSON Schema,是"属性表"
这是本 preset 出过一次整轮失败的原因:
Invalid schema for function 'novel_project':
schema must be a JSON Schema of 'type: "object"', got 'type: null'.
工具注册表把 definition.parameters 原样交给模型提供方,它不编译。DSH 里 parameters 的正式形态是
逐属性的 spec,required 写在每个属性里面:
parameters: {
path: { type: 'string', required: true, description: '…' },
}
官方由 defineTool()(来自 @deepseek-ai/dsh-tools)编译成 { type:'object', properties:{…}, required:[…] }。
本包没有直接 import 它——preset 目录下裸导入解析不到——而是内联了一个只覆盖本工具所需类型的
compileParameters(),遇到别的类型直接抛错而不是瞎猜。
要改工具入参:改那份属性表并补上对应类型,不要图省事直接写完整 JSON Schema。
2. 技能是会话启动时读的
改完技能不会在当前会话生效,要新开一个会话。技能发现按 SKILL.md 的 description 触发,
所以改技能时不要动 description 里的触发词。
适配哪些 DSH 版本
针对 @deepseek-ai/dsh 0.1.5-rc.2 实测。组合里用到了 !!js 表达式与 include 行,
preset 机制本身要求该部署启用了 @deepseek-ai/dsh-agent-presets(Web 与 TUI profile 默认启用)。
技能与工具都只依赖部署自带的包,没有额外 npm 依赖。
License
MIT。见 LICENSE。