交代一句,它在后台做完。需要你的时候,才来找你。
项目首页 | 下载 | 设计文档 | dsh-superagent | 问题反馈
📌 一个例子 · ⏳ 后台任务 · 📋 规则 · 🙋 需要你 · 🔕 不打扰 · 💰 权限与花费 · 🧭 设计原则
聊天机器人等你开口,答完就停。可很多事不是一问一答:调研要跑半小时,价格要每天盯,周报每周一要写。你想交代一句就去忙别的,有结果、要你拍板的时候再听它说。
AnyModelBot 的超级智能体做的就是这件事。它由三样东西组成:
| 是什么 | 例子 | |
|---|---|---|
| 后台任务 | 交代给机器人的一件事。有自己的会话和文件夹,做完把结果发回你发起的那段对话 | 「帮我调研三家云的 GPU 价格,做个对比」 |
| 规则 | 你用一句话写下的长期吩咐,按时间表去做,有值得说的才告诉你。想先看看,可以让它先观察 | 「每天早上 8 点看看 X 的价格,低于 200 告诉我」 |
| 需要你 | 所有机器人在等你回答、批准或处理的事,集中在一处。没事时不占地方 | 「「GPU 价格调研」在等你回答:报告用中文还是英文?」 |
三样东西背后是同一条原则,来自 DeepSeek 的 dsh-superagent 原型:占用尽量少的注意力,带来尽量多的价值。 一个能替你干活的智能体,也能把你的注意力耗光。所以它只在你要求、或你写下的规则允许时才动手,只在你必须决定、或能用上结果时才开口。
和 AnyModelBot 的其他部分一样,这一切跑在你自己的电脑上,任意模型都能用,按量付费。
周一上午,你在微信里:
10:02 你 帮我调研一下三家云的 A100 价格,做个对比表
10:02 天天 好,后台开始调研三家云的 GPU 价格,好了告诉你,你可以继续聊别的。
10:05 你 明天北京天气怎么样?
10:05 天天 明天晴,最高 18 度……
10:12 天天 ❓「GPU 价格调研」想问你:B 云的报价要登录才能看,先跳过它吗?
1. 跳过
2. 我发你截图
不回复就按跳过做
(回复编号,或引用这条消息回答)
10:43 天天 GPU 价格调研好了:A100 包月最便宜的是 X 云,约 ¥7,800,对比表已发给你。
B 云要登录,先跳过了。引用这条消息可以继续问。
10:50 你 「引用:GPU 价格调研好了…」再加上 H100,改成英文
10:50 天天 收到,「GPU 价格调研」继续。
这段对话里:
- 机器人判断这件事要跑一阵子,开了后台任务。确认就是那句回复,没有多发一条。
- 任务在自己的会话里跑,聊天照常,天气问题不用排队。
- 报告用什么语言、表格怎么排,它自己定。只问了一个它确实解决不了的问题,还带着默认答案;问完没有停下来等,你没回,它就按默认跳过了 B 云,在结果里说了一声。进展一条也没推给你。
- 结果回到你发起的那段对话。引用它,就是接着问这个任务。
要是晚上 11 点才做完,结果会留到早上 8 点再发。要是你 24 小时没在微信里说话,结果先留着,桌面端看得到,你下次发消息时一起送到。
怎么开始。 不用学命令。要跑一阵子的事,比如调研、做报告、写代码、整理文件,机器人会自己放到后台,并在回复里说一句。你也可以直接说「后台做」;想留在聊天里做,就说「前台做」。
各干各的。 每个任务有自己的智能体会话和文件夹(tasks/<名字>-<编号>/),沿用开始时的模型和权限。聊天永远不等任务:每个机器人同时跑 2 个后台任务,所有机器人合计 4 个。你回答了任务的问题,它会插到队伍最前面。
接着问。 三种方式找到同一个任务:
- 微信里引用它发来的结果或问题;
- 飞书里回复那条消息,结果都回在你的请求下面;
- 在任何地方点名:「GPU 那个改成英文」。
任务还在做,你的话会在它的下一步送到;已经做完或失败了,就在同一个任务里接着做,文件和上下文都还在。
很少问你。 语言、格式、范围这类事,机器人自己定,在结果里说一句选了什么。只有三种情况才问:猜错会造成损失、花钱或白做大半;需要只有你才有的东西,比如登录、文件、密码;这一步不可撤回,比如付款、删除你的数据、替你给别人发消息。
真要问时分两种:
- 有默认答案的,比如上面的「B 云要登录,先跳过吗」:马上问你,附一句「不回复就按跳过做」,然后接着做不依赖答案的部分。你的回答在它的下一步送到;你一直没回、它先做完了,就按默认做,在结果里说一声,那个问题自动收回。之后再引用那条问题回答,任务会接着改。
- 只有你能定的,比如付款、删除:同样马上问你,然后停下来等。
所以晚上 11 点交代的任务,不会因为一个问题空等到早上。
状态一眼看懂。
| 状态 | 意思 |
|---|---|
| 进行中、排队中 | 在做,或在等空位 |
| 进行中,有个问题等你回答 | 问了你一个有默认答案的问题,没停下来 |
| 等你回答、等你批准 | 有一个只有你能定的问题,或一次越界操作,在等你 |
| 预算用完 | 花到了预算,停下来问你要不要继续 |
| 失败 | 自动重试过还是没做成,告诉你卡在哪 |
| 未送达 | 结果没能送到你那里,比如微信窗口关了 |
| 已完成、已停止 | 做完了,还能接着问;或者你让它停了 |
重启了也不乱。 应用退出或崩溃时正在跑的任务,下次启动会接着做,并先收到一条说明:上一步可能没做完,哪些后台命令被停了。任务做会改变外部的事(发送、发帖、付款、删除)之前和之后,各在 .task/journal.md 记一行;恢复时先看日志和外部系统,再决定要不要重做。机器人自己发出的消息,只会发一次。
在聊天里管。 发 /tasks 列出后台任务和规则,发 /stop 编号 停掉一个。
规则是你用一句话写下的长期吩咐,加一个时间表。在聊天里说就行:
每天早上 8 点看看 X 的价格,低于 200 告诉我
机器人建好规则,回你一句:
已建好规则:每天 08:00 看 X 价格,有值得说的就告诉你。
规则建好就按时去做,不用你再确认一遍:你说的话就是授权。
两种规则。
- 检查:到点让智能体去看、去判断,有值得说的才说。
- 提醒:「明天下午 3 点提醒我开会」。话和时间都是你定的,到点直接发,不调用模型。
时间表可以是一次、每天、每个工作日、每周几、每隔 N 分钟(至少 15 分钟),或者 cron。界面上会翻译成话,比如「每个工作日 08:00(Asia/Shanghai)」。
想先看看? 说「先观察」,或者在规则编辑器里选观察。观察中的规则照常按时运行,区别在这里:
| 观察 | 执行 | |
|---|---|---|
| 按时运行 | ✅ | ✅ |
| 文件 | 只读 | 最多可写自己的工作区 |
| 给你发消息 | 从不 | 按不打扰的规矩发 |
| 需要批准的操作 | 自动拒绝,记下「需要批准:…」 | 进「需要你」,1 小时没批就算这次失败 |
| 运行记录写什么 | 本会发送、本会保持安静、本会做 | 已发送、保持安静 |
运行记录让你判断它靠不靠谱:
今天 08:00 本会发送:“X 降价了,现在 ¥199(昨天 ¥259)” 约 $0.03
昨天 08:00 本会保持安静(¥259) 约 $0.02
前天 08:00 失败:页面打不开 约 $0.01
10/27 08:00 跳过:电脑没开
先观察的规则满 3 次正常运行,「需要你」里会出现一条「规则「看 X 价格」已观察 3 次,需要你来决定是否执行」,下面是它最近一次本会发送的话,点 [改为执行] 或 [继续观察]。这条不推到微信、飞书。选了继续观察,这一版规则不再问;改了规则的原话,再满 3 次会重新问。
不追旧账。 电脑关着错过了时间:错过不久的,开机补跑一次;太久的记为「跳过:电脑没开」,不会一口气补一堆。连续失败 3 次的规则自动暂停,出现在「需要你」里。
观察保证什么。 不通过 AnyModelBot 给任何人发消息,也不改文件,因为沙箱是只读的。它拦不住命令行工具自己联网,这一点界面上也写明了。
所有机器人等你处理的事,都在侧栏的「需要你」这一行。没有要处理的事时,这一行不出现。
需要你
● 天天的「GPU 价格调研」在等你回答 2 分钟前
B 云的报价要登录才能看,先跳过它吗?
不回复就按跳过做
[跳过] [我发你截图] [回复…]
● 天天的「清理旧构建」在等你批准 5 分钟前
rm -rf build/
[批准一次] [拒绝]
● 哒哒的规则「每日价格巡检」连续失败 3 次,已暂停 08:00
页面打不开:网站可能改版了
[查看规则]
● 天天的规则「看 X 价格」已观察 3 次,需要你来决定是否执行 08:00
本会发送:“X 降价了,现在 ¥199(昨天 ¥259)”
[改为执行] [继续观察]
会出现在这里的有:任务的问题和批准、失败、预算用完、没送到的结果、连续失败的规则、先观察且观察够了的规则、过期的微信登录。每一行自带操作,不用跳走。
在哪回答都行。 微信里回编号或引用问题,飞书里点卡片按钮,桌面上点「需要你」里的按钮。在一处答了,别处的同一个问题自动收回,不会再推给你。
桌面通知只用于「需要你」里的事,只在窗口不在前台时弹,每件事最多一次。
只推三种消息:
| 推送 | 什么时候 | 从不推 |
|---|---|---|
| 能用的结果 | 任务做完;执行中的规则发现了值得说的 | 进展、「还在做」、半成品、重试、重启恢复 |
| 要你做的决定 | 任务的问题或批准,一个对话一次只推一个 | 能按合理默认处理的问题;重复问同一个问题 |
| 要你处理的失败 | 任务自动重试后仍失败;规则连续失败后暂停 | 一次性的网络错误;智能体自己能绕过去的问题 |
另外几条规矩:
- 一条就够。 每条推送一行,不超过 300 字,不带内部编号和技术细节。想看详情,引用它接着问,或者在桌面端打开。
- 免打扰。 默认 22:00 到 08:00,这段时间的结果和规则提醒留到早上再发。你 10 分钟内刚说过话,说明你醒着,就不拦。时段可以在设置里改。
- 每天有上限。 每个对话每天最多主动发:微信 3 条,飞书 5 条。超出的合成一条摘要,第二天早上发。
- 挨着的合成一条。 2 分钟内要发的几条,合成一条摘要,一项一行。
- 随时暂停。 机器人设置 › 主动消息 ›「暂停后台工作」:任务、规则和主动消息都先停下,聊天照常。也可以直接跟机器人说一声。
微信只允许机器人在你最近一次发消息后的 24 小时内给你发消息,每次最多 10 条。AnyModelBot 把这当成硬规矩,不去绕:
- 留着,不丢。 发不出去的结果先留着,桌面端「需要你」里看得到,也会弹一次桌面通知。
- 你一开口就送到。 你下次在微信里发消息,留着的先合成一条「你不在时:…」发给你,然后才是这次的回复。
- 到期前提醒一次。 窗口关闭前约 2 小时,如果之后还有东西要发给你,机器人会说一句:「接下来还有 2 条提醒要发给你(明早 8:00 天气、周一 9:00 周报)。回个「ok」我就能继续按时提醒你。」每个窗口最多一次,免打扰时不发,没东西要发就不发,可以在设置里关掉。
- 给结果留配额。 有任务在跑时,会给结果预留发送次数,聊天回复不会把配额用光。
- 建规则时就说清楚。 发到微信的规则,建的时候就告诉你这个限制。对时间敏感的提醒,建议发到飞书或桌面。
飞书没有这个限制。应用关着的时候飞书里发来的消息,下次启动会补收,需要给飞书应用开 im:message.history:readonly 权限。
推送很少,但你随时可以看。信息面板的「任务」组列着这个机器人的任务和规则;一个都没有时,这一组不出现。
点开一个任务:
GPU 价格调研 [停止]
● 已进行 12 分钟,有个问题等你回答
来自 微信 · 今天 10:02「帮我调研一下三家云的 A100 价格…」
问题 B 云的报价要登录才能看,先跳过它吗?
不回复就按跳过做
最新进展 已比较 3 家,正在核对 B 云的包年价
预算 约 $0.08 / $1.00 [改]
文件夹 tasks/gpu-prices-3f2a1c 2.1 MB [打开]
第 1 次运行,已进行 12 分钟 ▸
- 来自:哪个渠道、什么时候、你的原话。点一下回到那段对话。
- 处理过程:每次运行的每一步,读了什么、跑了什么命令,折叠着,想看再展开。
- 导出:任务和规则的完整记录,都能导出成 Markdown。
聊天里发起任务的那条消息下面,也有一个小标签「后台任务「GPU 价格调研」进行中」,点开是同样的详情。
在聊天里也一样:机器人干活时在步骤之间说的话,按顺序显示在回复里;读了什么、跑了什么命令,折叠在「处理过程」里。它交付的文件点一下就打开,桌面版用系统默认程序,网页版在新标签页;图片直接显示在对话里,点开看大图。
权限只会收紧,不会放大。
| 谁在干活 | 能动什么 | 越界操作 |
|---|---|---|
| 聊天 | 机器人的权限档位 | 聊天里弹审批卡片 |
| 后台任务 | 建任务那一刻机器人的权限档位 | 进「需要你」,12 小时内有效 |
| 观察中的规则 | 只读 | 自动拒绝,记下来 |
| 执行中的规则 | 最多可写工作区,完全权限的机器人也一样 | 进「需要你」,1 小时内有效 |
递归删除这类危险操作,不管什么档位,都会先问你。
每件事都有预算。 花费按 Modelflare 的公开价格估算,标着「约」,以账单为准。
| 默认预算 | 花到了怎么办 | |
|---|---|---|
| 后台任务 | $1.00 | 停下来问你:「已用约 $1.00,再给 $1 继续?」 |
| 规则每次运行 | $0.10 | 这次停下,记一次失败 |
| 规则每月 | $3.00 | 暂停到下个月 1 号,或者你在「需要你」里再给 $3 |
- 任务每次运行最长 4 小时,等你回答的时间不算;规则每次最长 15 分钟。
- 给机器人设了 Modelflare 预算时,余额低于 20%,后台工作先停下,剩下的留给聊天。
- 没有公开价格的模型不估算花费,只受时间限制。
- 预算可以在任务详情和规则编辑器里改。
用完会清理。 任务和运行记录保留 30 天。任务文件夹 30 天没动过会自动清理,不打扰你;任务详情里提前几天就显示清理日期,点「保留」就再留 30 天。
这几条改编自 dsh-superagent 的设计哲学。界面上的每一处取舍,都照它们来:
- 占用尽量少的注意力,带来尽量多的价值。 每条消息、每个通知、每个设置、每个面板元素,都要说得出自己为什么存在。
- 只在被要求、或你写下的规则允许时才动手。 你的话就是授权,不用再确认一遍。
- 只在你必须动手、或能用上结果时才开口。 能自己定的自己定,说一句选了什么;真要问,一次只问一个具体的问题。老实汇报:草稿不是「做完了」,失败就是失败。
- 概念少,设置少。 一个值适合几乎所有人,就用默认值。你用话描述的行为,写成提示词,而不是做成开关。
- 一切正常时,什么都不显示。
flowchart LR
M[你的消息] -->|聊天智能体判断| T[后台任务]
R[规则] -->|到点| RUN[一次运行]
T --> RUN
RUN --> REP[结构化汇报]
REP -->|做完| D[发回原来的对话]
REP -->|要你决定 / 失败| A[需要你]
A -->|你回答| T
- 应用说了算。 任务、时间表、送达和预算都由 AnyModelBot 自己管,DeepSeek Harness 只负责跑会话。每个机器人一个智能体进程,任务和规则在里面各开各的会话。
- 结构化汇报。 后台会话用
task_report工具汇报状态:进展、要你、做完、失败,附一句给你看的话,最多一个问题。「需要你」看的是这些字段,不去猜自由文本。 - 时间表在应用里。 规则的定时由应用管,智能体进程没起来也照样到点;电脑睡眠醒来后会重新计算。
- 送达走发件箱。 每条主动消息先存到本地再发,按渠道的规矩排队、合并、留存。重启后接着发,发过的不会再发。
- 小内存也能长期跑。 智能体进程开过很多会话后,会在完全空闲时重启一次,把积累的内存还回去,不打断任何工作。
完整的设计见设计文档(英文)。
DeepSeek 开源的 dsh-superagent 是一个面向团队、盯着一个 GitHub 仓库的主动编程智能体,配套文章是《Exploring Super-agent Design: Towards a More Autonomous Agent System》。AnyModelBot 是一个人的助手,所以我们拿来了它的骨架,留下了只有团队才需要的部分。
| dsh-superagent | AnyModelBot |
|---|---|
| 工单的阶段表,第一条匹配的算数 | 任务的状态表 |
| 重启后标记中断,附一条恢复说明,从最老的开始恢复 | 任务重启后接着做 |
| 给人的消息留一个专用位子,排在新任务前面 | 你回答问题时,任务插到最前面 |
| 后台命令跑完前占着位子,命令结束时唤醒会话 | 任务做完前的「收尾」 |
| 接受模式里的「观察」:只记下本会接受什么 | 规则可选的观察模式 |
| 一个结构化的问题,原样转给人 | task_report 的问题,进「需要你」 |
| 只为「做好了、要决定、做不了」发消息,一句话,不报进展 | 不打扰的规矩 |
| 面板先回答「现在有什么要我处理」,正常时不占地方 | 「需要你」 |
没有拿的:Source、Trigger、Thread、Eval、Mandate 复核、Subscription、GitHub PR 生命周期和 Policy 版本。一个人的助手只听主人明确说的话,「要不要放到后台」由聊天智能体判断,这就是它的 Eval。
这是我们正在探索的方向,不是承诺。
每个人要盯的东西都不一样,所以 GitHub 这类集成不该写死在核心里。我们打算把它做成工作负载:一份你自己配置的组合,写明
- 听什么:一个事件来源,比如某个 GitHub 仓库的新 issue;
- 怎么处理:用话写的规则;
- 准备什么:任务文件夹怎么准备,比如先拉一份代码;
- 发到哪:结果回到哪段对话。
GitHub 会是第一个模板。规则已经留好了「事件触发」的接口,工作负载会建在它上面。设计会先公开讨论,再动手。
- 下载 AnyModelBot,登录 Modelflare。
- 在应用、微信或飞书里,交代机器人一件要跑一阵子的事,或者直接说「后台做」。
- 说一句「每天早上 8 点……」,建一条规则,有值得说的它会告诉你。
Note
功能是否可用取决于你选择的模型、操作系统和授予的权限。花费都是估算,以 Modelflare 账单为准。微信的主动消息受 24 小时窗口限制,见上文。
AnyModelBot 以 MIT 许可证发布。