154 lines
5.8 KiB
Markdown
154 lines
5.8 KiB
Markdown
# 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(执行+联动) |