在 DeepSeek Harness (DSH) 中,新会话默认使用时间戳编号,导致长时间运行的会话列表难以快速浏览。现有的方案要么只等待空闲再生成(用户等待时无标题),要么每次轮次都调用模型(成本高昂)。该插件将这两个概念拆分为互补的阶段:即时关键词标题和空闲预算模型优化。
核心功能¶
- 两阶段管道:用户消息到达时立即生成关键词标题(零成本,毫秒级);会话进入空闲状态后,调用预算模型进行优化,标题随会话演变。
- 成本控制:预算路由自动从注册模型目录中按名称模式筛选最便宜的模型,并在模型拓扑结构变化时自动失效缓存。
- 原始关键词算法:包含去噪(代码块/URL/Markdown)、脚本检测(拉丁/中日韩)、停用词和功能词过滤,以及保持顺序的字符预算截断,支持中文、英文、日文和韩文。
- 标题去重:相同标题不会重复写入;跨会话重复的标题会自动添加数字后缀(如
Fix Login Bug (2))。 - 摘要集成:优化阶段同时生成一行会话摘要,通过
session/caption-note事件写入会话日志,供列表 UI 和导出工具使用。 - 尊重手动标题:手动重命名后自动生成完全停止,绝不覆盖(即使重命名正在进行中的优化调用,也不会写回)。
- 零配置启动:默认配置即可工作,所有行为均可调整。
安装与启用¶
通过命令行安装最新版本到指定 profile:
dsh plugin --profile demo add github:JohnXu22786/session-titler
移除插件:
dsh plugin --profile demo remove dsh-session-caption
也可以从本地目录或 tarball 安装:
# 从本地目录
dsh plugin --profile demo add /path/to/dsh-session-caption
# 从本地 tarball (需先 npm pack)
dsh plugin --profile demo add ./dsh-session-caption-0.1.0.tgz
安装后需重启 DSH 进程才能生效。安装成功后,dsh --profile demo --dump-config 输出中应包含 session-caption 配置行。
配置说明¶
插件支持零配置启动,所有行为可调。配置文件位于 $DSH_HOME/cordis.patch.yml。以下是关键配置项:
- id: session-caption
config:
instant:
enabled: true # 开启 Phase 1 关键词提取
maxCjkChars: 14 # 中日韩标题最大字符数
maxWords: 6 # 拉丁语标题最大单词数
refine:
enabled: true # 开启 Phase 2 优化
timeoutMs: 60000 # 单次调用超时时间
model:
provider: '' # 显式指定 Phase 2 使用的模型提供商
model: '' # 显式指定 Phase 2 使用的模型名称
dedup:
enabled: true # 开启标题去重
suffix: '({n})' # 重复后缀模板
技术实现¶
该插件是一个标准的 DSH Bundle(配置层 + 插件代码),通过 package.json 中的 dsh.bundle 字段指向 cordis.patch.yml。启动时,它会禁用内置的 session-title-llm(因为 session-title 服务设计为单提供者),并注册自身的 session-caption 提供者。
- Phase 1:直接对用户消息进行关键词提取,不调用大模型。
- Phase 2:仅在会话空闲窗口触发。模型选择优先级为:显式配置 > 预算模式(筛选便宜模型)> 会话自身路由。
注意事项¶
- 重启生效:安装后必须重启 DSH 进程,配置才会加载。
- 单提供者冲突:
session-title服务设计为单提供者。如果另一个插件也注册了标题提供者,两者会互相替换。该插件的 bundle 层默认会禁用内置的session-title-llm。 - 空闲窗口:若关闭
instant.enabled,Phase 1 不再生成标题,但 Phase 2 仍仅在空闲窗口运行,不会在繁忙时段生成。
参考¶
- GitHub: https://github.com/JohnXu22786/session-titler
- 目录页: https://www.skillhub.cn/plugins/JohnXu22786/session-titler