← Back to home@bigscientist

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 KBnovel_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。