Scheduler(定时调度)¶
agentscope-extensions-scheduler 让 Agent 可以按调度器配置周期性执行——比如”每天 8 点跑一次日报 Agent”、”每 5 秒做一次健康巡检”。模块抽出统一的 AgentScheduler 接口,提供两个实现:
子模块 |
实现 |
部署形态 |
|---|---|---|
|
单机或集群(共享 Quartz 数据库) |
|
|
分布式调度,依赖 admin server |
底层 SPI 在 agentscope-extensions-scheduler-common,可以自己实现接入其他调度框架。
共享概念¶
AgentConfig(或RuntimeAgentConfig):定义 Agent 怎么”造”出来——名字、模型配置、system prompt、工具集等。ScheduleConfig:定义调度策略——CRON、固定速率、最大并发等。AgentScheduler:核心接口,schedule(...)/pause(...)/resume(...)/cancel(...)/shutdown()。ScheduleAgentTask:一次注册返回的”被调度的 Agent 任务”句柄。
每次任务触发时,调度器会”现造”一个新的 Agent 实例并执行,避免状态串台。
Quartz 模式(单机/集群)¶
添加依赖¶
<dependency>
<groupId>io.agentscope</groupId>
<artifactId>agentscope-extensions-scheduler-quartz</artifactId>
<version>${agentscope.version}</version>
</dependency>
用法¶
import io.agentscope.extensions.scheduler.AgentScheduler;
import io.agentscope.extensions.scheduler.config.AgentConfig;
import io.agentscope.extensions.scheduler.config.DashScopeModelConfig;
import io.agentscope.extensions.scheduler.config.ScheduleConfig;
import io.agentscope.extensions.scheduler.config.ScheduleMode;
import io.agentscope.extensions.scheduler.quartz.QuartzAgentScheduler;
AgentScheduler scheduler = QuartzAgentScheduler.builder()
.autoStart(true)
.build();
AgentConfig agent = AgentConfig.builder()
.name("DailyReportAgent")
.modelConfig(DashScopeModelConfig.builder()
.apiKey(apiKey).modelName("qwen-plus").build())
.sysPrompt("你是日报助手,请每天生成销售汇总")
.build();
ScheduleConfig schedule = ScheduleConfig.builder()
.scheduleMode(ScheduleMode.FIXED_RATE)
.fixedRate(5_000L) // 每 5 秒
// 或 .scheduleMode(ScheduleMode.CRON).cron("0 0 8 * * ?")
.build();
scheduler.schedule(agent, schedule);
支持运行时管控:
scheduler.pause("DailyReportAgent");
scheduler.resume("DailyReportAgent");
scheduler.cancel("DailyReportAgent");
scheduler.shutdown();
XXL-Job 模式(分布式)¶
添加依赖¶
<dependency>
<groupId>io.agentscope</groupId>
<artifactId>agentscope-extensions-scheduler-xxl-job</artifactId>
<version>${agentscope.version}</version>
</dependency>
用法¶
import com.xxl.job.core.executor.impl.XxlJobSpringExecutor;
import io.agentscope.extensions.scheduler.xxljob.XxlJobAgentScheduler;
// 1) 启动 XXL-Job Executor
XxlJobSpringExecutor executor = new XxlJobSpringExecutor();
executor.setAdminAddresses("http://localhost:8080/xxl-job-admin");
executor.setAppname("agentscope-demo");
executor.setAccessToken("xxxxxxxx");
executor.setPort(9999);
executor.start();
// 2) 把它包成 AgentScheduler
AgentScheduler scheduler = new XxlJobAgentScheduler(executor);
// 3) 注册一个 Agent 作为 JobHandler
ScheduleAgentTask task = scheduler.schedule(agentConfig, ScheduleConfig.builder().build());
之后,调度策略(CRON、并发、路由)在 XXL-Job 控制台配置,Agent 名 DailyReportAgent 会作为 JobHandler 显示。
工具绑定¶
绑定 Toolkit 时使用 RuntimeAgentConfig(过渡 API,未来可能调整):
RuntimeAgentConfig agent = RuntimeAgentConfig.builder()
.name("OpsAgent")
.modelConfig(modelConfig)
.sysPrompt("巡检并发送告警")
.toolkit(toolkit)
.build();
选型建议¶
本地或小集群、不想引入外部调度服务 → Quartz
需要可视化控制台、跨节点路由、任务日志 → XXL-Job
想接其他调度框架 → 自己实现
AgentScheduler接口