Skip to content

[Feature Request] Skill 自治理机制:从"静态文本"到"活的结构" #105570

Description

@erjhfh

[Feature Request] Skill 自治理机制:从"静态文本"到"活的结构"

背景

在使用 Hermes 的过程中,我发现 skill 系统存在一个结构性问题:skill 是静态文本文件,没有生命周期管理。这导致问题不断积累,需要人工定期清理。

本文档基于一次完整的 Hermes 系统熵减治理实践(2026-09-08),记录了问题的根源和建议的解决方案。


问题诊断

现象

问题类型 数量 案例
Skill 引用断裂 3 个 references/ 文件不存在
模型引用废弃 4 处 MiniLM → bge-m3 未同步
Cron 引用失效 1 处 已删除的 cron ID 仍在引用
描述质量低 1 个 27 字符无触发词
版本迭代堆积 19 个脚本 _v1~v5 长期并存
占位目录残留 3 个 只有 DESCRIPTION.md 无 SKILL.md
审计假阳性 96.8% skill-audit 报 468 个,真问题仅 15 个

根因

Skill 系统是被动的——它不会检查自己,不会修复自己,不会报告自己。

Skill 是静态 Markdown 文件
  ↓
没有依赖声明 → 引用坏了没人知道
  ↓
没有自验证 → 加载时不检查 references 是否存在
  ↓
没有版本收敛规则 → _v1~v5 长期并存
  ↓
没有废弃检测 → 模型废弃了没人管
  ↓
没有自报告 → 问题积累到人发现才处理
  ↓
人工清理 → 清理本身又引入新问题

建议方案:Skill 自治理机制

核心理念

Skill 不应该只是静态文本,而应该是"活的结构"——有依赖声明、有生命周期、有自检能力。

三层架构

第一层:Skill 元数据增强

当前 SKILL.md 的 frontmatter 只有 name/description/trigger 等基本信息。建议增加:

---
name: my-skill
version: 1.0.0
dependencies:
  scripts:
    - ~/.hermes/scripts/my_script.py
  references:
    - references/my_reference.md
  models:
    - bge-m3  # 如果废弃了,自动警告
  cron_jobs:
    - job_id: 9448b4acd34c  # 如果删除了,自动标记
lifecycle:
  created: 2026-09-08
  last_verified: 2026-09-08
  status: active | deprecated | archived
---

第二层:加载时自验证

Skill 加载时自动检查:

  1. References 存在性 → 不存在则报 broken ref
  2. Scripts 存在性 → 不存在则提示
  3. Cron ID 活跃性 → 不活跃则标记 stale
  4. 模型可用性 → 废弃则警告并建议替换
  5. 版本收敛性 → 有 _vN 后缀则提示归档旧版本

第三层:内建自检循环

Hermes 内建一个轻量级的 cron 任务(不是外部脚本),定期扫描所有 skill:

每小时/每日扫描
  ├─ 检查所有 skill 的 dependencies 是否有效
  ├─ 报告 broken refs / stale models / deprecated models
  ├─ 可选:自动修复(如删除已完成的 cron 引用)
  └─ 输出报告到 session / 推送给用户

为什么需要这个

当前方式的问题

方式 问题
外部 skill-audit 脚本 需要人主动运行,不是自动的
假阳性高(96.8%) 正则匹配型检测把版本号/日期都当过时
清理引入新问题 skill-audit 本身也会产生 stale 引用
不可持续 每次更新 Hermes 后需要重新跑

自治理的优势

优势 说明
实时性 问题产生时立刻知道,不是等人发现
准确性 检查真实状态(文件是否存在、cron 是否活跃),不是正则匹配
自动化 不需要人主动运行,Hermes 自己会做
可持续性 新 skill 创建时自动纳入管理

实施建议

Phase 1:元数据增强(低优先级,向后兼容)

  • 在 SKILL.md frontmatter 中增加可选的 dependencies 字段
  • 不破坏现有 skill 的兼容性

Phase 2:加载时验证(中优先级)

  • Skill 加载时检查 dependencies 是否有效
  • 如果无效,在 session 中提示用户

Phase 3:内建自检循环(高优先级)

  • Hermes 内建一个轻量级 cron 任务
  • 定期扫描所有 skill 的健康状态
  • 自动报告问题

证据

本次治理的完整数据:

  • 治理前:stale_items=468(96.8% 假阳性),broken_refs=2
  • 治理后:stale_items=0,broken_refs=0

但这不是可持续的——下次更新 Hermes 或创建新 skill 时,问题会再次积累。

