Skip to content

dsh-theone

Verified

dsh-theone · v0.3.22 · Web UI

One chat for everything in DeepSeek Harness (DSH): no more hunting for old conversations. Each message goes to the topic it belongs to, with its own context.

Install

dsh plugin add dsh-theone

Confirm the layer applied with dsh --profile default --dump-config — see the install guide.

Source

Tags

Creators

Readme

TheOne

只开一个对话框,聊你所有的事。
它自己分清每句话属于哪件事,每件事的上下文互不干扰。

DSH 0.2.0-rc.2 Node.js 24 中文 / English

English | 简体中文

演示:在主聊天里先后说显卡和旅行两件事,左侧各自出现一个话题;回到显卡那件事时,它接着原来的话题回答

先问显卡,再问旅馆,然后接着问显卡,中间没有任何提示语。左边的两个话题是它自己建的,什么都没点。(示例对话)


你的 DSH 侧边栏里是不是躺着几十个会话?想回到上周那件事,得一个个翻;懒得新建,就在一个会话里什么都聊,结果上下文越聊越乱,压缩一次细节就没了。

如果你也说过下面任何一句,TheOne 大概就是为你写的:

  • 「之前聊过的那个在哪来着?」:对话太多,旧会话找不到
  • 「懒得新建了,就在这儿接着问吧」:结果一个会话越聊越杂
  • 「我不是跟你说过了吗?」:AI 忘了之前聊过的内容

TheOne 的做法: 你只在一个主聊天里说话,它在后台替每件事开一个独立的会话,把每句话送到该去的地方。

TheOne 的结构:主聊天把每条消息交给分配话题,送到对应的后台会话,结果实时回到主聊天;话题目录保存进展、约束和关联

每件事在自己的会话里推理、调用工具、压缩上下文;你看到的始终是一个普通的对话。

为什么值得一试

平时的用法 装了 TheOne
开始一件新事 新建会话、起名字 直接说
回到之前的事 在侧边栏里翻 直接提,它自己找回来
一个会话聊杂了 上下文互相干扰,压缩后丢细节 每件事一份独立上下文
两件事要结合 来回复制粘贴 自动把另一件事的进展带过来
分错了 手动挪 说一句「分错了」
  • 和原生会话一模一样:思考从第一个字起就在原位置,工具卡片、授权、提问、待办、重试、回答中途插话,全都照常。
  • 相关的事会互通,无关的事互不打扰:相关话题自动共享进展,哪些话题有关联从你的使用中学;话题的约束(比如「预算数字不能写进论文」)每次原样带上,压缩不会丢。
  • 越用越认得你的说法:每个话题有了回复后,后台会写一张简短的路由卡片(这件事是什么、你会怎么叫它、涉及哪些人名地名和文件),换个说法也能分对。分错了说一句「分错了」,它会记住是哪些词把这类消息连到正确话题。很久没动的话题排在候选最后,「很久」是多久,从你自己回头的习惯里学。
  • 旧会话自动变成话题目录:装上后它在后台读一遍你已有的会话,整理成话题、按工作区分组,点进去就能接着聊。
  • 零额外配置:不用另填 API Key,用的就是你在 DSH 里选好的模型。选中 TheOne 时,模型按钮旁边有一个图层图标,可以查看和切换分配话题、干活各用哪个模型。

30 秒装好

  1. 在 DSH 中配置好 API,选一个能正常聊天的模型。
  2. 打开 插件 → 添加插件,在「包名或地址」里填 dsh-theone,点击安装。
  3. 点击左侧 TheOne · 主聊天,开始说话。

就这三步。兼容 DSH 0.2.0-rc.2 与 Node.js 24;界面跟随 DSH 的语言(简体中文 / English)。

第一次用 DSH?手把手来一遍(约 3 分钟)

不用懂代码,跟着做就行:

  1. 先让 DSH 自己能聊天。 在 DSH 的设置里填好模型服务的 API Key(比如 DeepSeek 的),新建一个普通会话发一句「你好」。能收到回复,说明这一步好了。TheOne 用的就是这个模型,不用再填别的 Key。

  2. 装 TheOne。 点左侧的 插件,再点 添加插件,在「包名或地址」一栏输入:

    dsh-theone
    

    点安装,等它跑完。

  3. 开始用。 左侧会多出一个 TheOne · 主聊天。点进去,把你手头的事一件件说出来就行:今天的工作、周末的旅行、要写的论文……不用新建会话,也不用起名字。

  4. 以后更新。 有新版本时,TheOne 入口右边会出现一个下载图标,点一下就装好,一般不用重启;话题都在数据库里,不受影响。

  5. 不想用了? 在插件页卸载即可。你原来的 DSH 会话都还在,TheOne 只是帮你整理,从来不删它们。

