混合版本的 OME 队列可以将一个空的 `approach` 传入技能提取
PR #393 扩展了 `AgentCaseExtracted` 和 `SkillClusterUpdated`,添加了 case-body 字段,所有默认值都设置为 0,因此 OME 的 SQLite `run_record` 队列中尚未处理的 1.2.3 事件在升级时仍然会进行反序列化。纯粹的后向兼容路径是安全的:1.2.2 的 `SkillClusterUpdated` 使用 `quality_score = 0.0` 进行反序列化,而 everalgo 在 `agent_memory/skill.py:189-199` 处进行了短路,返回了 `[]`,没有调用 LLM。泄漏是一个事件的上游。一个尚未处理的 1.2.2 **`AgentCaseExtracted`** 使用 `approach = ""` / `key_insight = None` 但具有 **真实的** `quality_score` 进行反序列化,然后 `trigger_skill_clustering` 发出了一个完全符合 1.2.3 规范的 `SkillClusterUpdated`,其中 `approach = ""` 与 `quality_score = 0.8` 一起出现,这清除了 0.2 的下限。LLM 被要求从一个具有空 `approach` 的 `task_intent` 中提炼技能;如果它响应 `update`,则 `_persist_skill` → `write_main` 将完全替换 `SKILL.md` 的正文 - 393 号损坏类存在于此处,以防止此情况发生。窗口狭窄(升级时带有待处理的工作),并且 `approach = ""` 不是一个可靠的哨兵:`AgentCase.approach` 是一个必需的 `str`,没有进行正则化(`memory/models.py:291`),而不同于 `key_insight`,`from_algo` 会将空值正则化为 `None`(`:321-322`)。因此,一个合法的空 `approach` 与后向兼容默认值无法区分开来。选项包括:在 `extract_agent_skill` 中添加 `logger.warning` + 早退,当 `not event.approach` 时;在事件中添加一个版本字段;或者作为升级步骤来清空 OME 队列。第一种方法成本低,但存在虚假正面风险,值得考虑。
内容来源: EverMind-AI/EverOS