dsh-dated-session-titles:为 DSH 会话生成「日期 + 分类 + 短描述」标题

前言

在 DeepSeek Harness 里开一个会话,侧边栏里往往只有首条消息截出来的几个字当标题。聊久了、话题换了,标题却不跟着变;过几天再翻历史,也很难看出哪天在聊什么主题。自带的首条提示命名方式,对「按时间回溯」和「按主题扫一眼」都不太友好。

下面介绍社区插件 dsh-dated-session-titles(维护者 beijingrong):在 DSH 0.2.x 上以 bundle 形式接管会话标题逻辑,把标题收成类似 2026-11-02 设置:会话标题规则 的格式。日期前缀由插件按会话创建日和宿主时区拼好,分类和短描述由模型根据对话内容生成,并可在对话里随时手动改名。

这是什么

dsh-dated-session-titles 是一个 DSH bundle 插件,目录分类为工作流。它替换内置的 first-prompt 标题 provider,默认在每条用户消息后旁路重算标题;也提供 agent 工具 set_session_title,按需改标题。

标题形态示例(来自仓库 README):

2026-11-02 设置:会话标题规则
2026-11-04 排查:登录页报错
2026-11-10 记账:月度固定开销估算

分类不是固定词表,由模型按对话自拟约 2–4 个汉字(如 设置、记账、科普);描述目标 8 个汉字、硬上限 10 个,不带标点、引号和括号。当前 npm 包版本为 0.2.1,许可证 MIT;engines.dsh 要求 >=0.2.1-rc.2 <0.3.0,README 写明在 DSH 0.2.2-rc.1 上验证过。

核心功能

自动命名与日期前缀

  • 自动命名:默认 automatic: all-prompts,每条用户消息后重算标题;话题变化时标题会跟着变。若觉得变动太频繁,可改为 first-prompt,只在首条消息后定名一次。
  • 日期可靠:datePrefix 默认为 true 时,前缀为 YYYY-MM-DD,取会话创建日(可按 timeZone 指定 IANA 时区,默认宿主时区);由插件拼接,不依赖模型写日期。
  • 不阻塞主对话:命名走旁路异步请求,失败则保留兜底标题(如首条消息前几字),不重试、不向主对话报错。

分类与长度

  • 分类自由:配置项 categories 默认为空时,模型自由拟类;若填写词表,则退化为「优先从词表里选」。
  • 解析失败:无法解析模型输出时,类别兜底为 fallbackCategory(默认 其他)。
  • 长度控制:targetCjkCharacters / maxCjkCharacters 默认 8 / 10;整条标题一般在 30 字以内,bundle 将标题服务上限调到 120 字节。

手动改名与钉住

通过 agent 工具 set_session_title 可随时改标题:

参数 说明
title 完整新标题,可省略日期前缀(自动补)
category + description 也可只传类别和描述,日期同样自动补
都不传 按当前对话重新生成一次标题

手动改名(包括调用该工具)会把标题标为用户来源,本会话不再自动改名。

可审计

每次命名请求会记入会话日志事件 session/title-llm-request,标题异常时可对照现场排查。

与 0.1.x 的主要差异(摘要)

0.2.x 以 bundle 安装,零 import 内部 @deepseek-ai/* 运行时包,只走 ctx 服务;默认每条消息后重命名(0.1.x 仅在首条后命名);不再在激活时批量回填旧会话标题,以免对每个历史会话额外调用模型。

环境要求

  • DSH 0.2.x(README 在 0.2.2-rc.1 验证)。
  • 以 bundle 安装:无需复制文件、手工 patch、或为插件软链 node_modules。

安装与启用

先把仓库放到本机(README 给出的方式):

git clone https://github.com/beijingrong/dsh-dated-session-titles

在 DSH 中任选一种安装路径:

  1. Web 界面:设置 → 插件 → 从本地目录安装,选中克隆后的目录。
  2. 让 agent 安装:提供目录路径,通过 plugin_manager 的 install_bundle 安装。
  3. 命令行:
dsh plugin --profile <profile> install <本地目录或 npm 包名>

安装后 README 写明会立即生效(HMR),无需重启;新会话以及已有会话的下一条消息都会按新规则命名。插件在当前 DSH 进程权限下运行,安装前建议自行查看源码与 MIT 许可证。

本地开发迭代时,可卸载再装同一目录使改动生效,例如:

plugin_manager remove_bundle  dsh-dated-session-titles
plugin_manager install_bundle /abs/path/to/dsh-dated-session-titles

配置项概览

所有字段可选,默认见 bundle 内 cordis.patch.yml。常用项如下:

字段 默认 说明
automatic all-prompts 每条消息后重命名;first-prompt 仅首条后定名
datePrefix true 是否加 YYYY-MM-DD 前缀
targetCjkCharacters 8 描述理想字数
maxCjkCharacters 10 描述硬上限,超出截断
maxMessages 6 取名时参考首条 + 最近若干条用户消息
messageCharLimit 600 单条消息引用上限
maxInputBytes 8192 命名请求输入字节上限
maxOutputTokens 1500 命名请求输出上限
timeoutMs 45000 命名请求超时
timeZone 宿主时区 日期前缀使用的 IANA 时区
provider / model 沿用会话路由 可成对指定其它模型取名
categories 空 非空则优先从词表选类
fallbackCategory 其他 模型输出无法解析时的兜底类别

命名节奏上,README 提到旁路请求在 deepseek-flash 上通常约 1–2 秒,不占主回复的 token 与时延。

典型用法

  1. 安装 bundle 后正常开聊;默认每发一条用户消息,侧边栏标题会异步更新为「日期 + 分类:描述」。
  2. 若希望标题只在会话开头定一次,将 automatic 设为 first-prompt。
  3. 在对话中说「把标题改成……」,由 agent 调用 set_session_title;改完后该会话自动命名会停止,避免覆盖你的命名。
  4. 标题不对时,在会话日志中查找 session/title-llm-request 核对当次命名输入与输出。

验证效果:README 建议起一个子会话聊两句,观察每条用户消息后的标题变化即可。

适用场景与注意

适合:长期在 DSH 里开很多会话、需要按日期和主题快速扫历史的工作流;希望标题随话题更新、又不想自己维护固定分类表的场景。

注意:

  • 默认每条消息触发一次旁路 LLM 调用;在意调用次数时可改用 first-prompt 或手动改名后钉住标题。
  • 失败、超时、路由不存在时静默保留兜底标题,需结合日志事件排查。
  • 社区目录 SkillHub 插件页 与 GitHub 仓库由社区维护,与 DeepSeek / 幻方无官方从属关系;DSH 生态主张「一切皆插件」,安装仍以你本机 profile 与权限为准。

结尾

dsh-dated-session-titles 把会话标题从「首条截断」推进到可扫读的「日期 + 分类 + 短描述」,并把日期与失败兜底放在插件侧,降低模型乱写日期的风险。若你已在用 DSH 0.2.x 并希望侧边栏历史更易检索,可按 README 以 bundle 方式安装并按需调整 automatic 与 categories。

羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

小夜