dsh-story-mode
面向 DeepSeek Harness 的故事模式预设:叙事 GM 人格、三条走向、.md 角色卡与世界书记忆、上下文提纯与前后置提示词。
安装
dsh plugin --profile web add dsh-story-mode
沙箱测试
这个插件还没测过。提交测试 →
README
故事模式(Story Mode)
给 DeepSeek Harness 增加一个名为 故事模式 的 Agent 预设:选中它新建的会话里,
AI 不再扮演编码助手,而是担任互动小说的叙事者与主持人(GM),由玩家用自然语言
(或回复选项)推动剧情。
在哪里使用
1. 在 Web 界面点击新建会话;
2. 在新会话页面的 Agent 预设 选择器里选择 故事模式;
3. 直接输入题材(例如「悬疑,发生在雨夜的旅馆」)或输入 开始,让 AI 给出开篇。
预设只影响选用它的会话,其他会话不受影响。
「三条走向」开关
故事模式会话的输入框上方、靠右有一个开关(平时只有开关本身,鼠标移入才浮出「走向开关」四个字;
整行与输入框卡片同宽并右对齐,开关右边缘与输入框右边缘齐平):
- 关(默认):按人格提示词,每轮结尾给 2–3 个选项;
- 开:每个请求都会附加一条写作要求,让 AI 在叙事正文之后、依据上一轮已发生的情节,
恰好给出 3 条互斥的走向(含每条的风险/代价)。
实现方式与自带的 plan 模式同构:
部分 · 说明
/choices on /choices off · Host 命令,只在故事模式会话的命令菜单里可见;开关点击时由客户端调用。
storyChoices 会话投影 · 从 command/run / command/done 折叠出开关状态,刷新、重开、fork 后都能恢复。
required 运行时上下文 · 开关打开时每个请求注入写作要求;required 让它能穿透 complete 人格与「关闭可选运行时上下文」。
conversation.input.dock 客户端槽 · 开关本身。只在 agentPreset === "story" 的会话里渲染,所以其他模式的会话看不到它。
也可以在输入框里直接打 /choices on 或 /choices off。
前后置提示词
包裹的是整个请求,而不是单条输入。每次组装模型请求时读取当前会话工作区下的两个文件:
文件 · 落点
settings/front.txt · 系统提示词最前面(人格段落开头的 {{story_front}} 变量)
settings/end.txt · 请求最末尾(order 最大的 required 运行时上下文,追加在最后一条消息之后)
模型实际看到的是 front + 完整的系统提示词与全部对话 + end:
- 每次组装请求都重新读文件,改完下一轮立即生效;
- 两个文件都不存在或为空时,对应位置为空;只存在一个时只加那一侧;
- 单个文件上限 64K 字符;
prompt-wrap不能单独移除:人格模板引用了story_front变量,移除后渲染会失败;- 聊天记录里显示的仍是原始对话,包裹只作用于模型请求。
工作区初始化
输入框上方最左侧是「文件夹 + 加号」按钮:按当前会话的工作目录一次性创建其它插件需要的目录与初始文件。
产物 · 用途
settings/front.txt、settings/end.txt · 前后置提示词(空文件,等你填内容)
记忆/角色/角色.md · 角色记忆起始模板(把「记忆管理」的角色目录指到这里)
记忆/箱庭/箱庭.md · 箱庭记忆起始模板
- 幂等:已存在的目录/文件一律跳过,不覆盖你写过的内容;
- 点击后行右侧会显示结果(含两个记忆目录的完整路径),8 秒后自动消失;
- 也可以直接输入
/init-workspace。
记忆管理
走向开关左侧有一个齿轮(设置控件)。点击它,会在输入框上方展开「记忆管理」底部面板:
项 · 说明
角色记忆存储位置 · 一个目录;目录内全部 .md(含子目录)当作酒馆角色卡:人物设定、关系、口吻等。
箱庭记忆存储位置 · 一个目录;目录内全部 .md 当作沙盒化酒馆世界书:世界规则、地点、势力、历史等。
确认并刷新 · 校验两个目录、统计 .md 数量,把配置写进当前会话。
- 配置存在会话日志里(
storyMemory投影),刷新、重开、fork 都能恢复; - 面板打开时,未配置的一侧会自动预填默认目录:
<工作区>/记忆/角色、<工作区>/记忆/箱庭
(与「初始化工作区」创建的目录一致,由 /memory-defaults 命令返回);
- 保存后,每一轮请求都会重新读取两个目录下的全部
.md,作为 required 运行时上下文注入,
模型回复前必须先消化这些记忆;
- 上限:单次最多 200 个文件、12 万字符,超出部分会在注入文本里注明;
- 子目录会被递归读取,所以「一个根目录下分
角色/与箱庭/」也可以(两个配置都指向该根目录); - 相对路径按会话工作目录解析,建议直接填绝对路径。
上下文提纯
当一轮结束(agent 空闲)且上下文占用 ≥ 80% 时,会自动弹出「上下文提纯」窗口;
齿轮左侧的 Test 按钮则可以随时手动触发,不需要超过 80%。
窗口里是模型整理后的两节 Markdown:## 角色状态、## 箱庭状态。文本可自由改写,
点右下角 确认 后会按小节拆开,写入 <角色目录>/状态提纯.md 与
<箱庭目录>/状态提纯.md(覆盖上一次提纯结果,手写的其他 .md 不受影响)。
上下文不会自动清理:压缩/重置会话由你自己处理(新建会话,或用 /compact 之类的方式)。
提纯只负责把「该记住的东西」落进记忆文件,避免你手动重置后丢失设定。
模型调用使用当前会话的模型路由;提纯结果会原样返回给客户端(也记录在 /purify 的命令事件里)。
记忆目录未配置时会提示先到「记忆管理」里设置。
组成
行 · 插件 · 作用
story-guard · dsh-story-mode/story-guard · 在预设作用域内屏蔽部署级全局工具(shell、搜索、文件等),保证故事会话里只有对话,没有工具调用。
persona · @deepseek-ai/dsh-persona · 以 complete: true 只保留叙事者人格提示词,屏蔽通用编码助手的人格与运行时上下文。
choices · dsh-story-mode/choices · /choices 命令、storyChoices 投影、「三条走向」运行时上下文。
prompt-wrap · dsh-story-mode/prompt-wrap · story_front 变量(系统提示词开头)与末尾运行时上下文:用 settings/front.txt、settings/end.txt 包裹整个请求。
memory · dsh-story-mode/memory · /memory 命令、storyMemory 投影、每轮读取全部 .md 记忆并注入的运行时上下文。
purify · dsh-story-mode/purify · /purify、/purify-apply 命令:整理角色/箱庭状态并写入记忆文件(上下文由用户自行重置)。
scaffold · dsh-story-mode/scaffold · /init-workspace 命令:按当前工作区创建 settings/ 与记忆目录、初始 .md 文件。
compaction · @deepseek-ai/dsh-compaction-basic / command-compact · 长故事自动压缩上下文,并提供 /compact 手动压缩命令。
修改
- 调整叙事风格:编辑
cordis.patch.yml中persona.config.prefix的提示词。 - 增加/去掉工具:在
plugins列表里增删行;story-guard必须保持第一个,
否则它会把预设自己注册的工具也当成全局工具处理。
- 修改后需要重新安装让 Loader 重新读取补丁:
plugin_manager remove_bundle dsh-story-mode plugin_manager install_bundle <本仓库绝对路径>\story-mode
已有会话保留创建时的插件版本,请新建会话验证改动。
卸载
plugin_manager remove_bundle dsh-story-mode
以上内容来自 npm 上的 README,我们只做格式化,不改内容。
版本
npm 上共发布:2,最后更新 2026-10-25