deepseek-harness
deepseek-ai
DeepSeek Harness: Everything is a Plugin.
Amakurai/dsh-liketavern
A DeepSeek Harness (dsh) plugin — turns dsh web into a SillyTavern-style roleplay frontend: character cards, prompt presets, lorebooks, personas, BM25 long-term memory, world-state deltas, and rollback-able floor operations, all on the dsh agent runtime.
PROJECT TOPICS
INSTALL REFERENCE
dsh plugin --profile web add github:Amakurai/dsh-liketavern
该命令指向仓库当前默认分支;尚无绑定当前 commit 的完整验证结果。
PROJECT README
在 DeepSeek Harness 桌面端或 dsh web 中使用角色卡、世界书与长期记忆,开启 Tavern 式角色扮演。
中文 | English
dsh-liketavern 是为 DeepSeek Harness(简称 dsh)打造的角色扮演插件。你可以直接导入 SillyTavern(简称 ST)规范的角色卡和提示词预设,在 dsh 原生环境中管理设定、推进剧情、分支出行和无损回滚。
💡 第一次使用? 建议先阅读环境要求与安装并跟随快速上手 5 步走体验第一场对话;若需迁移现有 ST 资产,请先核对核心概念与兼容范围。
| 模块 | 特性与能力支持 |
|---|---|
| 🎭 角色卡与人设 | • 导入/导出 V1、V2、V3 规范的 PNG 与 JSON 角色卡 • 支持多开场白切换、内嵌世界书、卡内正则与 HTML 交互卡面 • 可恢复的收纳箱与防误删引用保护;人设提供全局/会话级 {{user}} 身份定义 |
| 📖 世界书与世界状态 | • 全局、角色专属、当前会话私有三级世界书体系 • 关键词触发(次要关键词/反向排除/逻辑与或)、常驻条目与递归扫描 • 剧情变化层(Delta Layer)自动记录设定在剧情中的新增、变更与失效 |
| 🧠 智能长期记忆 | • 基于 BM25 检索与时间衰减权重,模型在对话中按需自主读写 • 容量超限时在后台空闲期自动摘要压缩,并完整保留可溯源的原始归档 |
| 🌿 剧情分支与无损回滚 | • 重新生成、修改 AI 发言或回退时自动创建独立子会话 • 自动撤销未继承楼层的记忆、变量等剧情状态,原始会话与历史分支完好无损 |
| ⚡ EJS 模板引擎 | • 内置沙箱执行条件、循环、异步宏与装饰器 • 支持剧情/消息级变量、JSON/YAML 初值、JSON Patch、Zod、Lodash、Faker |
| 📦 交互卡与脚本沙箱 | • 严格隔离的 iframe 卡面沙箱,支持三类脚本库(全局/预设/角色) • 剧情变量自动持久化,支持同页剧情事件、世界书读写与消息局部刷新 |
| 🔄 原生 MVU 支持 | • 可选自动初始化与回复收口后的变量更新执行器 • 更新任务失败保留重试队列;兼容角色展示正则声明的状态栏占位符 |
| 🛠️ 模型工具与辅助生成 | • 7 个专用 PTC 工具(记忆检索/写入/更新、世界书按条读取、世界状态更新、资产列表/读取) • 支持 AI 代答(生成用户发言并一键复制)与沿上下文继续生成 |
🧩 智能工具调用:角色扮演默认直接流畅回复;仅在缺失关键设定或需要固化重要剧情事实时,模型才会精准调用工具,兼顾沉浸感与长期一致性。
在开始使用前,了解以下核心概念有助于更好地理解插件的运作机制:
flowchart LR
subgraph Shared["共享资产 (复用)"]
Card["角色卡 (Character)"]
Preset["提示词预设 (Preset)"]
Persona["用户人设 (Persona)"]
end
subgraph Runtime["运行时 (隔离)"]
Session["宿主会话 (Session)"] --> Story["独立剧情状态 (Story)"]
Story --> Mem["长期记忆 / 变化层"]
Story --> Vars["卡片变量 / 局部世界书"]
Story --> WAL["事务回滚日志 (WAL)"]
end
Shared -.->|"绑定到"| Runtime
| 概念 | 说明与边界 |
|---|---|
| Tavern 模式 | dsh 的专用会话预设,用于激活本插件的角色扮演 Agent 运行时。新建会话时选择即可开启。 |
| 提示词预设 | 在「Tavern → 预设」中管理的 ST 提示词模板与结构配置。可绑定到会话,也可直接使用内置默认预设。 |
| 角色卡 vs 人设 | 角色卡定义 AI 扮演的角色身份与背景;人设定义你在故事中的身份,并为提示词提供 {{user}} 的姓名与设定。 |
| 世界书 / 记忆 / 世界状态 | 世界书提供静态世界观;记忆记录发生的剧情事实;世界状态动态维护世界设定在故事中的新增与失效。 |
| 会话 vs 剧情分支 | 会话记录线性的聊天消息;剧情保存插件内部的记忆、变量与状态。重新生成等操作会派生出子会话与独立子剧情。 |
| 原生 MVU | Model-View-Update 变量更新框架。插件内置了安全的轻量执行器,支持依赖数据流驱动的复杂角色卡。 |
| 依赖项 | 最低要求 | 说明 |
|---|---|---|
| Node.js | ≥ 24.0.0 |
开发与 CI 环境均基于 Node 24 |
| dsh CLI / 宿主 | 0.2.0-rc.2 |
插件的宿主 Peer 依赖锁定此版本 |
| pnpm | 任意主流版本 | 用于 dsh plugin 自动拉取与管理依赖 |
| 模型配置 | 已在 dsh 中完成配置 | 确保在宿主中可以正常发起对话 |
📌 首次接触 dsh?建议先查阅 DeepSeek Harness 官方文档,运行一次
dsh web完成基础配置。
打开 「插件 → 添加插件」,在输入框填写以下 GitHub 地址并安装:
https://github.com/Amakurai/dsh-liketavern.git#v0.5.1
升级时先在「插件」页面卸载旧 Tavern,再用新版本标签重新添加,最后完全退出并重启桌面端。「设置 → Tavern → 关于」中的「检查更新」只查询正式发布与宿主兼容性;安装由桌面端插件管理页面完成。仓库已包含预编译的 lib/,无需本地构建。
在终端中执行以下命令,固定安装到最新稳定标签:
# 1. 添加插件到 web profile
dsh plugin --profile web add github:Amakurai/dsh-liketavern#v0.5.1
# 2. 检查安装状态
dsh plugin --profile web list --depth 0
# 3. 启动 dsh web(若已在运行,请先停止再启动)
dsh web
本仓库已包含预编译的 lib/ 产物,无需本地配置 TypeScript 构建环境。
dsh-liketavern-0.5.1.tgz(发布页附带 SHA256SUMS.txt 校验和)。dsh plugin --profile web add ./dsh-liketavern-0.5.1.tgz
dsh web
dsh plugin add 命令并重启 dsh web。只需要 5 步,即可体验完整的 Tavern 角色扮演:
1. 导入角色卡 ➔ 2. 新建会话 ➔ 3. 配置设定 ➔ 4. 开始对话 ➔ 5. 探索分支
(PNG / JSON 导入) (选择 Tavern 模式) (绑定预设/世界书) (切换开场白) (重试/回退/代答)
‹ › 挑选心仪的开局,点击「开始对话」并发送第一句台词。‹ n/m › 在多条分支间无缝切换。🔍 调试提示词:第一轮对话完成后,可点击会话顶部角色入口的 「提示词预览 → 最近请求」,查看实际发送给模型的完整请求结构与上下文。
| 操作目标 | 推荐入口 | 生效范围与机制 |
|---|---|---|
| 全局资产管理(角色/预设/世界书/人设) | 设置 → Tavern → 各管理页 |
全局共享资产:修改后在所有引用该资产的新老会话后续轮次生效 |
| 新会话默认模板 | 设置 → Tavern → 设置 → 默认配置 |
全局默认值:仅在新会话初次点选角色时套用,已有会话不受影响 |
| 当前会话专属设定(预设/人设/作者注释) | 会话顶部角色卡入口 |
当前会话:修改仅对本条剧情后续轮次生效 |
| 当前剧情独占世界书 | 会话顶部角色卡入口 → 编辑本会话世界书 |
当前剧情私有:随分支独立复制与回滚,不污染全局世界书 |
| 查看与修订剧情记忆 | 会话顶部入口 → 记忆 或 Tavern → 记忆 |
所选剧情:选择具体剧情修改即时生效;选择「初始状态」仅影响未来新剧情 |
| 正则表达式与脚本配置 | Tavern → 正则 / Tavern → 设置 → 脚本 |
按所选作用域(全局 / 预设 / 角色)生效 |
| 提示词与世界书命中检查 | 会话顶部角色卡入口 → 提示词预览 |
只读查看:检查当前轮次的实际组装结果与命中条目 |
🌐 多语言界面:插件界面语言默认跟随 dsh 宿主;你也可以在「Tavern → 设置 → 界面 → 界面语言」中手动固定为中文或 English。
不同于传统单线对话,dsh-liketavern 具备细粒度的状态快照与回滚隔离能力:
[主线剧情] ─── 第 1 轮 ─── 第 2 轮(获得钥匙) ─── 第 3 轮(开启大门)
│
└── [重新生成第 2 轮] ─── 分支 2(钥匙断裂,记忆自动回滚)
generateRaw、跨页面事件广播)正在逐步适配中。详情请查阅 酒馆助手兼容说明。markdown-it 替代存在安全风险的历史解析器。HTML 交互卡面运行在严格的 sandbox iframe 中,阻止主页面 DOM 与敏感接口逃逸。| 项目 | 实际处理机制 |
|---|---|
| 采样参数 | 支持 temperature、maxTokens、stop 及模型公布的思考档位(reasoningEffort)。top_p 与各类惩罚项做记录与友好提示。 |
| 预设位置投影 | DeepSeek API-key 官方通道按冻结布局投影预设;Messages 不支持的中途 system 位置合并到首条并显示兼容说明,相邻同角色消息可能合并。DeepSeek 账号通道与其他通道沿用 standing/turn 两段映射。 |
| 动态宏与格式 | 完整支持 wi_format、scenario_format、personality_format 以及 {{lastmessage}}、{{charPrompt}} 等常用宏。 |
| PTC 工具调用 | 基于 dsh 原生程序化工具调用(PTC),支持单次多工具组合执行与并发查询。写入操作受当前剧情的楼层事务锁保护。 |
所有插件数据均存放在 $DSH_HOME/dsh-tavern/(默认路径为 ~/.dsh/dsh-tavern/,Windows 下为 %USERPROFILE%\.dsh\dsh-tavern\):
$DSH_HOME/dsh-tavern/
├── characters/ # 角色卡元数据与私有资产
├── presets/ # 提示词预设
├── lorebooks/ # 全局与角色世界书
├── personas/ # 用户人设
├── stories/ # 独立剧情数据(记忆、变量、WAL 日志)
└── editor-drafts/ # 未保存编辑草稿暂存
🛡️ 核心原则:角色资产共享,剧情状态隔离。 每个故事和分支都拥有专属的状态存储与写前日志(WAL),多分支间绝不相互污染。
| 备份类型 | 涵盖范围 | 适用场景与限制 |
|---|---|---|
| 📱 交互卡变量导出 | 当前剧情的持久化变量(上限 1 MiB) | 在「设置 → 卡片与数据」导出/导入,用于单卡状态存档与迁移 |
| 📝 编辑器草稿暂存 | 角色、预设、世界书等未保存的编辑内容 | 浏览器异常关闭后重开编辑器自动提示恢复(单份上限 2 MiB) |
| 💾 可校验全量目录备份 | 完整的插件数据、宿主会话与配置清单(带 SHA-256) | 推荐。使用 CLI 工具创建,支持离线完整迁移与数据校验 |
在插件目录或安装环境中,提供了可靠的备份与恢复 CLI 工具:
# 1. 创建完整备份(--offline 声明停止写入)
node lib/backup.js create --home "C:/data/dsh-home" --backup "D:/backups/dsh-2026-09-19" --offline
# 2. 校验备份文件完整性与结构合法性
node lib/backup.js verify --backup "D:/backups/dsh-2026-09-19"
# 3. 恢复到指定的新目录
node lib/backup.js restore --backup "D:/backups/dsh-2026-09-19" --target "C:/data/dsh-restored" --offline
若全局安装了工具,可直接使用 dsh-tavern-backup 命令代替 node lib/backup.js。
dsh --version 确认宿主版本是否为 0.2.0-rc.2。dsh plugin --profile web list --depth 0 确认插件已正确安装到 web profile。dsh web,并检查启动终端中是否有插件加载异常报错。「默认配置」仅在新会话初次选择角色时自动套用。正在进行的会话请直接点击会话顶部角色入口进行修改并保存。
请在提示词预览中查看 「最近请求」 标签页,这是上一轮实际捕获的入模数据;其他标签页为静态 ST 模拟运算,仅供参考。
当遇到难以排查的异常时,可在终端运行只读诊断工具,快速获取环境状态与问题码(绝不输出任何隐私数据、路径或正文):
# 线上安装环境运行
dsh plugin --profile web exec dsh-tavern-doctor
# 输出结构化 JSON
dsh plugin --profile web exec dsh-tavern-doctor --json
更多进阶指南与底层架构设计文档(推荐卡片作者与开发者查阅):
| 文档分类 | 内容说明 | 链接 |
|---|---|---|
| 版本记录 | 版本更新历程与宿主要求 | CHANGELOG.md |
| 接口兼容 | 卡面、脚本、变量、世界书与 MVU API 详述 | 酒馆助手兼容说明 |
| 模板进阶 | EJS 模板语法、宏变量与世界书装饰器 | 提示词模板说明 |
| 适配进度 | 接口覆盖率清单与验收标准 | 酒馆助手适配进度 · ST 模板审计 |
| 系统架构 | 剧情隔离、事务 WAL、提示词投影与记忆管线 | 架构设计说明 |
| 宿主兼容 | dsh 版本行为矩阵与 UI 冒烟测试清单 | 宿主兼容记录 |
| 安全审计 | 依赖漏洞管理、沙箱边界与隔离机制 | 依赖安全记录 |
| 发布与规范 | 代码规范、测试契约与发布审核流程 | 开发约定 · 发布包审核指南 |
项目采用 TypeScript ESM(NodeNext)、React 18 与 Vitest:
# 1. 安装依赖
npm ci
# 2. 编译产物
npm run build
# 3. 运行完整测试套件 (150+ 测试套件)
npm test
# 4. 发布包完整性预检
npm run package:check
| 脚本命令 | 说明 |
|---|---|
npm run dev |
使用本地 cordis.patch.yml 启动 dsh web 开发实例 |
npm run doctor |
对当前 DSH_HOME 执行只读诊断 |
npm run doctor:check |
验证诊断 CLI 的安装链接与 JSON 输出格式 |
npm run package:check |
严格检查发布白名单与文档相对链接安全性 |
先运行一次 dsh web 初始化 profile 目录,然后将源码仓库目录链接至 $DSH_HOME/profiles/node_modules/dsh-liketavern:
# Windows (PowerShell,在仓库根目录执行)
New-Item -ItemType Directory -Force -Path "$env:USERPROFILE\.dsh\profiles\node_modules" | Out-Null
New-Item -ItemType Junction -Path "$env:USERPROFILE\.dsh\profiles\node_modules\dsh-liketavern" -Target (Get-Location).Path
# macOS / Linux (在仓库根目录执行)
mkdir -p ~/.dsh/profiles/node_modules
ln -s "$(pwd)" ~/.dsh/profiles/node_modules/dsh-liketavern
挂载完成后运行 npm run dev 即可自动附加本地源码。每次修改 src/ 后执行 npm run build 并重启开发实例即可查看效果。
src/
├── core/ # 纯函数层:提示词组装、世界书逻辑、正则引擎、BM25 检索与兼容解析
├── state/ # 文件存储层:角色资产、剧情隔离工作区、记忆持久化与 WAL 事务日志
├── node/ # 宿主编排层:生命周期配置、服务注册、请求投影管线与后台维护
├── client/ # 界面层:React 管理页面、会话操作栏、沙箱卡面与脚本宿主
├── index.ts # 插件主入口 (Host Plugin Entry)
├── agent.ts # Agent 运行时与工具装配入口
└── remote.ts # 前后端强类型 RPC 契约
若遇到问题,欢迎前往 GitHub Issues 提交反馈。为便于快速定位,请在描述中附带:
npm test 与 npm run package:check 全项通过,并保持中英文文档同步。本项目采用 MIT License 开源。
CLASSIFICATION EVIDENCE
系统优先读取 GitHub Topics,再与站内分类词典和词根规则比对。当前命中: 无有效分类标签。