AREX Feed Article
OpenAI 为 Agents API 推出 Scheduled Automations:按 cron 定时投递消息,agent 能用自然语言管理自己的日程
OpenAI 于 2026 年 10 月 23 日 21 时 24 分(UTC,北京时间 10 月 24 日凌晨)通过宣布,面向 Agents API 推出 Scheduled Automations。开发者可以用 cron 表达式把一条消息按计划送入既有 agent 会话,也可以让每次运行新建一个会话,或用时间戳安排一次未来的运行。公告由 OpenAI 员工账号 @VeitB 发布,同步上线。
这项功能的另一半是让 agent 自己排日程:给 agent 挂上 automations tool 后,它能根据自然语言请求自行创建、更新或删除日程。公告很短,配套文档却把机制写得相当具体——每次定时运行都会生成一条投递记录(invocation),目标会话忙时任务排队等待,而投递完成并不等于 agent 把活干完了。
一条 86 个单词的公告,发在开发者论坛
公告帖子出现在 OpenAI 开发者社区论坛的 API 分类下,带 announcement 和 agents 两个标签;发帖账号 @VeitB 属于论坛的 Community-Moderators 组,带有 staff 与 moderator 标识。帖子正文只有 86 个单词,第一句是「你现在可以为既有会话安排一条消息,也可以让它新建一个会话」。这次发布没有伴随产品博客文章,公告本体就是这则论坛帖。
帖子里内嵌了两张代码截图。一张展示用 client.beta.agents.automations.create 创建名为「Onboarding follow-up」的一次性日程,run_at 设为当前时间加 48 小时;另一张展示在 agent 配置里加入 {"type": "automations"} 工具,请求写的是「每小时看一次 SFO 飞往 HND 的下周五航班,试着找出最低价」。后一张截图与 所发推文的配图相同:他的自述「API things @openai」,推文发布于论坛公告前约 72 分钟。他写道:「本周 Agents API 要上线一个大功能:Automations」,并补充说:「有没有想过让 agent 每天扫一轮机票的最低价,或者每小时唤醒一个线程、检查任务进展?我有个好消息。」这条推文截至发稿获得 88 个赞、13,846 次浏览。
公告结尾把读者引向文档与 Cookbook,不过正文里内嵌的链接只有官方文档一条。截至发稿(北京时间 10 月 24 日),论坛帖收到 3 个 heart 表情反应、56 次浏览,尚无回复。
automation 是什么:一份存好的日程,和一条会排队的投递
官方文档把 automation 定义为「为 agent 工作保存的一份日程」:Agents API 负责存储日程,到期时把任务送进目标会话,每次运行生成一条 invocation——一次投递尝试的记录。如果目标会话正忙,任务就排队等待。
目标分两类。new_session 适合独立工作,比如每月一次的支出复盘,创建时要指定 agent、运行环境(environment)和放在 target.input 里的初始消息;existing_session 适合需要此前结论的后续工作,创建时提供会话 ID 和写在 target.instructions 里的提醒文本即可。送进既有会话的内容以「automation 通知」的形式出现,与普通用户消息分开,会话按当前的 agent 配置和已保存的状态继续工作。
计时方式与目标类型互相独立、可以自由组合:周期任务用 periodic,一次性任务用 once。创建 automation 只是把日程存为 active 状态,不会立即运行;周期任务的第一次运行排在下一个匹配的时间点。
五段式 cron 加 IANA 时区,一次性任务用 Unix 秒级时间戳
周期任务用五段式 cron 表达式加具名时区:0 10 * * * 是每天上午 10 点,0 9 1 * * 是每月 1 日上午 9 点,0 9 * * MON-FRI 是工作日上午 9 点;时区可以填 UTC,也可以填 IANA(互联网号码分配局)时区名,比如 America/New_York。cron 按所选时区的钟表时间解释——0 */3 * * * 意味着 0 点、3 点、6 点这样每三小时一次,而不是从创建时刻起算。为了错峰,Agents API 会在周期运行上加一点随机延迟;目标会话忙时,实际等待还会更长。
一次性任务用 type: "once" 加 run_at,值必须是未来的 Unix 秒级时间戳,不能与 expression、timezone 同用。文档的示例把一次检查排在 2027 年 1 月 1 日上午 9 时(UTC)。一次性日程跑完就不再有计划运行,但仍可手动触发,或为下一次跟进另建一条 automation。
日程管理走 /v1/agents/automations 接口:更新时省略的字段保持不变,target 一旦提供就整体替换;改动只对未来投递生效,已经排队的投递沿用创建时保存的配置。暂停、恢复、删除三个操作不需要请求体。暂停或删除不会中断会话已经接受的工作——要停掉正在跑的任务,得另走取消当前回合(cancel active turn)的路径;已完成的一次性日程不能再暂停或恢复。
agent 自己排班:七种操作,只限自己所在的会话
automations tool 给 agent 的动作清单有七项:创建、列出、读取、更新、暂停、恢复、删除自己的日程。边界同样明确——Agents API 会把当前会话设为日程目标,agent 不能用这个工具新建会话,也不能管理其他会话的日程;工具只能访问 agent 在当前会话里自己创建的那些 automation。
这个工具默认不存在。不开启它,应用照样能安排日程;反过来,把工具从 agent 配置里移除,已保存的日程也不会被删掉,需要清理时得通过 API 暂停或删除。
对于持续性的目标,文档建议开启多智能体编排:开启 multi_agent 后,主 agent 保留目标和日程,把每次定时任务委托给子 agent 执行,只留下一条简要结果,避免重复检查产生的大量工具输出占满主会话的上下文窗口。
应用也能在自身事件发生时创建日程。文档给出的示例是用户注册后先开一个 onboarding 会话,再用一次性日程把首次跟进排在 48 小时后,之后每完成一次跟进就排下一次,直到用户完成 onboarding 或选择退出。文档特别提醒这种场景要用一次性日程:cron 的「日」字段表达不了跨月的每 48 小时间隔。
手动触发与投递记录:任务结果要到会话事件里找
想立刻测试一条已存的日程,向 /v1/agents/automations/{automation_id}/invocations 发一个空请求体就行。手动触发不改动已保存的日程,也不消耗一次性日程的那次运行,日程暂停期间同样可用。
每条投递记录有四个可查字段:status 从 queued 变成 completed;session_id 标记任务送进了哪个会话,在会话可用前可以为空;source.type 区分手动触发(manual)与定时运行(automation);scheduled_at 是计划时间,手动触发时为空。
文档用加粗字体强调了一个提醒:「投递完成不代表 agent 已经完成工作」。对新建会话,它只说明会话接受了初始输入;对既有会话,只说明会话接受了通知和开工请求。要看任务本身的结果,得拿 session_id 去跟踪会话事件(session events);把输出展示给用户、向用户发送通知,仍然是应用自己的事。定时运行也不会打断会话正在进行的回合,更不会替应用补上缺失的工具结果或审批——文档提醒应用仍需自行处理这类 required actions。
beta 命名空间之外,GA 状态与定价还没有答案
文档把这套接口挂在 beta 命名空间下:SDK 调用走 client.beta.agents.automations,直接用 cURL 时要带上 OpenAI-Beta: agents=v1 请求头。但公告帖子没有说明 Scheduled Automations 属于正式发布(GA)还是预览,也没有公布定价。
开发者在接入之前,能依据的是文档里的 beta 标记——正式状态和计费口径,OpenAI 还没有给。