cq-guojia/dsh-session-title-pattern ↗★ 1
@cq-guojia/dsh-session-title-pattern
会话标题自动按日期类型主题重命名并可配置模型重算 适合偏好统一可读标题的长期会话;需已配置可用模型并在设置中保存规则。
安装
npx -p @deepseek-ai/dsh dsh plugin --profile web add github:cq-guojia/dsh-session-title-pattern说明文档
阅读完整 README ↗配置
两种方式,效果一样,可混用。
1. 设置界面(推荐)

打开 dsh 的「设置 → 插件」,找到本插件的卡片(默认收起,点标题行展开;有未保存的 改动时标题行会显示「未保存」):
| 项 | 说明 |
|---|---|
| 用模型总结标题 | 开关。关掉即回到关键词规则,此时下面只保留标题格式相关的两项,其余全部隐藏 |
| 每隔几条对话重算一次 | 默认 10。仅模型模式。填 0 = 只在新建会话时算一次,之后不自动更新,随时可点标题旁的按钮手动重算 |
| 标题总结大模型 | 一行两个下拉:左边挑厂家(第一个选项是「跟随对话模型」),右边挑该厂家下的具体模型,必须选一个、不给留空;换厂家时右边自动落到新厂家的第一个模型。只列出你已配置且可用的供应商;跟随对话模型时右边置灰 |
| 超时 | 仅模型模式。模型慢的时候(比如免费档在排队)就往大调 |
| 标题格式 / 标题长度上限 | 两种模式都生效 |
改动是暂存的:改完点「保存」才写入。每个字段会标出是否自定义过,可以单字段「恢复默认」 (把该项清回默认值,同时也清掉它在用户层的覆盖)。底部还有「放弃修改」, 把这次没保存的改动全部丢掉、回到已保存的状态;没有改动可放弃时它是灰的。
卡片标题行那个「未保存」的判据是值有没有变,不是「有没有动过输入框」—— 把 80 改成 90 再改回 80,标记会自动消失,保存按钮也跟着变灰。 鼠标停在标记上会列出到底哪几项和已保存的值不同。
「自定义」的判定是「与你写的值不等于默认值」:填了一个恰好等于默认值的数, 保存时不会往用户层记一笔,等于没改。
provider 与 model 必须成对填写。只填一个时保存会被拒绝并提示(这是 schema 表达不了的 跨字段约束,由 host 侧校验)。
2. profile 的 cordis.patch.yml
适合脚本化或批量部署:
- id: session-title-pattern
config:
mode: llm
retitleEvery: 10
template: '{MMDD}|{type}|{topic}'
maxBytes: 80
| 键 | 类型 | 默认值 | 说明 |
|---|---|---|---|
mode | llm | rules | llm | llm 由模型总结类型与主题;rules 走零 token 的关键词规则 |
retitleEvery | number | 10 | 每多少条人类消息重算一次标题(仅 LLM 模式),最小 0。0 = 只在新建会话时算一次,之后不自动更新 |
provider | string | 空 | 指定模型 provider,必须与 model 成对;留空则跟随会话主模型 |
model | string | 空 | 指定模型 id,必须与 provider 成对 |
timeoutMs | number | 30000 | 单次模型调用超时(毫秒)。手动重算会基于整段对话重来,叠加免费档排队时 15 秒实测不够,故默认 30 秒 |
maxOutputTokens | number | 512 | 输出 token 上限的保险丝(服务端硬切断,到点就停)。界面上不出现,需要时走 cordis.patch.yml —— 它不是「软限制」,调大也不额外花钱(模型真写了才计费) |
maxInputBytes | number | 4096 | 单次调用输入字节上限(滚动摘要的硬预算) |
template | string | {MMDD}|{type}|{topic} | 标题格式模板,写法见下 |
maxBytes | number | 80 | 标题总长度上限(UTF-8 字节),最小 20 |
template怎么写:{...}里可以写YYYYMMDDHHmmss(日期时间部件,本地时区,可任意拼接, 如{MMDD}/{YYYYMMDD}/{HHmmss};注意MM是月、mm是分)、type(分类)、topic(主题)。 不写{type}标题里就没有分类,不写{topic}就没有主题。 例如{YYYYMMDD} {topic}→20260913 登录失败。 认不出的占位符会原样留在标题里(如{date}),方便一眼看出是模板写错了。默认模板里的
|是全角竖线(U+FF5C),占 3 个 UTF-8 字节。
⚠️
maxBytes必须 ≤session-title行的maxTitleBytes(dsh-base默认为 80)。 服务在写入前会按该值二次截断,超出部分被静默丢弃,不会有任何报错。 如果你调整了session-title.maxTitleBytes,这里要同步调整。
两层优先级:解析顺序是
schema 默认值 → 组合层(本节) → 用户层(设置界面)。 也就是说界面里改过的字段,改cordis.patch.yml不会生效,除非先在界面上「恢复默认」。兼容性:设置卡片依赖 dsh 自带的设置界面(
@deepseek-ai/dsh-client-ui-settings*), 本插件的dsh.client.inject声明了它们。如果你的 dsh 版本没有这些包,客户端部分会一直 pending 并导致启动失败 —— 这种情况请用 v0.3.2。