前言¶
在 DeepSeek Harness(DSH)里,左侧会话列表靠标题区分不同任务。DSH 自带或第三方插件可以自动给会话起名,但常见策略是「首条 prompt」或「每条 prompt」触发,很难做到「聊完一大段、觉得标题不合适时再手动要一条摘要式标题」。若自己改标题,又得从长对话里提炼要点。
下面介绍的 dsh-session-titler(维护者 ZilongYang)走另一条路:在 Web UI 里点一次按钮,用模型把整段会话压成一条标题提案;只有你点「确认修改」才会写入,取消、Esc 或点遮罩都不会动会话数据。插件分类为「模型推理」,当前 npm 包版本 0.2.1(MIT)。
这是什么¶
dsh-session-titler 是 DSH 的 Host + Web Client 双半插件:Host 半注册只读 HTTP 路由并调用 LLM;Client 半在现有页面上挂顶栏按钮和会话行菜单,弹出可编辑的确认框。它不注册 ctx.sessionTitle 的 provider(该槽位是独占的,会顶掉 DSH 自带的自动标题 provider),因此不会改写你已有的自动起名行为,只在你显式点击时生成。
社区目录页:skillhub.cn/plugins/ZilongYang/dsh-session-titler。源码与说明:github.com/ZilongYang/dsh-session-titler。DSH 生态强调「一切皆插件」;SkillHub 等目录为社区站点,与 DeepSeek / 幻方无官方从属关系。
核心功能¶
两处入口,不新增页面¶
| 入口 | 位置 |
|---|---|
| 顶栏 ✦ 生成标题 | 会话标题栏,在「创造模式」芯片右侧、「费用 ¥0」芯片之前 |
| 会话行 生成标题 | 左侧会话行「…」菜单,在「重命名」下面、「分叉会话」上面 |
空白会话没有可总结内容时,按钮会置灰。
生成 → 编辑 → 确认才写入¶
- 点击入口后,Client 向 Host 发起
POST /session-titler/propose(请求体{ "sessionId": "session-…" },≤ 8 KiB)。 - Host 读取当前会话的「模型表面」(已考虑压缩/替换),组装 transcript(默认 32 KiB 预算,条目级截断),按会话路由候选调用 LLM(
purpose: 'session-title')。 - 弹窗展示标题提案,可改字、可「重新生成」;点 确认修改 时走与官方「重命名」相同的
session.rename(title)路径。 - 生成阶段不写会话日志;未确认前数据库里标题不变。
模型路由与回退¶
路由候选从新到旧:活会话 requestHeader().config → 日志里每条 request/header → agentDefaultModel。每个候选需在 llm.listProviders() 中有已注册 adapter。若会话记录的路由在当前 profile 无 adapter,会回退到更早可用路由或默认模型;响应里 fallback: true 时,弹窗会标注「使用模型:…(…已回退)」。
可调策略(改代码后需重启 Host)¶
策略集中在 Host 侧 title.js 顶部 POLICY,插件不带 Config 段:
| 键 | 默认 | 含义 |
|---|---|---|
maxInputBytes |
32768 | 送进模型的 transcript 字节上限 |
maxOutputTokens |
256 | 标题输出 token 上限 |
timeoutMs |
30000 | 单次调用墙钟超时 |
maxTitleBytes |
120 | 接受标题的 UTF-8 字节上限 |
userCharsPerMessage / assistantCharsPerMessage |
2000 / 3000 | 单条消息裁剪上限 |
超长会话先按单条裁剪,再从中间整条丢弃(保留开头与结尾),仍超限则截尾部,并在返回值中标记 truncated: true。
安装与启用¶
DSH 要求版本 >=0.2.0-rc.1 且 <0.3.0-0(见 package.json 的 engines.dsh);落在范围外时插件市场装前检查会拒绝安装。
桌面版(DeepSeek Harness.app)¶
desktop profile 由 Electron 应用独占,命令行 dsh plugin --profile desktop … 会报错。请在应用内左侧「插件」页安装;收录后也可搜 titler 安装。
命令行管理的 profile¶
web、main 或自建 profile 可用:
# 从 npm 安装(推荐)
dsh plugin --profile <你的profile> add dsh-session-titler
# 从 GitHub 源码安装(跟踪 main 分支)
dsh plugin --profile <你的profile> add github:ZilongYang/dsh-session-titler#main
# 本地开发:link 挂载
dsh plugin --profile <你的profile> add link:/绝对路径/dsh-session-titler
装完若看不到按钮:Host 半在进程内,需重启一次 dsh 或桌面应用后再刷新页面(Client 半刷新即可)。
卸载(CLI profile):
dsh plugin --profile <你的profile> remove dsh-session-titler
桌面版在应用内「插件」页停用或卸载。
典型用法¶
- 打开任意已有内容的会话。
- 点标题栏 ✦ 生成标题,或会话行 … → 生成标题。
- 等待约 2–4 秒,在弹窗中查看或编辑提案。
- 点 确认修改;左侧列表标题立即更新,刷新页面仍保持。
点「取消」、Esc 或点遮罩均不会写入任何数据。
适用场景与注意¶
适合谁
- 长对话后想用一句话概括整段任务,又不想覆盖现有自动标题插件的行为。
- 需要在改标题前先看模型提案、手动微调再落库的场景。
兼容与权限
- README 声明在
0.2.0-rc.2、0.2.1-alpha.2、0.2.1-rc.2等版本上已验证;<0.2.0-rc.1与>=0.3.0不在支持范围。 - 插件以当前 DSH Host 进程权限运行,会读取会话内容并调用已配置的 LLM;安装前应自行查看源码与 MIT 许可证,确认 provider 与数据边界符合你的环境。
- Host 路由带 loopback / 同源请求围栏(防 DNS rebinding、CSRF),不是替代身份鉴权。
常见错误码(节选)
| code | 含义 |
|---|---|
no-content |
表面无 user/assistant 文本 |
no-adapter |
会话路由与默认模型均无已注册 adapter |
timeout |
30 s 内未返回 |
forbidden |
围栏未通过 |
结尾¶
dsh-session-titler 把「整段会话 → 一条标题」做成显式、可编辑、确认后写入的操作,且不占用 DSH 独占的自动标题 provider 槽位。若你在 CLI 或桌面版 DSH 上管理 profile,按上文命令安装并在会话里点 生成标题 即可试用。
- 目录页:https://www.skillhub.cn/plugins/ZilongYang/dsh-session-titler
- GitHub:https://github.com/ZilongYang/dsh-session-titler