前言¶
在 DeepSeek Harness(DSH)裏做長篇中文網文,常見做法是每次讓模型「接着寫」——設定、人物狀態、伏筆散落在對話裏,章與章之間容易矛盾,也缺少可版本管理的落盤結構。社區維護者 EastChilde 的 dsh-novel-forge(墨匣)把思路換成「寫作狀態管理」:設定、大綱、正文、人物狀態、伏筆賬本都落成工作區內可讀可改的純文本;模型在寫某一章之前,只通過工具裝配該章需要的上下文,而不是依賴對話記憶。
下面介紹插件定位、能力與安裝方式,以及一套可復現的章節寫作順序。
這是什麼¶
dsh-novel-forge 是 DSH 分類爲「工作流」的插件:從一句想法到能連載的長篇網文,目標是把創意、設定、細綱、正文和追蹤信息全部落在固定目錄結構中。README 寫明當前爲 M1 完成——9 個 host 工具與左側「小說」面板(書架、章節、關係圖、編輯、導出)可用,40 項單測通過;向量檢索、docx/epub 導出等在後續里程碑。
它不是「一鍵生成全書」的按鈕,而是一套與 DSH 工具、會話、工作區綁定的流程。插件以當前 dsh 進程權限運行;安裝前建議在 GitHub 覈對源碼與 MIT 許可證(版本 0.1.0,package.json 中 engines.node 爲 >=22)。
設計思路:爲什麼不用「直接讓模型寫」¶
README 用表格歸納了幾類問題與插件對策,核心可概括爲:
| 問題 | 插件做法 |
|---|---|
| 模型沒有跨章記憶 | 寫章前通過 novel_context 從設定庫、狀態、伏筆賬本裝配上下文 |
| 前後設定矛盾 | state.json 爲唯一權威;novel_write_commit 提交時校驗並更新 |
| 伏筆難回收 | 伏筆編號、埋設章、計劃回收章;逾期提醒 |
| 文風趨同 | 文風錨點、高危詞表、句首重複檢測與定向重寫相關能力 |
| 批量失控 | 單輪批量上限、細綱前置、必須修 / 提醒兩級檢查 |
正文可改,但須經提交;舊版自動存檔。全部是純文本,可直接用 git 管理書籍目錄。
核心功能¶
Host 工具(9 個)¶
| 工具 | 作用 | 典型時機 |
|---|---|---|
novel_guide |
方法論:網文規則、結構模板、鉤子庫、去 AI 味 | 規劃、自檢 |
novel_init |
建書、落目錄骨架 | 開新書 |
novel_status |
進度、最近章節、未回收伏筆、下一章細綱是否就緒 | 續寫前 / 裸調用 /novel |
novel_outline_put |
寫入或替換某章細綱(校驗不過不寫盤) | 寫正文前 |
novel_context |
裝配某章寫作上下文 | 寫正文前 |
novel_write_commit |
提交正文:落盤、更新狀態、重建派生、跑檢查 | 寫完一章 |
novel_check |
對已提交章節做機械檢查 | 改稿後複查 |
novel_export |
合併已提交章節爲導出合集 | 備份、投稿 |
novel_resume |
冷啓動恢復卡:上章結尾、人物狀態、下一章要害 | 新會話、隔天續寫 |
多本書時,novel_status、novel_write_commit 等支持 book 參數;僅一本時可省略,多本未指定會報錯。
左側「小說」面板¶
刷新後,左側導航會多 小說 入口,與「自動化任務」同類實現:main 面板(key: novel)+ sidebar.panellist(id: novel)。主區爲書架與單書詳情兩欄:章列表、細綱、人物、設定、伏筆、未答問題;可在面板內閱讀/編輯並原子寫回原文件;支持導出 MD/TXT、伏筆跳轉、人物/地點/勢力關係圖等。右上角 寫下一章 會打開或複用當前工作區會話並預置「繼續寫下一章」;對話裏直接說「寫第 3 章」等價。
HTTP 接口(面向面板與工作區)¶
宿主需具備 tools、workingDirectory、webServer、sessions;缺任一項插件會停在 pending。工作區解析順序:顯式 cwd → 會話 id 對應 cwd → 最近有 cwd 的會話 → 本進程最近一次小說工具用的工作區。
| 方法 | 路徑 | 用途 |
|---|---|---|
| GET | /novel/api/snapshot |
全部書及章節/細綱/人物/伏筆快照 |
| POST | /novel/api/book |
新建書骨架 {cwd?, title, genre?, premise?} |
| POST | /novel/api/export |
導出 {cwd?, slug, format?: 'md' \| 'txt'} |
| POST | /novel/api/rename |
改書名 {cwd?, slug, title} |
| POST | /novel/api/delete |
移到回收站 {cwd?, slug} |
| GET | /novel/api/file?path= |
讀書目錄內文件(越界 403、缺失 404、>2MB 413) |
| PUT | /novel/api/file |
寫回文件;保存正文時重算章字數並同步 state |
質量檢查¶
novel_write_commit 每次運行機械規則:必須修(字數超目標 ±15%、正文爲空、細綱缺標題);提醒(AI 味詞密度、對話佔比、句首三連重複、單段過長、章末鉤子、伏筆逾期等)。無法由規則判定的一致性問題,依賴 state.json 與人工確認。
目錄約定¶
默認一本書一個目錄,在工作區 books/ 下(可通過配置改 booksRoot):
books/北境無神/
├── project.json
├── 00-創意.md
├── 01-設定/
├── 02-大綱/
├── 03-正文/
├── 04-追蹤/ # state.json(權威)+ 派生追蹤
├── 05-導出/
└── .novel/ # 索引緩存與歸檔(可刪)
規則:state.json 唯一權威,派生物可重建;正文修改走提交,舊版進 .novel/archive/。
安裝與啓用¶
插件無構建步驟(src/ 即運行時)。官方 README 安裝方式如下:
# GitHub
dsh plugin --profile <profile> add github:EastChilde/dsh-novel-forge
# Gitee
dsh plugin --profile <profile> add git+https://gitee.com/EastChilde/dsh-novel-forge.git
# 本地目錄(開發時)
dsh plugin --profile desktop add /path/to/dsh-novel-forge
裝完後重啓 profile,或在插件管理器中對該插件禁用再啓用一次。README 註明發佈到 npm 後亦可 add dsh-novel-forge(需包先在 npm 可用)。
開發時改 src/*.js 後需在插件管理器對 include:novel-forge 禁用再啓用,或重啓應用;改 src/references/*.md 無需重載。
典型用法¶
推薦工具調用順序(摘自 README):
novel_init → novel_guide(開書) → 提案確認
→ 寫設定 / 細綱 → novel_outline_put
→ novel_context → 寫正文 → novel_write_commit
→ (有必須修就改)→ novel_write_commit 同章覆蓋
在 cordis.patch.yml 的 config 中可覆蓋例如 booksRoot(默認 books)、defaultTargetWords(默認 2500)、wordTolerance(默認 0.15)、aiFlavorWords、aiDensityLimit、dialogueMin / dialogueMax 等項;未在配置中寫的項保持 README 默認值。
適用場景與注意¶
適合在 DSH 中長期連載、希望設定與大綱與正文同源落在工作區、並願意按「細綱 → 上下文 → 正文 → 提交」節奏寫作的開發者或作者。不適合指望單次對話無結構吐完全書、或不需要文件化狀態管理的場景。
插件依賴宿主能力完整就緒;安裝源以 GitHub/Gitee 或本地路徑爲準,使用前請自行審閱倉庫代碼與許可證。路線圖中 M2/M3 含斜槓命令、卷綱批量、docx/epub、質量報告等,以倉庫後續提交爲準,本文不展開未落地能力。
結尾¶
dsh-novel-forge 把長篇網文寫作拆成可編輯的文件樹與可重複的 host 工具鏈,讓每章寫作建立在裝配好的上下文與統一的 state.json 上,而不是一次性生成。要進一步看分類說明與倉庫詳情,可訪問 SkillHub 插件頁 與 GitHub README。