主动型 AI
AI 找你,不是你找 AI。
ChatGPT、Claude、Gemini——每个 AI 助手都在等你打开它。打开浏览器、登录、点开输入框、敲字、等回答。AI 是一个你必须主动走过去的东西。
MateClaw 不是。
你可以让任何一个 Agent 在任何一个时间,去任何一个聊天软件里,主动找你。
每天早上 9:00:日报 Agent → 飞书研发群
每周一 10:00:销售数据 Agent → Slack 频道
凌晨 4:00 失败的任务 → 执行助理 Agent → DingTalk 私聊这是从「对话型 AI」到 主动型 AI 的升维。我们叫它 Ambient AI——环境式 AI。它不在某个浏览器标签页里等你,它在你的工作流里。
它在做什么
三件事串在一起:
- Cron Job——一个能跑 Agent 的调度器(
mate_cron_job、mate_cron_job_run两张表) - Agent 跑一遍——触发时间到了,调度器拉起 Agent 上下文,跑一整套工具链(搜索、抓取、读 Wiki、查数据库⋯)
- 结果通过渠道交付——Agent 的输出走
CronJobCompletedEvent→CronDeliveryListener→ChannelCronResultDelivery,落到你预设的渠道
整个过程没有人值守。你设置完,AI 就开始按时上班。
三个典型用法
一、每日简报
每天早上 9 点,竞品监控 Agent 跑一遍:搜索昨天发了什么 release、读 5 个目标公司的官博、对比 24 小时内的差异,把最重要的三件事写成 Markdown,推送到飞书研发群。
Cron 表达式 0 0 9 * * ? · Agent: 竞品监控 · 渠道: 飞书 - 研发群
你坐进地铁,手机弹出消息,三件事看完。到工位之前你已经知道今天要追什么。
二、周报汇总
每周一上午 10 点,销售助理 Agent 查上周的订单数据库、抽出关键指标、写一份带表格的周报,推送到 Slack 频道。
数据来自 数据源工具,Agent 自动写 SQL 并解释结果。Wiki 里如果有过往周报,会被自动引用做对比。
三、事件触发
邮件来了带「老板」标签 → 执行助理 Agent → 总结邮件主旨 + 草拟回复 → 推送到微信。
事件触发用 cron 高频轮询 + 触发条件,或者用 MCP 工具 接外部 webhook。Agent 跑完通过同一条交付链路落到渠道。
怎么配
控制台 → 定时任务 → 新建 三步:
- Cron 表达式——什么时候跑(标准 6 段 cron,UI 里有图形化编辑器)
- Agent——选一个已经配好工具和系统指令的 Agent
- 结果交付——选一个 渠道 作为输出(飞书 / 钉钉 / Slack / 企业微信 / Telegram / 任意已配置的渠道)
保存。下次触发时间一到,Agent 就开始上班。
别配 100 个 cron
和模型管理一样——你不需要 100 个定时任务,你需要一个真的有用的。先做"早上 9 点的简报",跑两周,看一下哪些信息你真的会读,哪些是噪音,再加第二个。
为什么这件事重要
整个 2025–2026 年,AI 圈在追同一个目标——不需要你打开屏幕。
- Vision Pro 想让 AI 在你视野里出现,没做成
- Humane AI Pin 想让 AI 在你身上出现,崩了
- Echo / Alexa 当年想让 AI 在你家里出现,停留在天气预报
它们都试图用一个新硬件去解决这件事。
MateClaw 的答案是:你团队已经在用的所有聊天软件,就是那个"硬件"。
飞书、钉钉、企业微信、Slack、Telegram、Discord、QQ——你早就开着。AI 出现在你已经看的地方,就足够了。不需要新设备,不需要新习惯。
它和别的 AI 产品有什么不一样
| 对话型 AI | 主动型 AI(MateClaw) | |
|---|---|---|
| 触发方式 | 你打开它 | 它在该出现的时间出现 |
| 在哪 | 一个浏览器 tab | 你已经在用的 IM |
| 什么时候说话 | 你问它才说 | 你需要时它就说 |
| 离线时 | 错过 | 等你上线就推 |
| 失败时 | 红色 error | 自动重连,下一次正常推 |
最右那一列只有 MateClaw 完整实现了——因为只有 MateClaw 同时有:
- 多 Agent 引擎(ReAct + Plan-Execute)
- Cron 调度 + 失败重试
- 9 个 IM 渠道适配器(每个都有指数退避重连)
- 持久化记忆(Memory,Dreaming 之后越用越懂你)
- Wiki 知识层(LLM Wiki,让调研有依据)
- Tool Guard(Security,敏感操作问你一句再执行)
Cron 是最后一块拼图——把上面这堆能力翻译成时间触发。
安全考虑
主动 = 需要更严格的权限控制。一个 cron 触发的 Agent 跑得没人盯着,它能调什么工具就直接调,没有"我再确认一下"的机会。
所以:
- Cron Agent 不会绕过 Tool Guard——需要审批的工具调用照样卡在那里,等你在 IM 里点一下批准,Agent 才继续。详见 审批工作流
- 不想被打断的,把敏感工具配成
deny而不是require_approval——让它在权限之外的地方直接停下,不发审批通知 - 每次 cron 执行都进审计日志(
mate_audit_event)——哪个任务在什么时候、用什么工具做了什么,全有记录
底层数据(如果你好奇)
| 表 | 用途 |
|---|---|
mate_cron_job | 每个定时任务一行——Agent ID、cron 表达式、目标渠道、超时、启用开关 |
mate_cron_job_run | 每次执行一行——开始/结束时间、状态、输出摘要、错误信息(如有) |
代码组织:
vip.mate.cron.service.CronJobLifecycleService—— 任务生命周期管理vip.mate.cron.service.CronJobRunner—— 单次执行vip.mate.cron.delivery.ChannelCronResultDelivery—— 把 Agent 输出落到渠道vip.mate.cron.delivery.CronDeliveryListener—— 监听CronJobCompletedEventvip.mate.cron.CronChatOriginFactory—— 构造 cron 来源标记,会话能查到这条对话来自哪个定时任务
API
# 列出所有定时任务
curl http://localhost:18088/api/v1/cron-jobs \
-H "Authorization: Bearer <token>"
# 立刻试跑一次(不影响下次定时触发)
curl -X POST http://localhost:18088/api/v1/cron-jobs/{id}/run \
-H "Authorization: Bearer <token>"
# 查看单个定时任务的执行历史
curl http://localhost:18088/api/v1/dashboard/cron-runs/{id} \
-H "Authorization: Bearer <token>"
# 查看当前工作区最近执行历史
curl http://localhost:18088/api/v1/dashboard/cron-runs \
-H "Authorization: Bearer <token>"