📖 本文是「解剖 AI Agent」系列的第 4 篇(完结)。← 上一篇:AI Agent 的安全风险

前几篇谈了 AI Agent 的基本原理和记忆系统。但光是能对话和记东西,还不足以让 Agent 成为真正的自动化助理。

要让 AI 能够独立处理复杂任务、24 小时不间断运作,还需要三个关键机制:Skill(技能)Sub-agent(分身)Cron(调度)


Skill:AI 的工作手册

请 AI 做一件复杂的事(比如制作一支视频),中间可能牵涉十几个步骤:写脚本、做幻灯片、截图、配音、语音验证、视频合成……每次都靠模型自己想该怎么做,很容易漏掉步骤。

Skill 就是写好的 SOP。

它的本体是一份纯文字文件(通常是 .md 格式),不是代码,里面记载:

  • 完成任务的步骤顺序
  • 每个步骤需要用到的工具在哪里
  • 遇到例外状况该怎么处理

Skill 的巧妙之处:按需加载

Agent 不会把所有 Skill 都塞进 System Prompt,那样会让上下文爆掉。它的做法是:

  1. 在 System Prompt 里只放一份清单,列出有哪些 Skill 可用,以及简短说明
  2. 语言模型判断当前任务需要哪个 Skill
  3. 用读取工具把那个 Skill 的内容加载
  4. 按照 Skill 的步骤开始执行

这是一种 Context Engineering 的技巧,只在需要的时候才加载信息,避免占用宝贵的上下文窗口。

Skill 可以交换

因为 Skill 就是文本文件,所以可以直接把自己的 Skill 分享给别人的 AI Agent,或者从社区平台下载别人的 Skill。就像在《黑客任务》里把武功直接灌入大脑一样,AI 只要把 Skill 放进指定文件夹,就立刻学会了一套新的工作流程。

下载来路不明的 Skill 要注意安全风险,这部分前面在 AI Agent 的安全风险Skill Shielder 那两篇有详细讨论。

AI 也会自己创造工具

除了使用现有的工具和 Skill,语言模型也能自己写程序来解决问题。

举个例子:告诉 AI「每次做语音合成后要用语音识别验证,不对就重做,最多五次」。模型想了想,觉得每次都要来回沟通太麻烦,于是自己写了一个小脚本,把合成、验证、重试的逻辑全部包进去,一次执行搞定。

这些「免洗小工具」通常用完就被 AI 遗忘,下次又会重新写一个,但它们展现了 Agent 解决问题的灵活性。


Sub-agent:分身术

当任务可以拆成平行的子任务时,Agent 能派出分身去处理。

假设要 AI 比较两篇论文的方法。语言模型会要求 Agent 繁殖出两个 Sub-agent(子代理),一个去读论文 A 并摘要,另一个去读论文 B 并摘要。两个分身各自跟语言模型沟通、搜索网页、下载论文、逐段阅读,最后把摘要返回给主 Agent。

为什么不直接用主 Agent 做?

关键在于节省上下文空间

读一篇论文可能需要跟语言模型来回几十次:搜索、下载、分段阅读、整理。如果这些过程都发生在主 Agent 的上下文里,窗口很快就会被塞满。

用 Sub-agent 的话,所有繁琐的过程都在分身的独立上下文中进行。对主 Agent 来说,它只看到最终的摘要结果,就像主管只看报告,不需要知道下属加了几天班。

这也是 Context Engineering 的核心思维:让每一层只看到它需要的信息。

无限外包的陷阱

分身也能召唤分身吗?理论上可以,但不加限制就会变成无限外包。每个人都把工作丢给下一层,最后没人真的在做事。

解决方法很粗暴但有效:让分身失去繁殖能力。 Agent 在程序层面直接禁止 Sub-agent 使用「召唤分身」这个工具,靠代码锁死,不靠语言模型的命令来约束。


Cron:让 AI 学会「等」和「守时」

AI Agent 的一个根本问题是:模型不会主动做任何事。