可能遇到的小状况

  • 提示版本「太新」、装不上: DSH 默认只安装发布满 24 小时的版本,这是它的安全规则,不是出错。可以等一天再装,也可以改填 GitHub 地址 https://github.com/YunongDai2005/dsh-theone,马上就能装。
  • 装完左侧没看到 TheOne: 重启一下 DSH。
  • 遇到问题: 在 话题工作区 右上角点「反馈问题」,会自动带上版本和诊断信息(不含聊天内容),点「发送」即可,不需要打开 GitHub。也可以发邮件到 [email protected],有截图更好。
  • 会不会很费钱: 每条消息多一次很短的分类调用(不开深度思考),「好的」「继续」这类连这次调用都省了。第一次整理旧会话时,会话多的话会用掉一些额度;不需要可以在设置里关掉「历史整理」。
命令行安装与其他方式
  • npm:dsh plugin --profile web add dsh-theone --ignore-scripts(桌面端把 web 换成 desktop)
  • GitHub(总是最新的 main):dsh plugin --profile web add github:YunongDai2005/dsh-theone --ignore-scripts

从 npm 安装的新版本要发布满 24 小时才装得上;遇到这种情况,更新按钮会说明原因,并可以只为 TheOne 放行、立即安装。

非官方社区项目,由社区成员独立维护,与 DeepSeek 不存在隶属或背书关系。

它分得有多准

口说无凭,我们做了一套公开评测 InterleaveBench:模拟一个人在同一个对话框里同时推进 3–5 件事(旅行、记账、论文、健身……),中英文各半,共 50 段对话、2466 条消息,每条属于哪件事都事先定好。下面是用 TheOne 自己的路由代码和 DeepSeek V4.1 Flash,在其中 40 段开发集上逐条重放的结果(连人都分不清的消息不计分):

做法 分对的比例
TheOne,事先给好话题列表 91.6%
TheOne,从零开始边聊边建话题(就是你第一次用的样子) 86.6%
关键词检索(BM25),事先给好话题列表 73.3%
什么都不分,全塞进一个会话 44.5%
关键词检索,从零开始 39.9%
每句话都开一个新话题 9.8%

几个值得一说的数字:

  • 把一件事的消息放进另一件事的话题(最伤上下文的那种错):从零开始时约占 3.7%。
  • 现在最主要的毛病是太爱开新话题:同一件事平均被拆成 2.1 个话题。0.3.21 的路由卡片就是冲着它去的。
  • 整套评测花了大约 1 美元。数据、代码和打分脚本都在 eval/,可以自己复现,换成别的模型也行。

评测数据是模型按剧本生成的,而且这一版还没有助手回复,所以它衡量的是「能不能分对」,不代表真实聊天体验的全部。

接下来

TheOne 现在先在 DeepSeek Harness 上打磨:DSH 的后台会话、工具、压缩都能直接复用,适合先把「一个对话框聊所有事」做扎实。

近期在做的:

  • 分得更准:连着发的几句话合在一起看、分开判断;测出路由卡片到底带来多少提升。
  • 话题之间互通确认过的要点:比如预算、日期、文件位置,换了话题也能用上最新的值。目前是实验功能,评测达标后才会默认开启。

等它足够稳定,下一步会走出 DSH:

  • 一个独立的客户端:统一接口,背后接不同的模型和服务,打开就是一个对话框;
  • 或者各个平台的适配版本:把同样的「自动分话题」带到你已经在用的聊天工具里。

两条路先走哪一条,取决于大家更需要哪个。有想法的话,欢迎在 Issues 里说一声,或者发邮件到 [email protected]。

它是怎么工作的

分配话题。 每条消息先判断:接着当前话题、回到某个旧话题,还是开个新的。默认用你选的模型做一次简短分类(关闭深度思考,最多 2048 token),候选话题由 DSH 全文搜索召回。

  • 没有匹配就直接开新话题,不会问你「是不是新话题」;只有你明确提到一段找不到的旧聊天,或者确实分不清是哪一件时才追问。
  • 一句话同时用到几件事时,交给真正做事的那件,其余作为参考带上。
  • 「好的」「继续」直接接着当前话题,不等判断;只发图片或文件也接着当前话题。
  • 分类调用失败时改用规则判断,拿不准就留在当前话题。规则模式(THEONE_ROUTER_MODE=rules)完全不调用模型。

话题联动。 后台开始工作时会收到一份参考简报,没有新内容就不发:

  • 刚切换话题时,附上主聊天最近几轮,「把刚才那个……」能接上;
  • 相关话题自上次以来的变化:最近一次压缩摘要(注明截至时间)和之后的进展;
  • 各话题的约束,原样附上,每次都带。

简报标注为参考资料而非指令;需要细节时,后台可以用 theone_read_topic、theone_search_history 去查。联动范围可选「自动学习」(默认)、「仅同一工作区」或「关闭」。在目录里可以手动关联或解除关联、把话题标记为「不共享」,你的设置永远优先。

话题目录。 每个话题显示最新进展和约束。点 管理 可以重命名、改摘要和约束、移到别的工作区、合并、删除,或把已有的 DSH 会话关联为可检索的历史;+ 新话题 手动新建。最近的话题分配 列出每条消息去了哪里、原因、所用模型和耗时。历史较多时,第一次整理需要一些时间和 API 额度;设置 THEONE_HISTORY_CATALOG=false 可关闭。

