5.2 KiB
5.2 KiB
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 性质不同,但在召回和路由阶段可以统一成候选对象:
{
"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:是否过慢
可组合为:
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. 核心原则
- 先可观测,再可学习
- 先学路由,再学大脑
- 先做分层归因,再做端到端优化
- 优化“何时依赖什么”,而不是盲目优化“模型看起来更聪明”