# 会话与轮次(`/reset`) > 一个 QQ 会话 = 一个**确定性**的 DSH Session:重启后同一个人再发消息,插件 `resume` 原来那个。 > `/reset` 不删旧会话,而是把「第几轮」+1、换一个新 id 从头开始。 ## 新开一轮会话(`/reset`) 在 QQ 里**单独发送** `resetCommand`(默认 `/reset`)即可给**当前这个会话**开新的一轮: - 只影响发指令的那个会话(私聊对象 / 群),别的会话不受影响; 群聊的上下文缓冲(`ambientMessages`)也一起清掉。 - 整条消息恰好等于指令才触发;`/reset 你好` 这种带内容的消息会照常交给 Agent。 - **只有 `resetUsers` 里的 QQ 号能重置**,而且这一项**默认是空的 —— 也就是谁都不能**。 这一条与 `allowUsers` 的「留空 = 不限制」刻意相反:群消息是不可信输入,一个「没配就等于 人人可用」的重置指令意味着群里任何一个人都能悄悄把会话重开一轮,而且默认没人会去配它。 所以想用这个指令必须显式写号。本仓库的写法是把号放进**环境变量**(DSH 启动时会读 `<启动 cwd>/.env` 和 `$DSH_HOME/.env`): ```bash # <仓库根>/.env(已被 .gitignore 盖住) QQBOT_RESET_USERS=123456789,987654321 ``` `cordis.patch.yml` 里那行 `resetUsers: !!js …` 会把逗号分隔的变量拆成数组、去空白, 变量不存在或为空时就是空数组(= 谁都不能,与默认值一致)。**改完要重启进程**(`.env` 只在启动时读一次)。也可以在 Web UI 的插件设置里直接填 `resetUsers` —— 那边写的是完整 config;但别去 profile 的 `cordis.patch.yml` 里单写这一个字段(见[配置项](configuration.md#配置项)开头的警告)。 群里看的是**发言者**的 QQ 号(不是群号);私聊看的是对方。 - **没权限的人发 `/reset` 会被静默忽略**:不重置,也不回一句「你没有权限」—— 回话等于告诉 全群这里有这么个指令、还激人去试。这条消息仍然照常记进转录(留痕在长期记忆里),但不会 交给模型,也不会把当时攒着的那批消息提前投出去。 - 启动日志里会明说权限状态(`reset command "/reset" is allowed for 1 account(s): …` / `… is disabled for everyone: resetUsers is empty`)—— 配错了不用猜。 - **`/reset` 不是「删掉会话」,而是「换一个会话重新开始」**:先销毁活着的 Agent (连同它内存里的上下文与 Session 写出句柄),再把「这个会话开到了第几轮」+1 并落盘。下一条消息据此算出一个**新的** Session id,于是从头开始。 - 上一轮的 Session 记录**留在磁盘上**当那段聊天的存档,不会被删;只是不再被带进 新一轮的上下文里。想真删掉它是运维动作(删 `$DSH_HOME/sessions/<项目>/<会话 id>/`), 不是聊天指令 —— 聊天里没有「把说过的话抹掉」这种能力。 - 「第几轮」是落盘的,所以**重启不会把上一轮 resume 回来** —— 否则 `/reset` 等于白按。 标记文件在会话根目录下的 `reset/<会话>.json`(拿不到会话根时退回 `cwd` 下的 `data/reset/`)。 - `qq_list_conversations` 里报的 `session_id` 会换成新一轮的 id,`session_round` 是当前轮次(0 = 从没 `/reset` 过)。 - 长期记忆(`.qq-memory/`)**不受影响**:转录、`MEMORY.md` 是按会话 key 落的, 与轮次无关 —— 「上一轮聊过什么」仍然记得,只是不再占着上下文。 - 把 `resetCommand` 设为空串即可禁用该指令。