Cron 任务适用于需要定期执行的工作。你可以用它们来按计划备份数据库,或在两个系统之间保持数据同步。
你只需在代码中定义一次,然后通过编辑配置并重新部署来更新它们。但如今,随着工作演进,智能体与用户交互,计划需要实时更新。
我们构建了 Vercel Schedules,让智能体和应用程序能够通过代码创建、更改或取消一次性及重复性计划,而无需重新部署。
什么是 Vercel Schedules?
Schedules 基于 Vercel Cron Jobs 使用的静态方法构建,但设计目的是让用户和智能体在应用程序仍在运行时决定工作应在何时进行。计划告诉 Vercel 何时触发任务以及将任务发送到哪里。你的应用程序提供执行工作的代码。
你可以将计划用于静态和动态任务:
- 静态计划将时间保存在
vercel.json或 Build Output API 配置 中,并在部署时同步。你可以用它们调用私有函数或 HTTP 路径,或向 Queue 主题发送消息。 - 动态计划让应用在运行时通过 JS SDK、CLI 或 API 创建和管理计划。它们通过 Queue 主题支持一次性工作和重复性工作。
你还可以在 预览部署和自定义环境中测试计划工作,然后再在生产环境中运行。
Schedules 的工作原理
举个例子:用户可以向具有网络访问权限的智能体提出:“明天早上,总结 Hacker News 上的前五条新闻。”传统解决方案是将请求及其计划时间存储在数据库中,然后使用 cron 任务检查到期的工作。
使用 Schedules,智能体可以创建一个计划,记录请求及运行时间,而无需单独的数据库和轮询任务。下面的示例定义了一个 AI SDK 工具,为智能体提供此能力。
lib/schedule-task-tool.ts
import { randomUUID } from 'node:crypto';
import { tool } from 'ai';
import { z } from 'zod';
import { Schedules } from '@vercel/schedules';
export function scheduleTaskTool(tenantId: string, userId: string) {
return tool({
description: 'Schedule a task to run at a future time.',
inputSchema: z.object({
task: z.string().min(1).max(1000),
at: z.string().describe('Future local time: YYYY-MM-DDTHH:mm'),
timezone: z.string().describe('IANA time zone, e.g. America/New_York'),
}),
execute: ({ task, at, timezone }) =>
Schedules.create({
name: `agent-task-${randomUUID()}`,
namespace: tenantId,
expression: { type: 'single', at },
timezone,
target: { topic: 'agent-work' },
payload: { userId, task },
}),
});
}
一个 AI SDK 工具,为智能体任务创建一次性计划。
当任务到期时,Vercel 使用 Queues 将保存的请求传递给你的应用。你的应用提供读取该请求的代码,检查用户当前权限,并启动智能体。智能体使用网络工具获取前五条 Hacker News 帖子,然后返回摘要,供你的应用保存给用户。
如果你已经使用 fx 的 JavaScript 库 libfx 或 Pi 的智能体库 构建智能体,你可以添加类似的调度工具。eve 智能体框架 使用 Vercel Schedules 为托管在 Vercel 上的生产智能体提供动态调度工具。
运行重复性应用任务
你可以使用 Vercel Schedules 安排重复性工作。计划可以通过 JS SDK、API 和 CLI 动态创建,也可以在项目配置中设置。
例如,要创建一个每天清理过期记录的任务,你可以定义一个计划,在所选时区调用私有函数:
vercel.json
{
"$schema": "https://openapi.vercel.sh/vercel.json",
"schedules": {
"cleanup": {
"schedule": "0 2 * * *",
"function": "api/cleanup",
"timezone": "America/New_York"
}
},
"functions": {
"api/cleanup.ts": {
"experimentalTriggers": [
{ "type": "schedule/v1beta" }
]
}
}
}
每天纽约时间凌晨 2 点调度一个私有清理函数。
Vercel 直接调用此清理代码,而不将其暴露在公共 URL 上。它会检查每次调用是否来自调度服务,因此你无需自行添加该检查。
如果你的应用已经使用 Nitro 3 服务器框架,其实验性集成允许你将现有 scheduledTasks 配置中的重复性任务作为私有函数运行。
你还可以使用 vercel dev 在本地尝试智能体任务和清理任务,然后在预览分支或自定义环境中测试,再投入生产。在项目的 Schedules 标签页中使用 Run Schedule 即可立即尝试任一任务,并查看过去运行的时间。
开始使用
Vercel Schedules 现已进入公开测试版,你可以将其用于应用程序已运行的重复性任务。当用户或智能体选择工作应在何时进行时,你的代码可以为该任务创建和管理计划。
要开始使用,请查看 Vercel Schedules 技能 并阅读文档。