真正的解决方案不是手动清理,而是让系统自己知道哪里有问题。


参考



记忆系统:同样的设计缺陷

在深入治理 Skill 系统时,我们发现记忆系统(fact_store + MEMORY.md)存在完全同构的问题——这是同一个架构级缺陷的两个变体。

事实(2026-09-08 实测)

系统 状态 说明
fact_store(结构化记忆) 只有 2 条事实 应该承载大量结构化知识,但严重稀疏
MEMORY.md(手写铁律) 15 条 混入了任务进度快照和工具观察
USER.md(用户偏好) 23 条 混入了 AI 行为约束(不属于用户偏好)
memory_lifecycle.py(每日 cron) ✅ 正常跑 但只能扫描已有的 2 条

观察到的具体污染

MEMORY.md 里不该有的内容

  • "熵减知识体系现状:12 篇笔记..." → 任务进度快照,不是铁律
  • "skill-audit v2 判定真问题时..." → 工具行为观察,应进 skill 文档

USER.md 里不该有的内容

  • "L4 事实数据库:~/macai/..." → AI 行为约束(不存 PDF),不是用户偏好

根因分析

记忆系统的问题与 Skill 系统完全同构

Skill 系统                    记忆系统
─────────────────────────────────────────
SKILL.md 静态文本             MEMORY.md 手写文本
  ↓                              ↓
没有依赖声明                    没有分类机制
  ↓                              ↓
引用坏了没人知道                铁律、任务进度、观察混在一起
  ↓                              ↓
没有自验证                      没有归属验证
  ↓                              ↓
问题积累到人发现才处理          需要人工审查才能发现污染

更关键的:fact_store 是被动写入系统

  • 没有自动沉淀机制
  • AI 必须主动调用 fact_store(action='add') 才能写入
  • 除非 AI 决定写,否则永远是空的

对比:

系统 触发机制 状态
MEMORY.md AI 主动决定用 memory 工具 15 条(够用但稀疏)
fact_store AI 主动决定用 fact_store 工具 2 条(严重稀疏)
lifecycle cron 每日扫描已有数据 只能管已有的 2 条

建议:记忆自治理机制

参照 Skill 自治理,记忆系统也需要三层:

第一层:记忆元数据增强

在 MEMORY.md / fact_store 的每条记忆增加:

- type: iron_rule | task_snapshot | tool_observation | user_pref
  owner: ai | user
  created: 2026-09-08
  last_verified: 2026-09-08
  source: manual | auto_extracted

第二层:写入时验证

在写入记忆时检查:

  1. 归属验证 → USER.md 里放 AI 约束 → 拒绝,重定向到 MEMORY.md
  2. 类型分类 → 任务进度快照不该进铁律区 → 拒绝,重定向到 fact_store
  3. 过期检测 → 12 个月未访问 → 标记为 cold

第三层:自动沉淀机制

这是最关键的一层——让系统主动从对话中提取事实:

每次对话后
  ├─ 检测"值得记住"的对话模式
  ├─ 提取为 fact → 写入 fact_store
  ├─ 检测"行为铁律" → 写入 MEMORY.md
  ├─ 冲突检测 → 与已有记忆矛盾时提示
  └─ 定期报告 → 推送"你的记忆新增了 3 条 fact"

证据

本次治理的完整数据(记忆系统):

  • 现状:fact_store=2 条,MEMORY.md=15 条,USER.md=23 条
  • 已发现污染:4 条错归属(2 条 MEMORY.md + 1 条 USER.md + 1 条 skill-audit 观察)
  • lifecycle 脚本状态:正常运行,但只能扫已有的 2 条

这跟 Skill 系统的证据是同一份治理实践——两个系统的缺陷都源于"静态文本无自治理"。

实施建议

Phase 1:记忆元数据增强(可选字段,向后兼容)
Phase 2:写入时验证(拒绝错归属)
Phase 3:自动沉淀机制(从对话提取事实)

Phase 3 是长期方向,但即使只做 Phase 1+2 也能显著减少污染。


总结

Skill 系统的熵增不是 bug,是设计缺陷——静态文本不应该承担生命周期管理的责任

建议 Hermes 将 skill 从"静态文本"升级为"活的结构",加入依赖声明、自验证和内建自检循环。这才是源头熵减治理——不是手动清理问题,而是让系统自己知道哪里有问题。


本提案由 Hermes 用户基于实际使用经验提交,欢迎讨论和改进。

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    P3Low — cosmetic, nice to havetool/skillsSkills system (list, view, manage)type/featureNew feature or request

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions