前言¶
在 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 中任选一种安装路径:
- Web 界面:设置 → 插件 → 从本地目录安装,选中克隆后的目录。
- 让 agent 安装:提供目录路径,通过
plugin_manager的install_bundle安装。 - 命令行:
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 与时延。
典型用法¶
- 安装 bundle 后正常开聊;默认每发一条用户消息,侧边栏标题会异步更新为「日期 + 分类:描述」。
- 若希望标题只在会话开头定一次,将
automatic设为first-prompt。 - 在对话中说「把标题改成……」,由 agent 调用
set_session_title;改完后该会话自动命名会停止,避免覆盖你的命名。 - 标题不对时,在会话日志中查找
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。