# 为什么做常驻实体 ## 一句话 常见的做法是把**上下文做长**;这个插件把**状态搬到会话外面**。两者不是同一件事,混起来会同时得到两者的缺点。 ## 会话缺的是什么 一次对话有三个天然边界:关掉就没了、压缩会丢、换个窗口就不认识你。 围绕这三个边界的常见解法是**把上下文撑大** —— 更长的窗口、更聪明的摘要、检索回来的历史片段。它有效,但它解决的问题是「这一次对话里能想起多少」,不是「下次开窗口时它还记得我吗」。 **状态没有地方放,才是根本问题。** 记忆被存在对话记录里,就等于存在一个随时会被清空、重写、或干脆不加载的地方。 ## 所以这里把状态搬出来 `dsh-bot` 的实体活在 `$DSH_HOME$DSH_HOME/bot/`: - **实例**:它叫什么、什么类型、什么权限、哪个工作区。 - **记忆**:一棵 `.md` 文件树。不是向量库,是你**能直接打开、编辑、版本管理**的东西。 - **任务队列**:它要做什么、什么时候做、做过什么、结论是什么。 - **设置**:限额、规则、连接、MCP 服务。 会话关掉,这些都在;上下文压缩,这些不受影响;换一个会话,读的是同一份。**每个会话都是这个实体的一个窗口,而不是它本身。** ## 三个由此而来的设计决定 ### 记忆做成文件,而不是向量库 向量库检索能力强,但它有一个代价:**你不知道它记住了什么、为什么记住、怎么改。** 当它记错一件事,你只能等它自己忘掉或反复纠正它。 文件不一样。设置页里能看到全部条目,`$DSH_HOME$DSH_HOME/bot/memory/` 里能直接改。改一处,之后每次对话都按新的来。 代价是规模:文件全量进上下文,装不下的时候没有自动降级。**这是明确接受的取舍** —— 在记忆规模达到阈值之前,引入检索只会多一个更不可解释的层。 ### 来源是标签,不是判断 一条记忆来自**对方亲口说的**、来自**它自己的结论**、还是来自**它读到的某个文件或网页** —— 这三者的可信度完全不同,而且区别不该由模型在事后猜。 所以每条记忆带一个 `source` 字段:`user` / `agent` / `tool`。**一条保持自己标签的说法有用;同一条话穿上事实的衣服就是隐患。** 尤其是第三个:它读了一个网页,然后把网页上的话写进了长期记忆 —— 那等于让那个网页往它的信念里写东西。 ### 危险的动作停下来,而且把全貌摆出来 一个常驻实体必然同时持有三样东西:**读得到外部输入**、**碰得到你的私有数据**、**能对外发消息**。这三样凑齐的系统不该无人值守地跑。 所以: - **自主时间默认关闭。** 打开后空闲也只是前置条件,必须有可检查的条件成立 —— 它答得出「为什么是这件事,为什么是现在」。 - **它自己的权限默认只读。** 主动行为拿不到写的能力,除非你明确给。 - **碰到工作区边界就停下。** 任务进入 `awaiting`,把**工具名和完整参数**摆给你看。你批准的是一个具体动作,不是一类动作。 - **批准是「这一次可以」。** 重跑不会再拦你;但改任务标题或备注会撤销批准 —— 你当初批准的是当时读到的那个任务。 ## 不做的事,以及为什么 **不做「纯记录 + 检索」。** 2025 到 2026 之间有几家做全天记录加检索的产品,商业闭环都没有走通。**常驻能力必须挂在「能办事」上,而不只是「记得」** —— 所以这里的核心是可执行的工具,记忆是让这些工具用对的前提。 **不把记忆当免费能力。** 记忆的存储、组织、随模型升级而不崩,都是长期成本。所以每一项都有可调限额,默认值集中在一处,而不是散在各处写死。 **不用「无需监督」当卖点。** 2026 年几家主流产品都对主动动作加了显式审批点。**一个说自己不需要审批面的系统,通常只是没有可披露的审批面。** ## 它适合谁 - 你希望有个东西**跨会话记得住**你在意的事,而不是每次重新交代; - 你要它**能去做事**,但每一步都能看见、能拦住; - 你介意它背着你记东西 —— 所以你想能打开文件看它到底记了什么。 如果需要的只是「这一次对话更聪明」,那不需要这个插件。