# G7: 遗忘 + 技能系统 — 实施计划 > 核心理念:记忆是原料,Hermes skill 是执行体,Bayesian 是裁判,三者构成自举循环。 ## 现状 | 组件 | 状态 | 说明 | |------|------|------| | Forgetter | ✅ 完成 | E4.3 刚修好 | | BayesianSkillManager | ✅ 存在 | Beta-Bernoulli 模型,纯内存 | | SkillManager | ✅ 存在 | List/Trial API,纯内存 | | Skill 持久化 | ❌ | 重启丢失 | | Skill 生成 | ❌ | 无自动从记忆生成机制 | | Skill 执行 | ❌ | 无 execute API | ## 目标架构 ``` [高质量记忆] --distill/高频recall--> [Skill候选] | [LLM结晶:生成prompt模板] | [Skill执行成功] <--execute-- [Hermes Skill 执行] | | | [trial反馈] | v | [Bayesian更新ETA] ────────────> [ETA>0.8: active] | [active skill → 关联记忆 degree+5] | [ETA<0.5: retired → decay_rate×1.2] ``` ## 阶段划分 ### G7.1 — 技能持久化(基础) **扩展 BetaSkill**(`skill_bayes.go`): - 新增字段:`PromptTemplate string`、`LinkedMemoryIDs []string`、`LinkedEntities []string`、`CreatedAt time.Time` - 新增 Redis HSET:`zhiyi:skills` → `{name: json(BetaSkill)}` **扩展 BayesianSkillManager**(`skill_bayes.go`): - `EnableRedisPersistence()` — 启动时从 Redis 加载,重启不丢 - `persistSkill(skill)` — 每次 RecordTrial 后同步写 Redis - `LoadFromRedis()` — 启动时加载所有 skill **新增 API**(`skill_crud.go`): - `POST /api/v1/skills` — 手动注册新 skill(含 prompt_template) - `GET /api/v1/skills/{name}` — 获取单个 skill 详情 - `DELETE /api/v1/skills/{name}` — 删除 skill **文件变更**: - `go/internal/api/routes/skill_bayes.go` — 扩展结构体 + 持久化 - `go/internal/api/routes/skill_crud.go` — 新建,CRUD API ### G7.2 — 技能生成(LLM 结晶) **新增 `skill_crystallize.go`**: - `CrystallizeFromMemory(mem *MemoryRecord) (*BetaSkill, error)` — 将高质量记忆转为 skill - 调用 LLM 生成 prompt 模板(从 content 提取参数占位符) - 从 content 提取关键实体作为 LinkedEntities - `SuggestSkillCandidates(limit int) []*MemoryRecord` — 找出适合结晶的记忆 - 条件:`recall_count >= 5` AND `quality_score >= 0.7` AND `tier != "core"` AND 未关联任何 skill **Consolidation 集成**(`consolidation_pipe.go`): - 每次 consolidation 后,对候选记忆调用 `CrystallizeFromMemory` **新增 API**: - `POST /api/v1/skills/crystallize` — 手动触发结晶 - `GET /api/v1/skills/candidates` — 查看当前候选列表 **LLM Prompt(生成 prompt 模板)**: ``` 给定记忆内容,生成一个可执行的 prompt 模板: 1. 识别记忆中的可变参数,用 {param} 格式标注 2. 生成一段可直接执行的指令文本 3. 提取 3-5 个关键实体作为关联实体 记忆内容:{content} ``` ### G7.3 — 技能执行 + 反馈闭环 **执行 API**(`skill_execute.go`): - `POST /api/v1/skills/{name}/execute` - Body: `{"params": {"key": "value"}, "context": "optional context override"}` - 加载 linked memories 作为 context - 调用 Hermes agent(`delegate_task`)执行 prompt - 返回执行结果 **与 BayesianSkills 联动**: - 执行成功 → `BayesianSkills.RecordTrial(name, true)` - 执行失败 → `BayesianSkills.RecordTrial(name, false)` - 若 `ETA < 0.5`:对 linked memories 的 decay_rate ×1.2(加速遗忘) **与遗忘联动**: - `admin.go` Forget 函数扩展: - 扫描记忆时,检查是否有 active skill 关联 - 若有关联且 skill.ETA > 0.8:degree +5 - 若有关联且 skill.ETA < 0.5:decay_rate ×1.2 **新增 API**: - `POST /api/v1/skills/{name}/execute` — 执行 skill ## 技术细节 ### Redis Schema ``` zhiyi:skills → HASH {skill_name: JSON(BetaSkill)} zhiyi:skill_meta → HASH {skill_name: JSON(SkillMeta)} # LinkedMemoryIDs, LinkedEntities ``` ### BetaSkill 扩展结构 ```go type BetaSkill struct { Name string `json:"name"` Alpha float64 `json:"alpha"` Beta float64 `json:"beta"` Trials int `json:"trials"` Successes int `json:"successes"` ETA float64 `json:"eta"` Status string `json:"status"` // active / probation / retired LastUpdated time.Time `json:"last_updated"` // G7 新增 PromptTemplate string `json:"prompt_template,omitempty"` LinkedMemoryIDs []string `json:"linked_memory_ids,omitempty"` LinkedEntities []string `json:"linked_entities,omitempty"` CreatedAt time.Time `json:"created_at"` } ``` ## 验证计划 1. **G7.1 验证**:注册 skill → 重启 Go API → skill 仍在 Redis 2. **G7.2 验证**:POST `/api/v1/skills/crystallize` → skill 生成,prompt_template 非空 3. **G7.3 验证**: - `POST /api/v1/skills/{name}/execute` → 返回执行结果 - trial 反馈 → Bayesian ETA 更新 - ETA > 0.8 → linked memory 保护性增强 ## 文件清单 | 文件 | 操作 | 说明 | |------|------|------| | `go/internal/api/routes/skill_bayes.go` | 修改 | 扩展结构体 + Redis 持久化 | | `go/internal/api/routes/skill_crud.go` | 新建 | CRUD API | | `go/internal/api/routes/skill_execute.go` | 新建 | 执行 API + 反馈闭环 | | `go/internal/api/routes/skill_crystallize.go` | 新建 | LLM 结晶逻辑 | | `go/internal/api/server.go` | 修改 | 注册新路由 | ## 实施顺序 1. G7.1(持久化)→ 2. G7.2(生成)→ 3. G7.3(执行+联动)