返回 文章 apply CMS 文章

Vercel 推出 Schedules:让代理和应用程序动态管理定时任务

Vercel Schedules 让定时任务从静态配置变为运行时动态管理,特别适合代理驱动的实时调度需求。

Vercel定时任务代理Serverless
成长分 / 100 68 综合收获、行动、留存与影响

Vercel 推出 Schedules:让代理和应用程序动态管理定时任务
为什么值得读了解 Vercel 如何扩展 Cron Jobs,支持动态调度而无需重新部署。

学习如何通过 JS SDK、CLI 或 API 在应用中创建和管理定时任务。

关键洞察
  1. Vercel Schedules 支持静态和动态两种调度方式,静态调度在部署时同步,动态调度可在运行时通过代码管理。
  2. 动态调度支持一次性任务和重复性任务,通过 Queue 主题传递任务负载。
  3. 代理可以创建调度来记录请求和执行时间,无需单独数据库和轮询作业。
转成行动

深入阅读

正文与原文对照

原文保真覆盖:全文原文字符:6237

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 技能 并阅读文档。

贡献者

Ben Sabic