一、重复创建待办日程问题

之前开发的时候测试了几个简单的待办提醒和执行类待办,没有问题。
最近发现在添加了【查询类】待办后,在执行结束的时候会插入一条基本上类似需求的待办。
查了下原因,是这个待办在交给大模型的时候,以为是创建待办,在执行完查询任务及发送邮件任务后,就“顺手”创建了一个待办。
Ai给我了3个方案:

我采用了方案2,加上特定的场景,调用不同的工具(或子Agent)就可以避免这个问题。

二、计算下次提醒时间不准确的问题
我目前的方案是根据自然语言描述,生成一个规则文件,由LLM解析这个规则文件,生成一个提醒时间,但在计算下次提醒(或执行)时间的时候,有一些问题。

今天让Ai写了很多组合提醒时间,再让Ai测试,全部通过,应该可以覆盖日常的一些提醒类型了。
代码块功能
javascript
|
// ===== 1. 间隔重复类 =====
// 1.1 每23分钟
$todoData = [
'member_id' => 1,
'title' => '每23分钟提醒喝水',
'remind_at' => '2026-06-18 10:00:00',
'repeat_rule' => '{"type":"minute","interval":23}',
];
// 1.2 每2小时
$todoData = [
'member_id' => 1,
'title' => '每2小时提醒站起来活动',
'remind_at' => '2026-06-18 10:00:00',
'repeat_rule' => '{"type":"hour","interval":2}',
];
// 1.3 每3天
$todoData = [
'member_id' => 1,
'title' => '每3天提醒浇水',
'remind_at' => '2026-06-18 10:00:00',
'repeat_rule' => '{"type":"daily","interval":3}',
];
// 1.4 每2周
$todoData = [
'member_id' => 1,
'title' => '每2周提醒大扫除',
'remind_at' => '2026-06-18 10:00:00',
'repeat_rule' => '{"type":"weekly","interval":2}',
];
// 1.5 每3个月
$todoData = [
'member_id' => 1,
'title' => '每3个月提醒换季整理',
'remind_at' => '2026-06-18 10:00:00',
'repeat_rule' => '{"type":"monthly","interval":3}',
];
// 1.6 每年
$todoData = [
'member_id' => 1,
'title' => '每年提醒体检',
'remind_at' => '2026-06-18 10:00:00',
'repeat_rule' => '{"type":"yearly","interval":1}',
];
// 1.7 每隔1小时20分钟(折算为80分钟)
$todoData = [
'member_id' => 1,
'title' => '每隔1小时20分钟提醒休息',
'remind_at' => '2026-06-18 10:00:00',
'repeat_rule' => '{"type":"minute","interval":80}',
];
// ===== 2. 固定时间点类 =====
// 2.1 每天6:20和9:50
$todoData = [
'member_id' => 1,
'title' => '每天6:20和9:50提醒打卡',
'remind_at' => '2026-06-18 06:20:00',
'repeat_rule' => '{"type":"daily","hours":[6,9],"minutes":[20,50]}',
];
// 2.2 每天多个时间点(6:20、9:50、14:00、18:30)
$todoData = [
'member_id' => 1,
'title' => '每天多时段提醒',
'remind_at' => '2026-06-18 06:20:00',
'repeat_rule' => '{"type":"daily","hours":[6,9,14,18],"minutes":[20,50,0,30]}',
];
// 2.3 每周一和周三14:30
$todoData = [
'member_id' => 1,
'title' => '每周一和周三下午开会',
'remind_at' => '2026-06-18 14:30:00',
'repeat_rule' => '{"type":"weekly","days_of_week":[1,3],"hours":[14],"minutes":[30]}',
];
// 2.4 工作日(周一至周五)9:00
$todoData = [
'member_id' => 1,
'title' => '工作日9点早会',
'remind_at' => '2026-06-18 09:00:00',
'repeat_rule' => '{"type":"weekly","days_of_week":[1,2,3,4,5],"hours":[9],"minutes":[0]}',
];
// 2.5 周末10:30
$todoData = [
'member_id' => 1,
'title' => '周末10:30提醒出门',
'remind_at' => '2026-06-18 10:30:00',
'repeat_rule' => '{"type":"weekly","days_of_week":[0,6],"hours":[10],"minutes":[30]}',
];
// 2.6 每月1号和15号8:00
$todoData = [
'member_id' => 1,
'title' => '每月1号和15号8点交报告',
'remind_at' => '2026-06-18 08:00:00',
'repeat_rule' => '{"type":"monthly","days_of_month":[1,15],"hours":[8],"minutes":[0]}',
];
// 2.7 每年1月1日和10月1日
$todoData = [
'member_id' => 1,
'title' => '每年国庆和元旦提醒',
'remind_at' => '2026-06-18 10:00:00',
'repeat_rule' => '{"type":"yearly","months_of_year":[1,10],"days_of_month":[1,1]}',
];
// ===== 3. 组合规则(间隔+时间约束) =====
// 3.1 每30分钟,只在9:00-18:00之间
$todoData = [
'member_id' => 1,
'title' => '工作时间每30分钟休息',
'remind_at' => '2026-06-18 09:00:00',
'repeat_rule' => '{"type":"minute","interval":30,"hours":[9,10,11,12,13,14,15,16,17,18]}',
];
// 3.2 每2小时,仅工作日9:00-17:00
$todoData = [
'member_id' => 1,
'title' => '工作日每2小时打卡',
'remind_at' => '2026-06-18 09:00:00',
'repeat_rule' => '{"type":"hour","interval":2,"days_of_week":[1,2,3,4,5],"hours":[9,11,13,15,17]}',
];
// ===== 4. 周期范围限制 =====
// 4.1 指定开始日期
$todoData = [
'member_id' => 1,
'title' => '从7月1日开始每天提醒',
'remind_at' => '2026-07-01 10:00:00',
'repeat_rule' => '{"type":"daily","interval":1,"start_date":"2026-07-01"}',
];
// 4.2 指定结束日期
$todoData = [
'member_id' => 1,
'title' => '每天提醒到6月30日结束',
'remind_at' => '2026-06-18 10:00:00',
'repeat_rule' => '{"type":"daily","interval":1,"end_date":"2026-06-30"}',
];
// 4.3 指定执行次数
$todoData = [
'member_id' => 1,
'title' => '每天提醒共10次',
'remind_at' => '2026-06-18 10:00:00',
'repeat_rule' => '{"type":"daily","interval":1,"count":10}',
];
// 4.4 开始日期 + 执行次数
$todoData = [
'member_id' => 1,
'title' => '从7月1日开始每天提醒共10次',
'remind_at' => '2026-07-01 10:00:00',
'repeat_rule' => '{"type":"daily","interval":1,"start_date":"2026-07-01","count":10}',
];
// 4.5 开始日期 + 结束日期
$todoData = [
'member_id' => 1,
'title' => '7月1日到7月15日每天提醒',
'remind_at' => '2026-07-01 10:00:00',
'repeat_rule' => '{"type":"daily","interval":1,"start_date":"2026-07-01","end_date":"2026-07-15"}',
];
// ===== 5. 特殊表达 =====
// 5.1 不重复(仅一次)
$todoData = [
'member_id' => 1,
'title' => '仅提醒一次',
'remind_at' => '2026-06-18 10:00:00',
'repeat_rule' => '{"type":"none"}',
];
// 5.2 每隔一天(interval=2)
$todoData = [
'member_id' => 1,
'title' => '每隔一天提醒',
'remind_at' => '2026-06-18 10:00:00',
'repeat_rule' => '{"type":"daily","interval":2}',
];
// 5.3 每两周
$todoData = [
'member_id' => 1,
'title' => '每两周提醒',
'remind_at' => '2026-06-18 10:00:00',
'repeat_rule' => '{"type":"weekly","interval":2}',
];
// 5.4 每季度(每3个月)
$todoData = [
'member_id' => 1,
'title' => '每季度提醒交季报',
'remind_at' => '2026-06-18 10:00:00',
'repeat_rule' => '{"type":"monthly","interval":3}',
];
// ===== 6. 笛卡尔积组合(hours和minutes数组组合) =====
// 6.1 每天6:20、6:50、9:20、9:50
$todoData = [
'member_id' => 1,
'title' => '每天多时间点提醒(笛卡尔积)',
'remind_at' => '2026-06-18 06:20:00',
'repeat_rule' => '{"type":"daily","hours":[6,9],"minutes":[20,50]}',
];
// 6.2 每周一三五 10:00、10:30、14:00、14:30
$todoData = [
'member_id' => 1,
'title' => '每周一三五多时段提醒',
'remind_at' => '2026-06-18 10:00:00',
'repeat_rule' => '{"type":"weekly","days_of_week":[1,3,5],"hours":[10,14],"minutes":[0,30]}',
];
// ===== 7. 边界值测试 =====
// 7.1 最小间隔
$todoData = [
'member_id' => 1,
'title' => '每分钟提醒',
'remind_at' => '2026-06-18 10:00:00',
'repeat_rule' => '{"type":"minute","interval":1}',
];
// 7.2 最大小时
$todoData = [
'member_id' => 1,
'title' => '23点提醒',
'remind_at' => '2026-06-18 23:00:00',
'repeat_rule' => '{"type":"daily","hours":[23],"minutes":[0]}',
];
// 7.3 最大分钟
$todoData = [
'member_id' => 1,
'title' => '59分提醒',
'remind_at' => '2026-06-18 10:59:00',
'repeat_rule' => '{"type":"daily","hours":[10],"minutes":[59]}',
];
// 7.4 所有星期
$todoData = [
'member_id' => 1,
'title' => '每天提醒(所有星期)',
'remind_at' => '2026-06-18 10:00:00',
'repeat_rule' => '{"type":"weekly","days_of_week":[0,1,2,3,4,5,6],"hours":[10],"minutes":[0]}',
];
// 7.5 所有月份(每月)
$todoData = [
'member_id' => 1,
'title' => '每月1号提醒',
'remind_at' => '2026-06-18 10:00:00',
'repeat_rule' => '{"type":"monthly","days_of_month":[1],"hours":[10],"minutes":[0]}',
];
评论 (0)
暂无评论,快来发表第一条评论吧!