memoryweave/G7-IMPLEMENTATION.md

154 lines
5.8 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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.8degree +5
- 若有关联且 skill.ETA < 0.5decay_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(执行+联动)