前言¶
DeepSeek API 的请求体支持 user_id 字段,用于内容安全隔离、KVCache 隔离和调度隔离。官方要求该字段不得包含用户隐私信息,格式为 [a-zA-Z0-9\-_]+,最长 512 字符。
DSH 默认通过 getOrCreateAnonymousUserId() 维护一个全局匿名 user id,没有「按会话区分」的概念。若你希望不同聊天会话在 API 侧拥有彼此独立的 user_id,又不想改 DSH 源码,社区插件 dsh-session-user-id(维护者 abluefan,分类:模型推理)就是针对这一点的实现:每条会话对应一个持久、唯一、随机的 user_id,并用本地文件保存映射。
这是什么¶
dsh-session-user-id 在 DSH 调用 DeepSeek 时,通过 deepseekLlmApiExtensions 扩展点把 user_id 合并进请求体顶层。扩展点入参带有 sessionId;插件第一次见到某个 sessionId 时生成 UUID v4 并写入映射,之后同一 sessionId 始终使用同一个值。user_id 仅使用随机 UUID v4,不包含可识别个人的信息。
依赖 DSH 自带的 deepseekLlmApiExtensions(README 写明需 DSH ≥ 0.2.1;package.json 中 engines.dsh 为 >=0.2.1-rc.2)。插件版本 0.1.0,许可证 MIT。
行为说明¶
下面介绍插件在几种请求场景下的表现。
- 有
sessionId的会话请求:生成或读取已保存的 UUID v4,作为user_id注入请求。 - 没有
sessionId的请求(例如部分内部调用):不注入,保持 DSH 默认行为。 - compaction、session-title 等子请求:若沿用同一
sessionId,则使用与同一会话相同的user_id。
映射持久化在 $DSH_HOME/session-user-ids.json,结构如下:
{ "version": 1, "sessions": { "<sessionId>": "<uuid>" } }
写入采用先写临时文件再 rename 的方式,避免产生半截文件。
安装与启用¶
插件以当前 dsh 进程权限运行;安装前建议在 GitHub 仓库核对源码与 MIT 许可证。社区目录可在 SkillHub 插件页 或 awesome-dsh-plugin 查找,与 DeepSeek / 幻方无官方从属关系。
通过插件市场(推荐)¶
在 awesome-dsh-plugin 目录中找到本插件,或在 dsh 的 插件 → 发现 里搜索 dsh-session-user-id 并安装。
手动安装¶
任选一种方式,不要两种同时使用。
A. 复制目录 + 手写 insert(适合本地开发)
- 将插件目录复制到
$DSH_HOME/profiles/web/node_modules/dsh-session-user-id/。 - 在
$DSH_HOME/profiles/web/cordis.patch.yml增加:
- insert:
- id: session-user-id
name: 'dsh-session-user-id'
- 重启 dsh,或让 Loader 重载配置。
B. 使用 dsh plugin add(需包已发布到 npm)
dsh plugin --profile web add dsh-session-user-id
使用 B 之后,包名会进入 dsh.profile.bundles,bundles 层会读取包内自带的 cordis.patch.yml;此时不要再做 A 的第 2 步,否则同一 id 会被插入两次,DSH 启动会失败。
典型用法¶
安装并启用后,无需额外配置项:正常在 DSH 里发起带会话的请求即可。插件会在首次见到某个 sessionId 时写入 $DSH_HOME/session-user-ids.json,后续同会话请求自动带上对应 user_id。
若要确认映射是否生成,可查看该 JSON 文件中 sessions 下是否出现你的 sessionId 与 UUID 对应关系(注意不要对外泄露完整 sessionId 若其具有敏感含义)。
适用场景与注意¶
适合谁:需要在 DeepSeek API 侧按会话隔离 KVCache、内容安全或调度上下文,且接受「会话之间不共享缓存」的开发者。
权衡:user_id 按会话隔离意味着每条会话独立的 KVCache。会话之间不再共享缓存,共同的 system prompt、人设等前缀需要重新计算,KV 命中率可能下降、调用成本可能上升。这是隔离带来的代价,换来的是会话之间减少互相污染。
安全与运维:插件读写 $DSH_HOME 下的映射文件;安装前请自行审查 GitHub 仓库 中的 index.js 与补丁配置。
结尾¶
dsh-session-user-id 在不修改 DSH 源码的前提下,利用 deepseekLlmApiExtensions 为每个 sessionId 绑定持久、随机的 DeepSeek user_id,映射保存在 $DSH_HOME/session-user-ids.json。
- 目录页:https://www.skillhub.cn/plugins/abluefan/dsh-session-user-id
- GitHub:https://github.com/abluefan/dsh-session-user-id