TheOne 主聊天与话题工作区

设置

右键左侧的 TheOne 按钮,选择 设置。保存后立即生效,只有历史整理相关的设置需要重启 DSH。

设置 说明
话题提示 主聊天里怎样显示话题切换:隐藏、仅切换时显示一行(默认)、每条都显示并注明原因
联动范围 自动学习(默认)、仅同一工作区、关闭
共享已确认的要点(实验) 默认关闭。话题之间只共享用户亲自确认过的要点(数字、决定、文件位置),带版本和出处;要点改了或撤回了,用到它的话题会收到提示。重启 DSH 后生效
自动记录要点(实验) 默认关闭。开启共享后,每轮结束多用一次小模型调用,补记后台会话没记下的要点;只有用户确认过的才会共享
模型 跟随 DSH(默认),或从 DSH 已配置的模型中固定后台模型;固定的设置优先于主聊天里的选择
路由方式 LLM 判断(默认)或规则判断
历史整理 开关与补扫间隔
内容限制 话题资料长度;后台每一步回复的长度(含思考)
人工话题目录文件 可选的 JSON 话题目录,保存时导入

数据库位置和主入口标识会让 TheOne 换用另一份数据,只能用环境变量 THEONE_DATABASE_PATH、THEONE_GATEWAY_KEY 设置。另外可选:THEONE_CONTEXTS_PATH,以及须一起设置的 THEONE_WORKER_PROVIDER / THEONE_WORKER_MODEL。

数据与隐私
  • 原始对话和工具结果由 DSH 保存;TheOne 只在自己的 SQLite 数据库($DSH_HOME/theone/contexts.db,默认 ~/.dsh/theone/)里保存目录、摘要、关联和路由记录。
  • 发给路由和写进参考简报的内容会去掉 API Key、密码等敏感信息。
  • 标记为「不共享」的话题,不会出现在其他话题的简报、最近对话和查阅结果里。
  • 作者发布的公告从 https://yulid.org/theone/notice.json 读取,只是一次普通的下载,不发送你的任何数据;可以在设置里关闭。
  • 反馈问题(话题工作区右上角,或「最近的话题分配」里每条的「报告问题」)只在你点「发送」时才发出,发送前能看到全部内容。默认只含版本、设置、路由的错误码和耗时,不含聊天内容;报告某条回复时,勾选后才附上那条消息和回复的原文。报告发到 feedback.yulid.org,只用于排查问题,90 天后自动删除;想删掉已发的报告,写信到 [email protected] 并附上编号。
  • 主聊天变长时,DSH 通过 TheOne 压缩它:常用话题保留较长摘要和最近几轮,不常用的只保留简短状态,不额外调用模型。
  • 更新由 DSH 的插件管理器安装,并就地重新加载 TheOne;不支持插件热加载的 DSH 会在下次启动时生效。
已知限制
  • 同一时间只处理一个请求:回答进行中发的消息会当作对当前话题的补充,想说别的事,等这一轮结束再发。
  • 新话题的文件默认写在 ~/.dsh/theone/gateway,暂时不能指定项目目录。
  • 主聊天保存了工具调用的副本,长期使用记录会变大;入口日志轮换尚未实现。
  • 主聊天身份按浏览器保存:换浏览器或桌面端会出现另一个主聊天,话题仍然共用。同一数据库同时只应由一个 DSH 进程使用。
  • 图片输出尚未转发;没有向量检索;暂不支持拆分话题。
  • 主聊天里的工具卡片只显示、不执行,这依赖 TheOne 位于 DSH 工具流程的最前面;其他插件也抢到最前面时可能看到这些镜像调用,但工具不会执行两次。
开发
git clone https://github.com/YunongDai2005/dsh-theone.git
cd dsh-theone
npm ci --ignore-scripts
npm run typecheck
npm test

测试使用真实的 DSH 运行时(AgentLoop、Session、SQLite、JSONL 持久化、压缩),只模拟模型,不调用外部 API。npm run pack:plugin 生成安装包;npm run install:local 和 npm run start:local 会在 ~/.dsh-theone 启动一个独立的 DSH profile。

服务接口:ctx.theone.searchHistoryDetailed(contextId, query, limit) 检索话题的已审核历史;store.addSource(contextId, sessionId, { startSeq, endSeq }) 关联会话的一部分。旧版本验收记录见 v0.1 和 v0.2。

🥚

恭喜,你找到了彩蛋。

在评测里,TheOne 犯过一个很有人味的错:用户说「咖啡店秋季新品本来定 9 月 25 上,现在想推到 10 月 8 号」,它把这句话放进了「国庆云南六日游」,因为都在十月。

我们还在调教它。如果你也被它分错了,在主聊天里说一句「分错了」就行,它会记住,不会生气。


觉得有用的话,点个 ⭐ 让更多人看到。遇到问题或有想法,欢迎 提 Issue,打不开 GitHub 就发邮件到 [email protected]。