Files
memabra/docs/ARCHITECTURE.md
2026-04-15 11:06:05 +08:00

219 lines
5.2 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.
# Architecture
## 1. 问题定义
我们要解决的不是“怎样让模型记住更多”,而是:
当 agent 遇到一个任务时,怎样在有限上下文、有限工具预算和有限时间下,快速决定是否要调用 memory、skill、tool并让这个决策过程能够被训练和修正。
## 2. 系统总览
系统采用四层架构。
### 2.1 Retrieval Layer候选召回层
输入:
- 当前用户任务
- 对话短摘要
- 当前环境状态
- 失败历史 / 最近修正
输出:
- top-k memory candidates
- top-k skill candidates
- top-k tool candidates
职责:
- 从不同来源召回候选对象
- 统一为标准候选格式
- 不做最终决策,只做缩小搜索空间
### 2.2 Policy Layer直觉 / 路由层)
输入:
- 当前任务表示
- 候选对象集合
- 历史选择特征
- 成本与风险信号
输出:
- 直接回答
- 读取某条 memory
- 加载某个 skill
- 调用某个 tool
- 组合动作(如先 skill 后 tool
- 请求澄清
职责:
- 模拟“直觉”
- 先做快速动作选择
- 后续可从规则逐步升级到分类器、reranker、bandit、RL policy
### 2.3 Execution Layer执行层
职责:
- 注入记忆到上下文
- 加载 skill 指令
- 调用真实工具
- 记录执行步骤、耗时、报错、产出
### 2.4 Evaluation Layer反馈 / 归因层)
职责:
- 判断任务是否成功
- 分析步骤数、重试数、错误率、用户修正次数
- 拆解 reward
- 产生可训练轨迹
没有这一层,就没有真正的“学习”,只有玄学调参。
## 3. 统一对象模型
虽然 memory、skill、tool 性质不同,但在召回和路由阶段可以统一成候选对象:
```json
{
"id": "string",
"type": "memory|skill|tool",
"title": "string",
"summary": "string",
"triggers": ["string"],
"cost": 0.0,
"confidence": 0.0,
"success_rate": 0.0,
"freshness": 0.0,
"risk": 0.0,
"embedding": "vector-ref",
"tags": ["string"],
"source": "user|system|generated|external"
}
```
注意:统一的是候选接口,不是语义本体。
三类对象必须保持边界:
- memory 存事实
- skill 存程序
- tool 存动作能力
## 4. 记忆系统分层
### 4.1 Semantic Memory事实记忆
例如:
- 用户偏好
- 机器环境
- 项目约定
- API 限制
### 4.2 Procedural Memory程序性记忆
即 skill
- 某类任务的处理流程
- 踩坑经验
- 验证步骤
### 4.3 Episodic Memory情景记忆
- 某次任务的具体轨迹
- 当时用了什么资源
- 为什么成功或失败
### 4.4 Working Memory工作记忆
- 当前任务临时状态
- 本轮推理中间产物
- 不应直接沉淀为长期记忆
## 5. 训练策略:先外部策略,后端到端
### 5.1 Phase A不改基础模型权重
先训练一个小型策略器,决定:
- 要不要查记忆
- 查哪类记忆
- 要不要 skill
- 先用哪个工具
可选实现:
- 规则 + 分数融合
- 轻量分类器
- reranker
- contextual bandit
### 5.2 Phase B从轨迹中学 reranking / routing
训练输入:
- 任务上下文
- 候选对象集合
- 实际动作
- 结果 reward
训练目标:
- 最大化任务完成率
- 最小化无效调用
- 减少用户重复提供信息
- 减少不必要的上下文膨胀
### 5.3 Phase C端到端实验
只有当以下条件成立,才值得考虑:
- 已有高质量轨迹数据
- 能做 credit assignment
- 有稳定的离线评估环境
- 能控制灾难性遗忘
## 6. Feedback & Reward 设计
reward 不能只看任务是否成功。要拆成多项:
- task_success最终是否完成
- efficiency用了多少步
- retrieval_hit是否命中关键 memory/skill/tool
- user_correction_penalty用户是否纠正
- tool_error_penalty是否触发无效工具调用
- context_cost_penalty上下文是否膨胀过度
- latency_penalty是否过慢
可组合为:
```text
R = a*task_success + b*retrieval_hit - c*tool_error - d*user_correction - e*latency - f*context_cost
```
## 7. 关键难点
### 7.1 Credit Assignment
成功了,到底是谁的功劳?
要记录候选集、最终选择、未选备选项,才能做反事实分析。
### 7.2 False Reinforcement
错误记忆被反复命中,会自我强化。
需要:
- 置信度
- 可撤销
- 最近验证时间
- 来源追踪
### 7.3 Exploitation vs Exploration
老选最稳的对象会变保守,永远学不到新模式。
需要安全探索机制。
### 7.4 Type Boundary Collapse
如果把 memory、skill、tool 混成一个大向量池,系统会越来越糊。
## 8. 推荐 MVP
### MVP-1可观测系统
- 定义对象 schema
- 定义事件 schema
- 统一记录轨迹
- 做基础检索
- 用规则路由
### MVP-2轻量学习型路由
- 加入候选打分器
- 从优秀轨迹训练动作选择器
- 做离线回放评估
### MVP-3在线自适应
- 使用 bandit / preference updates
- 根据任务结果微调路由策略
### MVP-4端到端试验场
- 小规模实验性训练
- 与分层方案对比
- 验证是否真有收益
## 9. 核心原则
1. 先可观测,再可学习
2. 先学路由,再学大脑
3. 先做分层归因,再做端到端优化
4. 优化“何时依赖什么”,而不是盲目优化“模型看起来更聪明”