TheOne

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

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

English | 简体中文

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

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

--- 你的 DSH 侧边栏里是不是躺着几十个会话?想回到上周那件事,得一个个翻;懒得新建,就在一个会话里什么都聊,结果上下文越聊越乱,压缩一次细节就没了。 如果你也说过下面任何一句,TheOne 大概就是为你写的: - 「之前聊过的那个在哪来着?」:对话太多,旧会话找不到 - 「懒得新建了,就在这儿接着问吧」:结果一个会话越聊越杂 - 「我不是跟你说过了吗?」:AI 忘了之前聊过的内容 **TheOne 的做法:** 你只在一个主聊天里说话,它在后台替每件事开一个独立的会话,把每句话送到该去的地方。 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 主聊天与话题工作区](https://raw.githubusercontent.com/YunongDai2005/dsh-theone/main/docs/images/theone-topic-workspaces-en.png)
设置 右键左侧的 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。