语言模型只会在收到输入时才产生输出。没有人问它问题,它就静静待着。Agent 跟模型对话结束后,如果没有新的触发,整个系统就停住了。

心跳机制:定时叫醒

Heartbeat(心跳) 是最基本的解决方案。每隔一段固定时间(比如 15 分钟),Agent 就会自动送一个默认的命令给语言模型,让它「醒来」看看有什么事要做。

心跳的命令通常是「去读一下 heartbeat.md 这个文件,看有没有待办任务」。模型读完之后,如果有任务就开始执行,没有就回复「没事」然后继续等下次心跳。

心跳命令不一定要很具体。心跳设成「往你的目标前进」,如果 AI 的设置里写着它的目标是「成为一流的学者」,那每 15 分钟它就会起来做点跟学术研究有关的事:读论文、写笔记、整理数据。

Cron Job:定点触发

心跳是固定间隔的敲钟,Cron 则是在特定时间触发特定任务。

「每天中午做一支视频」这条命令,语言模型会使用调度工具设置一个 Cron Job:中午 12 点触发,触发时的命令是「制作一支视频」。到了中午,Cron 系统就会像一次额外的心跳一样戳一下 Agent,但带着特定的任务命令。

学会等待

Cron 带来一个意想不到的能力:让 AI 学会等待。

假设 AI 要使用一个线上工具,上传数据后那个工具需要 5 分钟才能处理完成。一般情况下,AI 看到「处理中」就只能回报「处理中」然后结束,因为它不会主动等待。

有了 Cron 之后,聪明的模型可以在看到「处理中」时,设置一个 3 分钟后的 Cron Job:「3 分钟后回来检查这个页面」。3 分钟到了,Cron 触发,AI 回来检查,发现处理完了,就继续下一步。

这让 AI 能够操控需要等待的非同步流程,甚至能用一个 AI 去操控另一个 AI 的服务。


三者合体:真正的自动化

当 Skill、Sub-agent 和 Cron 三个机制同时运作,AI Agent 就不再只是一个问答工具,而是一个真正的自动化系统:

  • Skill 确保复杂任务不会遗漏步骤
  • Sub-agent 让多个任务可以同时进行
  • Cron 让 AI 能定时工作、学会等待

这三个机制没有一个是革命性的新技术,本质上都是「写死的程序规则」加上「语言模型的判断力」。组合在一起,就让 AI 从「被动回答问题」进化到「主动完成工作」。

延伸阅读


📖 系列回顾:① AI Agent 不是 AI② 记忆机制③ 安全风险 → ④ 自动化机制(本篇)

小企鹅的经验

OpenClaw 上跑了一整套 cron job 系统,每天固定时间做不同的事:早上整理新闻、晚上总结今天的进展、半夜跑备份。这算是一种自动化没错,重点是「非工程师能不能做到」这件事,答案是可以,但前提是用成熟的优化架构和 self-healing 工具,不要从零造轮子。把 Skill / Sub-agent / Cron 三层分工搞清楚,再选一套适合新手的框架,比硬写 Python 调度脚本省力很多。

常见问题

Q: 什么是 AI Agent 的 Skill?

Skill 就是 AI 的工作 SOP,是一份文本文件,记载完成某个复杂任务的步骤流程。AI 在需要时读取 Skill,按照里面的步骤执行,就像员工翻阅操作手册一样。

Q: Sub-agent 和主 Agent 有什么不同?

Sub-agent 是主 Agent 召唤出来的分身,负责处理子任务。它跟主 Agent 使用同一个语言模型,但有独立的上下文窗口,做完后只回报结果,不占用主 Agent 的记忆空间。

Q: AI Agent 怎么做到定时执行任务?

通过心跳机制(Heartbeat)和调度系统(Cron)。心跳是固定间隔戳一下 AI 让它醒来;Cron 则是在指定时间触发特定任务。两者搭配就能实现 24 小时自动运作。


本文观念参考台大李宏毅教授公开课程内容,整理:小企鹅 Penchan