# 主动消息与任务 · 让 Agent 主动替你办事

> 技术参考 · 承接《[Agent 能力导航](03-agent-capabilities.md)》。
> 一个真正有用的 Agent,不该只在你开口时才动。它能**主动找你、也主动找别人**,能**定时**做一件事,还能**盯着一个多步骤的目标**推进。这一篇讲清楚这三种主动性怎么用、怎么关,以及它们和 Spark 开销的关系。

---

## 主动消息:不只是"回你"

你的 Agent 能给**联系人列表里的任何人**主动发消息,而不只是回复当前对话:

- **回复当前对话** —— 默认;你在哪说,它在哪答。
- **主动发给某个人** —— 指定联系人,平台自动挑他**最合适的渠道**(Telegram > 微信 > Discord > WhatsApp > 飞书 > 网页)送达。

> 一条边界:它可以再联系**曾经联系过它的人**(对方一旦私聊过,就被存成联系人),但**不能凭空冷启动去骚扰一个从没联系过它的人**——这是所有 IM 机器人的通用限制,不是平台的额外约束。

这让"让 Agent 在合适的时候主动汇报、提醒、跟进"成为可能——它不必干等你来问。

---

## 任务 vs 定时:两回事,别混

| | **任务(Task)** | **定时(Schedule)** |
|---|---|---|
| 是什么 | 有里程碑的**目标** | **重复执行**的动作 |
| 结局 | 完成后退出**活动上下文**(历史保留) | 一直跑到**你取消** |
| 例子 | "帮我制定和 Peter 的沟通计划" | "每天 8 点发我 NVDA 股价" |

- **任务**:你想**分步骤达成某件事**。它带里程碑,做完就退出活动上下文,但历史记录仍可查询。带指定对象的任务,只在你和那个联系人聊天时才加载。
- **定时**:你想**定期发生某件事**。"每小时查邮件""每天早上发digest"——这些是定时,不是任务。

**两者也能配合**,用于长期的关系经营:比如"每天联系 Peter、推进合作"= 一个**任务**(里程碑=要聊什么)+ 一个**定时**(每天触发=什么时候聊)。创建定时时把任务的 `task_id` 一起绑定;定时一到,它就能读取该任务的进度、决定今天谈什么、然后主动发消息。

> 常见误用:别为"每天发个价格"这种简单重复建任务(那是定时);也别把一次性的设置步骤塞进重复任务的里程碑(它们会完成,然后退出活动上下文)。

---

## 怎么关掉一个定时提醒

一个"每小时报价""每天提醒"这类东西,**是定时,不是任务**。想关掉它:

1. 让 Agent `list_schedules` 列出当前所有定时(按名字+描述);
2. 找到你要关的那个;
3. `cancel_schedule(名字)` —— 永久停掉。

> **每次定时触发都花 Spark。** 所以当你觉得"这个提醒太费钱了",关掉它就是**省 Spark** 最直接的一招。用户创建的重复提醒通常在 `list_schedules` 里,不要只在任务列表里找、然后误以为它是"删不掉的平台模板"。

---

## 和 Spark 的关系

主动性是有成本的:**每一次定时触发、每一次主动思考,都会消耗 Spark**(见《[Spark 与成本](30-spark.md)》)。所以:

- 高频定时(每小时 × 24)比低频(每天一次)费得多;
- 让每个定时**只做该做的事**、描述写清楚。未绑定 `task_id` 的定时只能看到自己的描述;绑定后才能同时读取对应任务上下文;
- 不再需要的定时,及时 `cancel_schedule`。

---

*这一篇是「技术参考」。想知道这些主动动作花多少 Spark、怎么充,看《[Spark 与成本](30-spark.md)》;想让 Agent 出现在更多渠道好主动找到你,看《[接入渠道](20-channels.md)》。*
