[moz] docs(§19): 补充 S3-S5 cron 配置方案 + 一致性偏差修复清单
CI / lint (pull_request) Successful in 7s
CI / test (pull_request) Successful in 38s
CI / frontend (pull_request) Successful in 12s
CI / notify-on-failure (pull_request) Successful in 0s

§11A: Cron 配置方案
- L1 各 agent 用各自 agentId 执行(D4: agent 是自己经验的最佳蒸馏者)
- 6 个 L1 cron(03:00-04:15 错开)+ 1 个 L2 cron(05:00 庞统)+ 1 个 IMPROVE cron(每周日 06:00)
- 每个 cron 的 payload/sessionTarget/delivery/timeout 规范

§11B: 一致性偏差修复清单
- B4: ticker.py ExperienceDistiller 调用未移除
- B5: skill_system.py / experience.py 未标记 deprecated
- B6: SELF_IMPROVEMENT_REMINDER.md 引用残留(实际已无影响)
This commit is contained in:
cfdaily
2026-06-18 22:53:32 +08:00
parent cdf984aa0c
commit ee825db818
@@ -465,7 +465,152 @@ IMPROVE(每周 cron,庞统执行)
| S5 | 实现 IMPROVE cronJSONL 引用追踪 + 淘汰报告(每周) | P2 | L2-L3 |
| S6 | 清理 deprecated 代码(skill_system.py / experience.py / self-improvement skill / SELF_IMPROVEMENT_REMINDER.md | P3 | L1 |
S1 和 S2 可以立即做。S3-S5 需要先确认设计文档
S1 和 S2 已完成(PR #85)。S3-S5 设计见下方 §11A
## 11A. Cron 配置方案(S3-S5 详细设计)
### 设计决策
**每个 agent 用自己的 agentId 执行 L1 cron**,不由庞统代理。
理由(对照设计目标 D4:
- L1 核心价值是"每个 agent 是自己经验的最佳蒸馏者"——agent 扫描自己的 JSONL,用自己的判断力识别信号
- 如果庞统代理,变成庞统替别人蒸馏,消除不了蒸馏者偏差(D4 要解决的正是这个问题)
- openclaw cron 原生支持 `agentId` 参数 + `sessionTarget: "isolated"`,技术上无障碍
### S3: L1 各 agent 自蒸馏 cron
6 个 agent,各创建一个 isolated cron,错开 15 分钟(和 discover-l1.md 时间表一致):
| Agent | agentId | cron 表达式 | 时区 |
|-------|---------|-----------|------|
| 张飞 | zhangfei-dev | `0 3 * * *` | Asia/Shanghai |
| 关羽 | guanyu-dev | `15 3 * * *` | Asia/Shanghai |
| 赵云 | zhaoyun-data | `30 3 * * *` | Asia/Shanghai |
| 司马懿 | simayi-challenger | `45 3 * * *` | Asia/Shanghai |
| 庞统 | pangtong-fujunshi | `0 4 * * *` | Asia/Shanghai |
| 姜维 | jiangwei-infra | `15 4 * * *` | Asia/Shanghai |
**Cron 配置规范**(每个 L1 cron job):
```json
{
"schedule": { "kind": "cron", "expr": "<时间>", "tz": "Asia/Shanghai" },
"sessionTarget": "isolated",
"agentId": "<agent-id>",
"payload": {
"kind": "agentTurn",
"message": "L1 自蒸馏 cron。请执行:\n1. read ~/.sanguo_projects/sanguo_mozi/skills/skill-management/SKILL.md\n2. read ~/.sanguo_projects/sanguo_mozi/skills/skill-management/references/discover-l1.md\n3. 按 discover-l1.md 步骤执行自蒸馏\n4. 如有信号:蒸馏为 HOW 格式,使用 skill_workshop(action=create) 提交 draft proposal\n5. 如无有价值信号:不产出,这是正常的",
"timeoutSeconds": 600
},
"delivery": { "mode": "none" }
}
```
**设计要点**:
- `sessionTarget: "isolated"`:每次创建临时 session,不污染 main session context
- `delivery.mode: "none"`:L1 不需要通知任何人,proposal 存在 skill_workshop 中即可
- `timeoutSeconds: 600`:10 分钟足够(扫描 JSONL + 蒸馏 + 提交 proposal
- message 指引 read SKILL.md + discover-l1.mdagent 按 references 指南执行,不依赖 memory
### S4: L2 庞统整合审查 cron
庞统的 L2 cron 在所有 L1 完成后执行(最后一个 agent 04:15 开始,L2 设在 05:00):
| 角色 | agentId | cron 表达式 | 时区 |
|------|---------|-----------|------|
| 庞统 | pangtong-fujunshi | `0 5 * * *` | Asia/Shanghai |
**Cron 配置**:
```json
{
"schedule": { "kind": "cron", "expr": "0 5 * * *", "tz": "Asia/Shanghai" },
"sessionTarget": "isolated",
"agentId": "pangtong-fujunshi",
"payload": {
"kind": "agentTurn",
"message": "L2 整合审查 cron。请执行:\n1. read ~/.sanguo_projects/sanguo_mozi/skills/skill-management/references/discover-l2.md\n2. 按 discover-l2.md 步骤执行:\n a. skill_workshop(action=list, status=pending) 获取所有 L1 draft proposals\n b. 全量数据源扫描,识别跨 agent 共性模式\n c. 逐个审查 proposalapprove / merge / reject\n d. 全局提升检查(Recurrence-Count >= 3 的经验提升为规则)\n e. 知识缺口反馈到 knowledge-gaps.md",
"timeoutSeconds": 1200
},
"delivery": { "mode": "none" }
}
```
**设计要点**:
- `timeoutSeconds: 1200`(20 分钟):L2 需要扫描全量数据源 + 审查多个 proposal,时间更长
- 庞统可以访问所有 agent 的 JSONL 和 skill_workshop proposals
### S5: IMPROVE 每周引用追踪 cron
庞统每周日 06:00 执行引用追踪(周日选活动量最低的时段):
| 角色 | agentId | cron 表达式 | 时区 |
|------|---------|-----------|------|
| 庞统 | pangtong-fujunshi | `0 6 * * 0` | Asia/Shanghai |
**Cron 配置**:
```json
{
"schedule": { "kind": "cron", "expr": "0 6 * * 0", "tz": "Asia/Shanghai" },
"sessionTarget": "isolated",
"agentId": "pangtong-fujunshi",
"payload": {
"kind": "agentTurn",
"message": "IMPROVE 每周引用追踪 cron。请执行:\n1. read ~/.sanguo_projects/sanguo_mozi/skills/skill-management/references/improve.md\n2. 按 improve.md 步骤执行:\n a. 扫描过去 7 天所有 agent 的 session JSONL,采集 Skill 引用信号\n b. 生成淘汰候选报告(30 天无引用的 Skill)\n c. 庞统审阅决策:quarantine / 保留观察 / 更新后保留\n d. 经验提升检查(被频繁引用 >= 5 次的 Skill\n e. 反馈知识缺口到 knowledge-gaps.md",
"timeoutSeconds": 1800
},
"delivery": { "mode": "none" }
}
```
**设计要点**:
- `timeoutSeconds: 1800`(30 分钟):全量 JSONL 扫描是最重的操作
- 每周一次频率足够——Skill 引用变化不会很快
- 淘汰决策通过 skill_workshop quarantine 执行,提升决策通过手动编辑 AGENTS.md
### Cron 创建方式
使用 openclaw cron 工具创建。**不是 moziplus 管理**,而是直接在 openclaw 层面配置。
创建顺序:先 S3(L1),再 S4(L2),最后 S5IMPROVE)。
创建后验证:`cron(action=list)` 确认所有 job 存在且 enabled=true。
### 去重和幂等
每个 cron job 的 name 包含 agent 名,避免命名冲突:
- `l1-distill-zhangfei`
- `l1-distill-guanyu`
- `l1-distill-zhaoyun`
- `l1-distill-simayi`
- `l1-distill-pangtong`
- `l1-distill-jiangwei`
- `l2-review-pangtong`
- `improve-weekly-pangtong`
创建前先 `cron(action=list)` 检查同名 job 是否已存在,避免重复创建。
## 11B. 一致性偏差修复清单(S6 补充)
§19 设计-实现一致性检查(2026-06-18)发现以下偏差,列入 S6 一并修复:
| # | 偏差 | 严重度 | 修复方式 |
|---|------|--------|--------|
| B4 | ticker.py:336-348 ExperienceDistiller 调用未移除 | 中 | 移除 experience_distiller 参数和调用,日志改为 debug 级空转提示 |
| B5 | skill_system.py / experience.py 未标记 deprecated | 低 | 文件头部加 `# DEPRECATED — §19 重设计,不再参与 skill 发现/加载` 注释 |
| B6 | SELF_IMPROVEMENT_REMINDER.md 引用残留 | 低 | AGENTS.md 中已标注废弃,但 system prompt 仍注入。从 workspace 文件列表中移除该文件 |
**B4 修复细节**
ticker.py 构造函数 `__init__` 接受 `experience_distiller` 参数(默认 None),tick() 中第 336-348 行有条件调用。修复方式:
- 保留参数(向后兼容),但条件块内加 `logger.debug("ExperienceDistiller deprecated per §19, skipping")` 后直接 return
- 不删除代码(P3 级清理时再做物理删除)
**B6 修复细节**
当前 Project Context 中注入了 `SELF_IMPROVEMENT_REMINDER.md` 的内容。该文件在 workspace-pangtong 中已不存在(被删),但 system prompt 模板仍引用它。修复方式:确认文件不存在即可——openclaw 会跳过不存在的注入文件。实际已无影响,标注为 resolved。
## 12. wiki-vault / 知识库参考实践映射