前言¶
DeepSeek Harness (DSH) 采用插件化架构。默认的渲染器通常仅满足基础展示需求。如果你需要更丰富的消息格式化、变量处理或结构化文档渲染,可以在 DSH 中添加插件。dsh-tavern-renderer 是一个面向 DeepSeek Harness 的自包含“酒馆式”消息渲染插件。它不修改持久会话事件,只改变 DOM 展示,也不改变送给模型的 prompt。
核心能力¶
该插件提供了一套完整的渲染管线,支持以下功能:
- 有序正则替换:支持
$1、$<name>、$&、$$和{{match}}插值,规则按数组顺序串行执行。 - 宏和变量系统:内置角色 (
{{char}})、用户 ({{user}})、时间、日期等变量,支持自定义变量 ({{setvar}},{{addvar}})。 - 安全内联表达式:支持有限制的 JavaScript 表达式(如
{{js::1 + 2 * 3}}),但禁止原型访问、函数调用和eval。 - Markdown 和 HTML/CSS 清洗:支持完整的 Markdown 语法,并对 HTML/CSS 进行严格清洗,移除危险标签、属性和远程资源。
- 角色模板:允许自定义不同角色的 HTML 包装结构。
- 主题系统:支持预设主题切换和自定义 CSS 注入。
- 八种沉浸式文档模板:包括 letter(信件)、exam(试卷)、postcard(明信片)、telegram(电报)、dossier(卷宗)等。
安装与启用¶
当前适配目标为 DeepSeek Harness 0.1.7-rc.2。使用以下命令安装:
npx --yes @deepseek-ai/dsh@0.1.7-rc.2 plugin --profile web add .
启动后使用终端打印的完整 Web URL(含一次性 token)进入。认证由宿主处理,插件无需自行管理 token。
使用示例¶
正则配置¶
插件支持紧凑语法和对象结构两种配置方式:
DeepSeekTavernRenderer.configure({
regexRules: [
'/([A-Z]+)-(\\d+)/编号 $2,角色 {{char}},类型 $1/g',
],
})
宏和变量调用¶
使用内置变量和自定义变量:
// 内置变量
{{char}}, {{user}}, {{time}}, {{date}}
// 自定义变量
{{setvar::mood::calm}}
{{getvar::mood}}
{{incvar::turn}}
沉浸式文档模板¶
模型只需输出特定围栏即可生成结构化文档:
:::letter
from: {{char}}
to: {{user}}
date: {{date}}
subject: The signal after midnight
---
Dear **{{user}}**,
The receiver woke at 23:40.
:::
主题切换¶
通过 API 切换预设主题或注入自定义 CSS:
DeepSeekTavernRenderer.setTheme('harness')
DeepSeekTavernRenderer.setCustomCss(`
.dsh-tr-message { line-height: 1.85 }
`)
注意事项¶
- 渲染边界:插件只消费
assistant-step/user/steering的展示节点,不读写持久会话事件,也不参与 RP settlement。流式running与最终settled/interrupted语义保持。 - 安全机制:HTML 清洗采用 DOM 树和显式标签/属性白名单。消息类名统一改写为
custom-*,CSS 限定在.dsh-tr-message-content下。 - 无后端依赖:没有 ApiProxy、后端 Remote 服务或自定义 settings card。主题和宏配置由浏览器 API 和 localStorage 管理。
- 权限范围:插件以当前 DSH 进程权限运行(浏览器端),安装前应检查源码。
生态背景¶
DSH 理念是“一切皆插件”。社区目录(https://www.skillhub.cn/plugins)是独立站点,与 DeepSeek / 幻方无官方从属关系。