SKILL.md:时序区间推理(Allen 1983)
何时使用此技能
遇到以下情况时加载此技能:
| 触发场景 | 为何Allen适用 |
|---|---|
| “任务A是否在任务B开始前完成?” | 需要区间关系分类(before, meets, overlaps…) |
| “我不确切知道X何时发生,只知道它发生在Y期间” | 13种关系的析取不确定性 |
| “如果我们添加此约束,计划是否仍然可行?” | 约束传播 + 不一致检测 |
| “事件A每天发生;事件B每年发生——它们如何相互作用?” | 参考区间层级,用于范围管理 |
不要使用,如果你只需要比较两个绝对时间戳且没有不确定性——普通算术就足够了。
决策要点
添加新时序断言时
IF 断言与现有约束冲突:
→ 在传播过程中检测到空弧标签
→ 立即停止,报告不一致的区间对
→ 不要在状态不一致时继续
IF 断言一致:
→ 从受影响的弧开始运行约束传播
→ 通过交集传递性结果更新标签
→ 持续直到无法再细化
处理时序不确定性
IF 证据仅支持多种关系:
→ 维护完整的析取标签 {before, meets, overlaps}
→ 在没有证据的情况下绝不缩减为单一关系
→ 记录约束集缩小的时间和原因
IF 必须在不确定性下行动:
→ 直接使用析取标签进行规划
→ 将所有假设标记为可废止的
→ 避免过早承诺
给定时序推理范围
IF 处理跨越大相径庭时间尺度的事件:
→ 确定参考区间层级(年→月→日)
→ 在每个簇内分别进行推理
→ 在边界处创建显式的桥接约束
→ 避免将所有内容扁平化为一个全局图
IF 局部推理感觉足够:
→ 验证查询范围与参考区间层级匹配
→ 仅在相关簇内传播
→ 仅在检测到依赖时升级到跨簇
状态持久性
IF 状态持续进行,没有明确的结束边界:
→ 应用持久性默认值并标记为可废止
→ 任何未来的结束边界断言将覆盖默认值
→ 永远不要将持久性假设视为硬约束
IF 提供了明确的时间边界:
→ 覆盖任何现有的持久性默认值
→ 正常传播新约束
失败模式
| 反模式 | 症状 | 诊断 | 修复 |
|---|---|---|---|
| 点化 | 将事件简化为时间戳,丢失重叠/包含信息 | 使用time=14:30而不是[14:30, 14:45]区间 | 将每个事件建模为具有开始和结束的区间,即使持续时间未知 |
| 过早承诺 | 在证据支持多种关系时选择单一关系 | 在只知道“not during”时断言“before” | 维护完整的析取标签,直到证据强制缩小范围 |
| 全局传播爆炸 | 每次更新的O(N²)成本,性能随KB大小下降 | 为局部查询在整个图上运行约束传播 | 使用参考区间层级限制传播范围 |
| 空标签否认 | 检测到不一致后继续推理 | 得到无意义的结果,因为冲突的约束被忽略 | 将空弧标签视为成功(不一致被及早发现),立即停止 |
| 持久性刚性 | 无法覆盖“持续到改变为止”的假设 | 新的时间边界因与持久性冲突而被拒绝 | 将所有持久性默认值标记为可废止,允许显式断言覆盖 |
检测规则:
- 如果你看到没有持续时间的时间戳 → 点化
- 如果你看到任意选择的单一关系 → 过早承诺
- 如果传播成本随总KB大小增长 → 全局传播爆炸
- 如果在空标签后继续推理 → 空标签否认
- 如果新的时间事实被拒绝 → 持久性刚性
工作示例
示例1:会议日程冲突检测
场景: 在已有“客户电话”和“工程晨会”的日历中添加“团队评审”
初始状态:
客户电话 (I₁): [10:00, 11:00]
工程晨会 (I₂): [11:30, 12:00]
已知: I₁ {before} I₂
新断言: 团队评审 (I₃): [10:45, 11:15]
专家推理过程:
-
分类新关系:
- I₃ vs I₁: 开始于10:45,I₁结束于11:00 → {overlaps}
- I₃ vs I₂: 结束于11:15,I₂开始于11:30 → {before}
-
约束传播:
- 从 I₁ {before} I₂ 和 I₃ {overlaps} I₁
- 传递性:overlaps ∘ before = {before, overlaps, meets, starts, during}
- 新约束:I₃ {before, overlaps, meets, starts, during} I₂
- 与 I₃ {before} I₂ 取交集:标签变为 {before}
-
一致性检查: 所有标签非空 → 计划可行但存在重叠
新手可能遗漏:
- 可能不会检查I₃与I₁的重叠是否造成资源冲突
- 可能不会验证传递性是否保持一致性
- 可能不会区分“可行排序”与“无资源冲突”
专家发现:
- 重叠检测通过关系分类立即标记
- 传播验证全局一致性得以维持
- 清晰区分时间可行性与资源可用性
示例2:流程阶段依赖
场景: 任务完成时间不确定的部署流水线
初始状态:
构建阶段 (B): 持续时间未知,必须在部署前完成
测试阶段 (T): 与构建结束重叠,持续时间不确定
部署阶段 (D): 在B和T都完成后开始
约束网络:
T {overlaps, finishes} B (测试可以与构建同时完成或在构建之前完成)
B {before, meets} D (构建必须在部署前完成)
T {before, meets} D (测试必须在部署前完成)
新信息: “测试发现严重错误,延长2小时”
专家推理:
- 更新影响范围: 测试延长将T的终点向后推
- 传播: 如果最初 T {finishes} B,现在 T {overlaps} B(延伸到构建结束之后)
- 检查一致性: T {overlaps} B 仍然允许 B {before, meets} D 和 T {before, meets} D
- 结果: 部署延迟,但流水线逻辑不变
新手可能遗漏:
- 可能假定测试完成不影响构建-部署依赖
- 可能不会将测试延长传播到部署时间
- 可能将“测试延长”视为孤立事实,而非约束网络更新
专家发现:
- 认识到测试-构建关系必须重新评估
- 将时间影响传播到整个约束网络
- 适当保持不确定性(部署可以在构建完成后立即开始,或在延长的测试之后开始)
质量门
当时序推理任务在以下方面都完成时:
- 所有区间以显式的开始/结束边界表示(没有点事件)
- 每对区间具有非空的13种关系弧标签
- 约束传播已运行完成(没有待处理的传递性更新)
- 所有析取标签如实反映当前证据(没有任意承诺)
- 为多尺度推理建立了参考区间层级
- 持久性默认值在适用处标记为可废止
- 不一致检测已验证(空标签被捕获并报告)
- 显式定义了跨参考范围桥接
- 所有时序断言可追溯到证据来源
- 查询范围与推理粒度级别相匹配
不适用边界
不要在此情况下使用Allen的区间代数:
- 简单时间戳比较 → 使用算术:
if (t1 < t2) - 度量持续时长计算 → 使用日历算术:
end_date - start_date - 实时调度优化 → 使用带有数值域的约束满足
- 概率时序推理 → 使用时序概率网络
- 连续时间动态 → 使用微分方程
- 高频事件流 → 使用流处理框架
改用:
- 对于度量约束:使用数值域约束满足
- 对于概率时序推理:使用贝叶斯时序网络
- 对于实时系统:使用速率单调调度
- 对于连续动态:使用时序逻辑模型检查**
- 对于事件流处理:使用复杂事件处理
Allen擅长: 在增量知识更新和层级范围管理下,处理带有不确定性的定性时间推理。