dsh-tingxue
听雪 · 双模式虚拟生命系统:LanceDB 自建向量记忆库 + 自建实体关系图谱 + 小 LLM 语义推理,聊天模式与 agent 模式双模式,全部交互在 QQ(dsh-notifier)。 适合希望在QQ中通过聊天或Agent模式与具备长期记忆的虚拟生命交互的用户。
Install
$
npx -p @deepseek-ai/dsh dsh plugin --profile web add github:oranskyx/dsh-tingxueREADME
Read the full README ↗配置
配置方式
有两种,优先级从高到低:
- 图形界面(推荐)——DSH Web GUI 的「设置」:
- 设置侧边栏 →「听雪」(主入口,独占一页)
- 设置 → 插件 → 插件配置(次入口,卡片形态)
- 两处入口共用同一个 settings scope,内容永远同步;写入 settings 用户层(
$DSH_HOME/settings.yaml)
- 配置文件——profile 的
cordis.patch.yml,作为 settings 的 base 层保留
界面里标「已覆盖」的字段表示它覆盖了部署配置,可单点重置回落到部署层。写入用 revision 设栅,表单漂移会被拒绝而不是覆盖并发修改。
Host 与浏览器两个半侧各有一份同构的字段表(src/settings/index.mjs 的 SETTINGS_FIELDS 与 client/client.js 的 FIELDS),当前各 29 项,分组与键一一对应。
配置项
| 配置项 | 默认 | 说明 |
|---|---|---|
| 人格与记忆 | ||
profilePath | '' | 听雪档案 txt 路径(人格提示词,由用户自写) |
dataDir | cwd/.dsh-tingxue | 记忆库数据目录(LanceDB 本地文件即库,state.json 也在这里) |
recentRounds | 10 | 最近 N 轮滑动窗口(仅在打开「重复注入最近对话」时生效) |
injectRecentRounds | false | 重复注入最近对话。默认关:DSH 会话历史本身已含最近对话,再注入一遍等于同一段话付两次 token(实测约 1.5K/轮) |
memoryBudgetTokens | 1600 | 向量记忆检索块 token 上限 |
latestInfoBudgetTokens | 1000 | 最新信息块 token 上限 |
| 模型 | ||
modelBackend | sta1n | 模型后端:sta1n / local / custom |
embeddingModel | gemini-embedding-2 | 向量模型(同库单一模型铁律)。设置页可点「选择模型」从端点列表里挑 |
embeddingDimensions | 3072 | 向量维度,须与模型实际输出一致 |
llmModel | gemini-3.1-flash-lite | 语义推理小 LLM(实体抽取 / 摘要)。设置页可点「选择模型」从端点列表里挑 |
baseURL | '' | local / custom 时的 OpenAI 兼容 base URL |
apiKey | '' | 留空则回落到 DSH 凭据服务里的 STA1N_API_KEY |
| 双模式命令 | ||
agentStartKeyword | /agentstart | 进入 agent 模式的关键词 |
agentStopKeyword | /agentstop | 退出 agent 模式的关键词 |
fileDeleteScope | workcopy | 文件删除范围:workcopy 只删工作副本 / keep 一律保留 |
| 绑定与推送 | ||
channel | qq | 绑定通道(dsh-notifier 的 channel) |
userId | '' | 绑定用户(dsh-notifier 的 userId) |
chatSessionId | '' | 自愈回绑用的可信聊天会话 id |
notifierStateFile | '' | 留空用默认的 dsh-notifier state.json |
routeWorkspace | dsh | 被静音的默认 workspace |
quietOtherWorkspace | true | 只让听雪自己的消息送达 QQ |
qqStatusNotice | true | QQ 是否显示任务状态提示(🚀 任务开始 / ✅ 任务完成 / ⏹ 任务已中止 / ⏱ 心跳 / ⚠️ 疑似卡住)。关掉后这些状态行不发,回复正文照常送达(回复本体走 turn/end 通知的正文,见 交接文档.md §16.2);❌ 出错通知保留 |
approvalAllowlistOnly | true | 审批是否只推 QQ 对话会话。打开后只有被显式放行出站的会话(听雪聊天会话 / tingxue-agent-* 隔离会话)的批准询问发到 QQ,其他 DSH 会话的审批只在桌面弹(需配套的 dsh-notifier 补丁,见 交接文档.md §16.3) |
| 面板与服务 | ||
graphDashboardEnable | true | 是否启用关系图谱面板 |
graphDashboardHost | 127.0.0.1 | 图谱面板监听地址(默认仅本机 loopback) |
graphDashboardPort | 8765 | 图谱面板端口 |
memoryServiceEnable | true | 是否启用记忆服务(管家) |
memoryServiceHost | 127.0.0.1 | 记忆服务监听地址 |
memoryServicePort | 8766 | 记忆服务端口 |
还有若干只在配置文件中生效的字段(routeWorkspaceChannels、provider、model、cwd 等),不暴露在界面上。
生效时机
- 标了
applies: 'restart'的命名空间:dataDir、模型、端口这类启动期读取的字段,改动需重启 DSH。 recentRounds、injectRecentRounds、记忆 / 最新信息预算这类按次读取的字段,保存后立即生效。qqStatusNotice/approvalAllowlistOnly保存后立即生效:它们被写成 dsh-notifier 的prefs:tingxue状态键,由 dsh-notifier 补丁在每次推送 / 审批时实时读取(500ms 读收敛)。graphDashboardEnable/memoryServiceEnable等开关由插件启动期读取,需重启 DSH。
配置方式
有两种,优先级从高到低:
- 图形界面(推荐)——DSH Web GUI 的「设置」:
- 设置侧边栏 →「听雪」(主入口,独占一页)
- 设置 → 插件 → 插件配置(次入口,卡片形态)
- 两处入口共用同一个 settings scope,内容永远同步;写入 settings 用户层(
$DSH_HOME/settings.yaml)
- 配置文件——profile 的
cordis.patch.yml,作为 settings 的 base 层保留
界面里标「已覆盖」的字段表示它覆盖了部署配置,可单点重置回落到部署层。写入用 revision 设栅,表单漂移会被拒绝而不是覆盖并发修改。
Host 与浏览器两个半侧各有一份同构的字段表(src/settings/index.mjs 的 SETTINGS_FIELDS 与 client/client.js 的 FIELDS),当前各 29 项,分组与键一一对应。
配置项
| 配置项 | 默认 | 说明 |
|---|---|---|
| 人格与记忆 | ||
profilePath | '' | 听雪档案 txt 路径(人格提示词,由用户自写) |
dataDir | cwd/.dsh-tingxue | 记忆库数据目录(LanceDB 本地文件即库,state.json 也在这里) |
recentRounds | 10 | 最近 N 轮滑动窗口(仅在打开「重复注入最近对话」时生效) |
injectRecentRounds | false | 重复注入最近对话。默认关:DSH 会话历史本身已含最近对话,再注入一遍等于同一段话付两次 token(实测约 1.5K/轮) |
memoryBudgetTokens | 1600 | 向量记忆检索块 token 上限 |
latestInfoBudgetTokens | 1000 | 最新信息块 token 上限 |
| 模型 | ||
modelBackend | sta1n | 模型后端:sta1n / local / custom |
embeddingModel | gemini-embedding-2 | 向量模型(同库单一模型铁律)。设置页可点「选择模型」从端点列表里挑 |
embeddingDimensions | 3072 | 向量维度,须与模型实际输出一致 |
llmModel | gemini-3.1-flash-lite | 语义推理小 LLM(实体抽取 / 摘要)。设置页可点「选择模型」从端点列表里挑 |
baseURL | '' | local / custom 时的 OpenAI 兼容 base URL |
apiKey | '' | 留空则回落到 DSH 凭据服务里的 STA1N_API_KEY |
| 双模式命令 | ||
agentStartKeyword | /agentstart | 进入 agent 模式的关键词 |
agentStopKeyword | /agentstop | 退出 agent 模式的关键词 |
fileDeleteScope | workcopy | 文件删除范围:workcopy 只删工作副本 / keep 一律保留 |
| 绑定与推送 | ||
channel | qq | 绑定通道(dsh-notifier 的 channel) |
userId | '' | 绑定用户(dsh-notifier 的 userId) |
chatSessionId | '' | 自愈回绑用的可信聊天会话 id |
notifierStateFile | '' | 留空用默认的 dsh-notifier state.json |
routeWorkspace | dsh | 被静音的默认 workspace |
quietOtherWorkspace | true | 只让听雪自己的消息送达 QQ |
qqStatusNotice | true | QQ 是否显示任务状态提示(🚀 任务开始 / ✅ 任务完成 / ⏹ 任务已中止 / ⏱ 心跳 / ⚠️ 疑似卡住)。关掉后这些状态行不发,回复正文照常送达(回复本体走 turn/end 通知的正文,见 交接文档.md §16.2);❌ 出错通知保留 |
approvalAllowlistOnly | true | 审批是否只推 QQ 对话会话。打开后只有被显式放行出站的会话(听雪聊天会话 / tingxue-agent-* 隔离会话)的批准询问发到 QQ,其他 DSH 会话的审批只在桌面弹(需配套的 dsh-notifier 补丁,见 交接文档.md §16.3) |
| 面板与服务 | ||
graphDashboardEnable | true | 是否启用关系图谱面板 |
graphDashboardHost | 127.0.0.1 | 图谱面板监听地址(默认仅本机 loopback) |
graphDashboardPort | 8765 | 图谱面板端口 |
memoryServiceEnable | true | 是否启用记忆服务(管家) |
memoryServiceHost | 127.0.0.1 | 记忆服务监听地址 |
memoryServicePort | 8766 | 记忆服务端口 |
还有若干只在配置文件中生效的字段(routeWorkspaceChannels、provider、model、cwd 等),不暴露在界面上。