From ee825db818be9e885bd2023af89f6a626b84f5bd Mon Sep 17 00:00:00 2001 From: cfdaily Date: Thu, 18 Jun 2026 22:53:32 +0800 Subject: [PATCH] =?UTF-8?q?[moz]=20docs(=C2=A719):=20=E8=A1=A5=E5=85=85=20?= =?UTF-8?q?S3-S5=20cron=20=E9=85=8D=E7=BD=AE=E6=96=B9=E6=A1=88=20+=20?= =?UTF-8?q?=E4=B8=80=E8=87=B4=E6=80=A7=E5=81=8F=E5=B7=AE=E4=BF=AE=E5=A4=8D?= =?UTF-8?q?=E6=B8=85=E5=8D=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit §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 引用残留(实际已无影响) --- .../19-skill-lifecycle-and-experience-loop.md | 147 +++++++++++++++++- 1 file changed, 146 insertions(+), 1 deletion(-) diff --git a/docs/design/19-skill-lifecycle-and-experience-loop.md b/docs/design/19-skill-lifecycle-and-experience-loop.md index 665db21..7dcae21 100644 --- a/docs/design/19-skill-lifecycle-and-experience-loop.md +++ b/docs/design/19-skill-lifecycle-and-experience-loop.md @@ -465,7 +465,152 @@ IMPROVE(每周 cron,庞统执行) | S5 | 实现 IMPROVE cron:JSONL 引用追踪 + 淘汰报告(每周) | 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": "", + "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.md:agent 按 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. 逐个审查 proposal:approve / 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),最后 S5(IMPROVE)。 + +创建后验证:`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 / 知识库参考实践映射