5.8 KiB
5.8 KiB
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 后同步写 RedisLoadFromRedis()— 启动时加载所有 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 >= 5ANDquality_score >= 0.7ANDtier != "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 - 返回执行结果
- Body:
与 BayesianSkills 联动:
- 执行成功 →
BayesianSkills.RecordTrial(name, true) - 执行失败 →
BayesianSkills.RecordTrial(name, false)- 若
ETA < 0.5:对 linked memories 的 decay_rate ×1.2(加速遗忘)
- 若
与遗忘联动:
admin.goForget 函数扩展:- 扫描记忆时,检查是否有 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 扩展结构
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"`
}
验证计划
- G7.1 验证:注册 skill → 重启 Go API → skill 仍在 Redis
- G7.2 验证:POST
/api/v1/skills/crystallize→ skill 生成,prompt_template 非空 - 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 |
修改 | 注册新路由 |
实施顺序
- G7.1(持久化)→ 2. G7.2(生成)→ 3. G7.3(执行+联动)