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

先问显卡,再问旅馆,然后接着问显卡,中间没有任何提示语。左边的两个话题是它自己建的,什么都没点。(示例对话)
---
你的 DSH 侧边栏里是不是躺着几十个会话?想回到上周那件事,得一个个翻;懒得新建,就在一个会话里什么都聊,结果上下文越聊越乱,压缩一次细节就没了。
如果你也说过下面任何一句,TheOne 大概就是为你写的:
- 「之前聊过的那个在哪来着?」:对话太多,旧会话找不到
- 「懒得新建了,就在这儿接着问吧」:结果一个会话越聊越杂
- 「我不是跟你说过了吗?」:AI 忘了之前聊过的内容
**TheOne 的做法:** 你只在一个主聊天里说话,它在后台替每件事开一个独立的会话,把每句话送到该去的地方。
每件事在自己的会话里推理、调用工具、压缩上下文;你看到的始终是一个普通的对话。
## 为什么值得一试
0.3.36 新增「持续任务」:在本机跟进公开 GitHub PR / CI,有变化时通知主聊天;支持暂停、取消、重启恢复及有证据的异步记忆整理。使用与限制见[持续任务说明](./docs/persistent-work.md)。
| | 平时的用法 | 装了 TheOne |
| --- | --- | --- |
| 开始一件新事 | 新建会话、起名字 | 直接说 |
| 回到之前的事 | 在侧边栏里翻 | 直接提,它自己找回来 |
| 一个会话聊杂了 | 上下文互相干扰,压缩后丢细节 | 每件事一份独立上下文 |
| 两件事要结合 | 来回复制粘贴 | 自动把另一件事的进展带过来 |
| 分错了 | 手动挪 | 说一句「分错了」 |
- **和原生会话一模一样**:思考从第一个字起就在原位置,工具卡片、授权、提问、待办、重试、回答中途插话,全都照常。
- **它干活时你可以接着说**:回答进行中发的消息,如果是关于正在做的事,就并进这次回答,和普通 DSH 会话一样;如果是别的事,它的话题马上在后台开始处理,回答按你发送的顺序接在主聊天里。最多三个话题同时干活。
- **在该干活的地方干活**:新话题如果是你某个项目的事,就在那个项目的文件夹里干活;其他的放在 DSH 给「不属于任何项目的聊天」的文件夹里。不会往你侧边栏的项目里加任何东西。
- **相关的事会互通,无关的事互不打扰**:相关话题自动共享进展,哪些话题有关联从你的使用中学;话题的约束(比如「预算数字不能写进论文」)每次原样带上,压缩不会丢。
- **越用越认得你的说法**:每个话题有了回复后,后台会写一张简短的路由卡片(这件事是什么、你会怎么叫它、涉及哪些人名地名和文件),换个说法也能分对。分错了说一句「分错了」,它会记住是哪些词把这类消息连到正确话题。很久没动的话题排在候选最后,「很久」是多久,从你自己回头的习惯里学。
- **旧会话自动变成话题目录**:装上后它在后台读一遍你已有的会话,整理成话题、按工作区分组,点进去就能接着聊。
- **零额外配置**:不用另填 API Key,用的就是你在 DSH 里选好的模型。选中 TheOne 时,模型按钮旁边有一个图层图标,可以查看和切换分配话题、干活各用哪个模型。
## 30 秒装好
想通过 Nebius Token Factory 用 NVIDIA Nemotron 3 Super 运行独立演示,可查看[配置与启动说明(英文)](docs/nebius-demo.md)。
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。也可以发邮件到 [theone@yulid.org](mailto:theone@yulid.org),有截图更好。
- **会不会很费钱:** 每条消息多一次很短的分类调用(不开深度思考),「好的」「继续」这类连这次调用都省了。第一次整理旧会话时,会话多的话会用掉一些额度;不需要可以在设置里关掉「历史整理」。
命令行安装与其他方式
- 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 不存在隶属或背书关系。
## 在手机上用(实验功能)
不在电脑前也能和主聊天说话:在 **TheOne 设置** 里绑定一个聊天软件,之后在手机上发的消息就和在主聊天里打字一样,照常分到话题、在后台干活,回复发回手机。需要你确认的操作和 AI 给的选项也会发过去,回一个数字就行(10 分钟不回按拒绝)。电脑上打开主聊天,看到的是同一段对话。都只认你本人,别人发的消息不会进主聊天。
| 聊天软件 | 怎么绑定 | 说明 |
| --- | --- | --- |
| 微信 | 设置里点「扫码绑定」,用手机微信扫码 | 用腾讯 iLink 接口(和 OpenClaw 微信插件同一套),这是腾讯的私有协议,请遵守微信的使用规范 |
| Telegram | 在 @BotFather 建一个机器人,把 token 填进设置,再扫码(或发 `/start 配对码`)完成配对 | token 只存在这台电脑上 |
| iMessage | 只限 Mac:填你发消息用的手机号或 Apple ID | 需要给运行 DSH 的程序「完全磁盘访问」权限,第一次回复时允许它控制「信息」 |
DSH 开着才能收到消息,电脑睡眠或 DSH 退出时收不到。断网、重启后会自动接着收,不丢也不重复。
## 它分得有多准
口说无凭,我们做了一套公开评测 **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/`](./eval/README.md),可以自己复现,换成别的模型也行。
评测数据是模型按剧本生成的,而且这一版还没有助手回复,所以它衡量的是「能不能分对」,不代表真实聊天体验的全部。
## 接下来
TheOne 现在先在 DeepSeek Harness 上打磨:DSH 的后台会话、工具、压缩都能直接复用,适合先把「一个对话框聊所有事」做扎实。
近期在做的:
- **分得更准**:连着发的几句话合在一起看、分开判断;测出路由卡片到底带来多少提升。
- **话题之间互通确认过的要点**:比如预算、日期、文件位置,换了话题也能用上最新的值。目前是实验功能,评测达标后才会默认开启。
等它足够稳定,下一步会走出 DSH:
- **一个独立的客户端**:统一接口,背后接不同的模型和服务,打开就是一个对话框;
- **或者各个平台的适配版本**:把同样的「自动分话题」带到你已经在用的聊天工具里。
两条路先走哪一条,取决于大家更需要哪个。有想法的话,欢迎在 [Issues](https://github.com/YunongDai2005/dsh-theone/issues) 里说一声,或者发邮件到 [theone@yulid.org](mailto:theone@yulid.org)。
## 它是怎么工作的
**分配话题。** 每条消息先判断:接着当前话题、回到某个旧话题,还是开个新的。默认用你选的模型做一次简短分类(关闭深度思考,最多 2048 token),候选话题由 DSH 全文搜索召回。
- 没有匹配就直接开新话题,不会问你「是不是新话题」;只有你明确提到一段找不到的旧聊天,或者确实分不清是哪一件时才追问。
- 一句话同时用到几件事时,交给真正做事的那件,其余作为参考带上。
- 「好的」「继续」直接接着当前话题,不等判断;只发图片或文件也接着当前话题。
- 分类调用失败时改用规则判断,拿不准就留在当前话题。规则模式(`THEONE_ROUTER_MODE=rules`)完全不调用模型。
**话题联动。** 后台开始工作时会收到一份参考简报,没有新内容就不发:
- 刚切换话题时,附上主聊天最近几轮,「把刚才那个……」能接上;
- 相关话题自上次以来的变化:最近一次压缩摘要(注明截至时间)和之后的进展;
- 各话题的约束,原样附上,每次都带。
简报标注为参考资料而非指令;需要细节时,后台可以用 `theone_read_topic`、`theone_search_history` 去查。联动范围可选「自动学习」(默认)、「仅同一工作区」或「关闭」。在目录里可以手动关联或解除关联、把话题标记为「不共享」,你的设置永远优先。
**话题目录。** 每个话题显示最新进展和约束、它在哪个项目(DSH 工作区)里干活,以及不是普通「进行中」时的状态:**在等你**(它在问你事情,或者重启打断了它的工作)、**搁置**(比你通常回来的间隔还久没动)、**已完成**(你标的;再有消息发给它就重新打开)。状态和话题的执行记录(最近 20 条消息各自怎么结束的)分开保存,由执行记录推出来。**标为完成** / **重新打开** 在 **管理** 旁边。点 **管理** 可以重命名、改摘要和约束、移到别的工作区、合并、删除,或把已有的 DSH 会话关联为可检索的历史;**+ 新话题** 手动新建。**最近的话题分配** 列出每条消息去了哪里、原因、所用模型和耗时。历史较多时,第一次整理需要一些时间和 API 额度;设置 `THEONE_HISTORY_CATALOG=false` 可关闭。

设置
右键左侧的 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 天后自动删除;想删掉已发的报告,写信到 theone@yulid.org 并附上编号。
- 主聊天变长时,DSH 通过 TheOne 压缩它:常用话题保留较长摘要和最近几轮,不常用的只保留简短状态,不额外调用模型。
- 更新由 DSH 的插件管理器安装,并就地重新加载 TheOne;不支持插件热加载的 DSH 会在下次启动时生效。
已知限制
- 判断回答中发的消息是不是关于这次回答,需要路由模型;只用规则路由时,这类消息都会并进当前回答,和以前一样。
- 和你的项目都无关的新话题,在 DSH 自己用来放「不属于任何项目的聊天」的文件夹(`文稿/deepseek-harness/default-workspace`)里干活;没有这个文件夹时,用 `~/.dsh/theone/gateway`。从你已有会话整理出来的话题,照旧在原来的文件夹里干活。
- 主聊天保存了工具调用的副本,长期使用记录会变大;入口日志轮换尚未实现。
- 同一数据库同时只应由一个 DSH 进程使用。
- 图片输出尚未转发;没有向量检索;暂不支持拆分话题。
- 主聊天里的工具卡片只显示、不执行,这依赖 TheOne 位于 DSH 工具流程的最前面;其他插件也抢到最前面时可能看到这些镜像调用,但工具不会执行两次。
开发
```sh
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](./docs/plugin-v0.1.zh.md) 和 [v0.2](./docs/plugin-v0.2.zh.md)。
🥚
恭喜,你找到了彩蛋。
在评测里,TheOne 犯过一个很有人味的错:用户说「咖啡店秋季新品本来定 9 月 25 上,现在想推到 10 月 8 号」,它把这句话放进了「国庆云南六日游」,因为都在十月。
我们还在调教它。如果你也被它分错了,在主聊天里说一句「分错了」就行,它会记住,不会生气。
---
觉得有用的话,点个 ⭐ 让更多人看到。遇到问题或有想法,欢迎 提 Issue,打不开 GitHub 就发邮件到 theone@yulid.org。