dsh-web
zhu1090093659/dsh-webDeepSeek Harness(DSH)Web 插件聚合生态包 · 一切皆插件,创意工坊分发(dsh-market.com)
给每条 DSH 会话分配一个持久、唯一、随机的 DeepSeek API user_id。
DeepSeek API 的请求体支持 user_id 字段([a-zA-Z0-9-_]+,最长 512),用于内容安全隔离、KVCache 隔离、调度隔离。
官方明确要求:不要在 `user_id` 中包含用户隐私信息 —— 所以本插件只用随机 UUID v4。
DSH 本身只有一个全局匿名 user id(getOrCreateAnonymousUserId()),没有会话概念。但 deepseekLlmApiExtensions 扩展点的 request 带 sessionId,而 provider 返回的 value 会 merge 成 request body 的顶层字段 —— 正好用来注入 user_id。
不改 DSH 源码。
sessionId → 生成 UUID v4、写入映射文件、之后永久不变sessionId 的请求(例如某些内部调用)→ 不注入,保持默认sessionId ⇒ 同一个 user_id$DSH_HOME/session-user-ids.json
{ "version": 1, "sessions": { "<sessionId>": "<uuid>" } }写入用「先写临时文件再 rename」的原子方式,避免半截文件。
user_id 隔离 = 每条会话独立的 KVCache。
会话之间不再共享缓存,共同前缀(system prompt、人设)要重新计算 → 命中率可能下降、成本上升。这是隔离的代价,换来的是会话之间不互相污染。
在 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'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 启动会直接失败。
deepseekLlmApiExtensions(DSH ≥ 0.2.1 自带)