docs: add core-training.md - three approaches for training the heuristic scheduler
- RL approach: MDP formulation, PPO, curriculum learning - LLM-driven approach: compact LLM fine-tuned as scheduler - Neuro-symbolic approach (recommended): symbolic rules (70%) + small neural policy (30%) + arbiter - Expression verifier training for Core's internal verification component - Comprehensive training pipeline combining all approaches - Evaluation metrics for Core performance
This commit is contained in:
483
docs/core-training.md
Normal file
483
docs/core-training.md
Normal file
@ -0,0 +1,483 @@
|
||||
# 调度 Core — 训练方案
|
||||
|
||||
## 概述
|
||||
|
||||
调度 Core 是 NextAgent 的"大脑"——它不处理原始数据,也不直接参与推理,而是作为**启发式调度决策引擎**协调四个子网。这使得 Core 的训练与子网的模型训练有本质区别。
|
||||
|
||||
### Core 不是深度学习模型
|
||||
|
||||
| 子网 | 训练方式 | 预训练/微调 |
|
||||
|------|---------|------------|
|
||||
| 路由与压缩子网 | 对比学习 + VAE + 蒸馏 | 标准 DL 训练 |
|
||||
| 记忆子网 | GNN + RL + 编解码 | 标准 DL 训练 |
|
||||
| 逻辑链路追踪子网 | SFT + RLHF + MCTS | 标准 DL 训练 |
|
||||
| LLM 子网 | SFT + RLHF | 标准 DL 训练 |
|
||||
| **调度 Core** | **强化学习 / 行为克隆 / 神经符号** | **决策引擎学习** |
|
||||
|
||||
Core 的核心能力是**做决策**——在给定当前状态(各子网返回的张量、置信度、历史记录)下,决定下一步:
|
||||
- 调哪个子网?
|
||||
- 传什么参数?
|
||||
- 是否需要重复调用?
|
||||
- 结果是否可信?
|
||||
|
||||
### Core 的学习目标
|
||||
|
||||
| 能力 | 说明 |
|
||||
|------|------|
|
||||
| 任务解析 | 从路由标签张量中理解用户意图,拆解子任务 |
|
||||
| 调度决策 | 在正确时机调正确的子网,避免无效循环 |
|
||||
| 冲突仲裁 | 子网返回矛盾时做出合理判断 |
|
||||
| 表达验证 | 从 LLM 的表达验证张量判断输出质量 |
|
||||
| 记忆中介 | 正确打包查询和新信息给记忆子网 |
|
||||
| 效率控制 | 在质量与延迟之间平衡(决定何时结束调度循环) |
|
||||
|
||||
---
|
||||
|
||||
## 训练方法一:强化学习(推荐)
|
||||
|
||||
### 方法论
|
||||
|
||||
将 Core 的调度决策建模为**马尔可夫决策过程(MDP)**:
|
||||
|
||||
```
|
||||
状态 S = (当前任务状态, 各子网返回张量的摘要, 置信度向量, 循环次数)
|
||||
动作 A = (目标子网, 调用参数, 是否结束循环)
|
||||
转移 P = 执行动作后子网返回新张量
|
||||
奖励 R = 任务完成质量 - 延迟惩罚 - 无效调用惩罚
|
||||
```
|
||||
|
||||
### 状态空间设计
|
||||
|
||||
```
|
||||
State = {
|
||||
"task_type": # 任务类型(路由子网标签)
|
||||
"memory_available": # 是否有相关记忆
|
||||
"memory_confidence": # 记忆检索置信度
|
||||
"reasoning_confidence": # 逻辑推理置信度
|
||||
"reasoning_consistency": # 推理结果一致性
|
||||
"expression_confidence": # LLM 表达验证置信度
|
||||
"iteration": # 当前循环次数
|
||||
"max_iterations": # 最大允许次数
|
||||
"elapsed_time": # 已耗时
|
||||
"conflict_flag": # 是否存在矛盾
|
||||
}
|
||||
```
|
||||
|
||||
### 动作空间设计
|
||||
|
||||
```
|
||||
Action = {
|
||||
"subnet": "routing | memory | logic | llm | stop",
|
||||
"params": {
|
||||
"query_type": "initial | deep | cross_verify",
|
||||
"context_depth": "shallow | medium | deep",
|
||||
"priority": "normal | urgent"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### 奖励函数
|
||||
|
||||
```
|
||||
R = R_task + R_efficiency + R_penalty
|
||||
|
||||
R_task = 任务完成度 × w1
|
||||
- 推理结果准确 +1,部分正确 +0.5,错误 -1
|
||||
- LLM 表达验证通过 +0.5
|
||||
|
||||
R_efficiency = -延迟惩罚 × w2
|
||||
- 每增加一次迭代 -0.1
|
||||
- 超过最大迭代 -1
|
||||
|
||||
R_penalty =
|
||||
- 冗余调用(调用子网但结果未使用)-0.3
|
||||
- 矛盾未检测 -0.5
|
||||
- 过早停止导致结果错误 -0.8
|
||||
```
|
||||
|
||||
### 训练流程
|
||||
|
||||
```
|
||||
阶段 1:离线数据收集
|
||||
├── 手动标注专家调度轨迹
|
||||
│ (路由→记忆→推理→LLM 等序列)
|
||||
├── 记录每次调用的上下文状态和结果
|
||||
└── 构建初始数据集 (S, A, R)
|
||||
|
||||
阶段 2:行为克隆(预训练)
|
||||
├── 用专家轨迹训练初始策略网络
|
||||
├── 监督学习:输入 S → 输出 A
|
||||
├── 损失函数:交叉熵
|
||||
└── 训练 100k 步
|
||||
|
||||
阶段 3:在线 RL 训练(PPO / DQN)
|
||||
├── 在模拟环境中运行完整系统
|
||||
├── 每次任务结束计算奖励
|
||||
├── 收集经验回放池 (S, A, R, S')
|
||||
├── PPO 算法优化策略
|
||||
└── 训练 500k 步(或收敛为止)
|
||||
|
||||
阶段 4:课程学习
|
||||
├── 简单任务 → 复杂任务逐步推进
|
||||
├── Level 1: 单轮查询(路由→记忆→LLM)
|
||||
├── Level 2: 多步推理(路由→记忆→推理→LLM)
|
||||
├── Level 3: 需要回溯(中间需再次调路由/记忆)
|
||||
└── Level 4: 矛盾检测与冲突仲裁
|
||||
```
|
||||
|
||||
### 网络架构
|
||||
|
||||
推荐使用**小型 Transformer** 或 **MLP + Attention** 作为策略网络:
|
||||
|
||||
```
|
||||
State 张量 (768维)
|
||||
│
|
||||
▼
|
||||
┌──────────────────┐
|
||||
│ 状态编码器 │
|
||||
│ MLP(768→256) │
|
||||
│ LayerNorm │
|
||||
└──────┬───────────┘
|
||||
│
|
||||
▼
|
||||
┌──────────────────┐
|
||||
│ 历史注意力层 │
|
||||
│ 之前的动作序列 │
|
||||
│ Transformer × 2 │
|
||||
│ num_heads=4 │
|
||||
└──────┬───────────┘
|
||||
│
|
||||
▼
|
||||
┌──────────────────┐
|
||||
│ π 头 (Policy) │
|
||||
│ 输出: 子网选择 │
|
||||
│ 维度: 5 (4子网+停)│
|
||||
└──────────────────┘
|
||||
│
|
||||
▼
|
||||
┌──────────────────┐
|
||||
│ V 头 (Value) │
|
||||
│ 输出: 状态价值 │
|
||||
│ 维度: 1 │
|
||||
└──────────────────┘
|
||||
```
|
||||
|
||||
### 难点与对策
|
||||
|
||||
| 难点 | 对策 |
|
||||
|------|------|
|
||||
| 奖励稀疏(只有任务结束时才有明确奖励) | 过程奖励模型(PRM)+ 中间奖励(子网调用是否产生新信息) |
|
||||
| 动作空间离散导致的搜索低效 | 课程学习 + 动作屏蔽(排除明显无用的调用) |
|
||||
| 状态空间高维 | 状态压缩(只保留关键张量的摘要统计量) |
|
||||
| 训练不稳定 | PPO 的 KL 散度约束 + 经验回放 + 目标网络固定 |
|
||||
|
||||
---
|
||||
|
||||
## 训练方法二:LLM 驱动的 Core
|
||||
|
||||
### 方法论
|
||||
|
||||
用一个**紧凑型 LLM**(如 Qwen 2.5-1.5B / Llama 3.2-3B)作为 Core 的推理引擎,微调为调度专家。
|
||||
|
||||
### 输入格式
|
||||
|
||||
将当前状态格式化为结构化文本,输入 LLM:
|
||||
|
||||
```
|
||||
当前任务:用户查询北京天气
|
||||
子网状态:
|
||||
- 路由标签:{类型: 天气查询, 实体: ["北京"], 时间: "今天"}
|
||||
- 记忆检索:{命中: true, 相关实体: ["北京_天气偏好"], 置信度: 0.92}
|
||||
- 推理结果:{状态: 待推理, 置信度: -}
|
||||
- 当前迭代:第 1 轮 / 最多 10 轮
|
||||
|
||||
请决定下一步操作:
|
||||
A. 调逻辑推理子网(已知信息充足)
|
||||
B. 调路由子网获取更多特征(需要详细时间信息)
|
||||
C. 调记忆子网深度检索(需要历史对比)
|
||||
D. 直接送 LLM 表达(无需推理)
|
||||
E. 终止
|
||||
```
|
||||
|
||||
### 输出格式
|
||||
|
||||
LLM 输出格式化的调度决策:
|
||||
|
||||
```json
|
||||
{
|
||||
"action": "step_A",
|
||||
"subnet": "logic_trace",
|
||||
"params": {
|
||||
"mode": "standard_reason",
|
||||
"context_included": ["memory", "routing"]
|
||||
},
|
||||
"reasoning": "用户查询明确,路由标签已提取所有实体,记忆也有相关偏好,可以开始推理了"
|
||||
}
|
||||
```
|
||||
|
||||
### 微调方案
|
||||
|
||||
| 阶段 | 数据 | 方法 |
|
||||
|------|------|------|
|
||||
| SFT | 10万条专家调度轨迹 | LoRA 微调 |
|
||||
| DPO | 调度结果偏好对(好调度 vs 差调度) | 直接偏好优化 |
|
||||
| RFT | 强化反馈微调 | 基于在线反馈的迭代优化 |
|
||||
|
||||
### 优势 vs 劣势
|
||||
|
||||
| 方面 | RL 方法 | LLM 驱动 |
|
||||
|------|---------|---------|
|
||||
| 可解释性 | 黑箱策略 | 高(LLM 输出推理过程) |
|
||||
| 泛化能力 | 需针对新任务重训 | 强(LLM 已预训练泛化能力) |
|
||||
| 延迟 | 毫秒级 | 几十毫秒级 |
|
||||
| 资源消耗 | 小网络 | LLM 推理成本 |
|
||||
| 稳定性 | 训练不稳定 | 微调稳定 |
|
||||
| 复杂度 | 需 RL 基础设施 | 只需 LLM 微调 |
|
||||
|
||||
---
|
||||
|
||||
## 训练方法三:神经符号方法(推荐混合方案)
|
||||
|
||||
### 方法论
|
||||
|
||||
结合手写规则的可解释性与神经网络的适应性:
|
||||
|
||||
```
|
||||
┌──────────────────────────────────────────────┐
|
||||
│ Core 调度引擎 (神经符号) │
|
||||
│ │
|
||||
│ ┌──────────────────┐ ┌──────────────────┐ │
|
||||
│ │ 符号调度器 (70%) │ │ 神经策略 (30%) │ │
|
||||
│ │ │ │ │ │
|
||||
│ │ 手写规则库: │ │ 小 MLP 网络 │ │
|
||||
│ │ × 路由→先查记忆 │ │ 覆盖符号规则 │ │
|
||||
│ │ × 记忆→然后推理 │ │ 无法处理的 │ │
|
||||
│ │ × 推理→送LLM表达 │ │ 模糊/新情况 │ │
|
||||
│ │ × 低于阈值→回溯 │ │ │ │
|
||||
│ │ │ │ 输入: 状态张量 │ │
|
||||
│ │ 确定性,可解释 │ │ 输出: 规则例外 │ │
|
||||
│ │ 覆盖常见场景 │ │ 建议 │ │
|
||||
│ └──────────────────┘ └──────────────────┘ │
|
||||
│ │ │
|
||||
│ ▼ │
|
||||
│ ┌─────────────────────┐ │
|
||||
│ │ 仲裁器 (Arbiter) │ │
|
||||
│ │ 符号 vs 神经决策 │ │
|
||||
│ │ 冲突时符号优先 │ │
|
||||
│ └─────────────────────┘ │
|
||||
└──────────────────────────────────────────────┘
|
||||
```
|
||||
|
||||
### 符号规则库示例
|
||||
|
||||
```python
|
||||
rules = [
|
||||
# 规则1: 新任务先查记忆
|
||||
Rule(
|
||||
condition=State.task_type == "new" and State.memory_queried == False,
|
||||
action=Action(subnet="memory", params=QueryParams(mode="initial"))
|
||||
),
|
||||
|
||||
# 规则2: 有记忆后送推理
|
||||
Rule(
|
||||
condition=State.memory_confidence > 0.7 and State.reasoning_done == False,
|
||||
action=Action(subnet="logic_trace", params=ReasonParams(mode="standard"))
|
||||
),
|
||||
|
||||
# 规则3: 推理置信度不足时回溯
|
||||
Rule(
|
||||
condition=State.reasoning_confidence < 0.5 and State.iteration < MAX_ITER,
|
||||
action=Action(subnet="routing", params=ExtractParams(mode="detail"))
|
||||
),
|
||||
|
||||
# 规则4: 结果可靠时送 LLM 表达
|
||||
Rule(
|
||||
condition=State.reasoning_confidence >= 0.7 or State.iteration >= MAX_ITER - 1,
|
||||
action=Action(subnet="llm", params=ExpressParams())
|
||||
),
|
||||
|
||||
# 规则5: 表达验证不通过则重新推理
|
||||
Rule(
|
||||
condition=State.verify_confidence < 0.6 and State.retry_count < 2,
|
||||
action=Action(subnet="logic_trace", params=ReasonParams(mode="rethink"))
|
||||
),
|
||||
|
||||
# 规则6: 本轮结束后通知路由处理残留数据
|
||||
Rule(
|
||||
condition=State.round_ended == True,
|
||||
action=Action(subnet="routing", params=FlushParams())
|
||||
),
|
||||
]
|
||||
```
|
||||
|
||||
### 神经策略训练
|
||||
|
||||
```python
|
||||
class NeuralOverride(nn.Module):
|
||||
"""覆盖符号规则无法处理的模糊情况"""
|
||||
|
||||
def __init__(self):
|
||||
super().__init__()
|
||||
self.encoder = nn.Sequential(
|
||||
nn.Linear(128, 64),
|
||||
nn.ReLU(),
|
||||
nn.Linear(64, 32)
|
||||
)
|
||||
self.uncertainty_head = nn.Linear(32, 1) # 不确定性估计
|
||||
self.override_head = nn.Linear(32, 3) # 覆盖建议
|
||||
|
||||
def forward(self, state):
|
||||
h = self.encoder(state)
|
||||
uncertainty = torch.sigmoid(self.uncertainty_head(h))
|
||||
override = torch.softmax(self.override_head(h), dim=-1)
|
||||
return uncertainty, override
|
||||
```
|
||||
|
||||
### 训练策略
|
||||
|
||||
1. **符号规则**:手工编写,无需训练,覆盖 70% 常见场景
|
||||
2. **神经策略**:仅在符号规则的"确定性边界"附近训练
|
||||
- 数据来源:符号规则产生低确定性(0.4~0.7)的边界情况
|
||||
- 训练目标:学习何时打破规则
|
||||
- 训练数据量:仅需 1~5 万条(远少于纯 RL 方案)
|
||||
3. **仲裁器**:确定性阈值法
|
||||
- 符号确定性 > 0.7 → 走符号路径
|
||||
- 符号确定性 < 0.4 → 走神经路径
|
||||
- 0.4~0.7 → 加权融合
|
||||
|
||||
### 推荐理由
|
||||
|
||||
| 考量 | 为什么神经符号方案适合 Core |
|
||||
|------|---------------------------|
|
||||
| Core 的决策有大量确定性常识 | "新任务先查记忆"是明显的规则,无需学习 |
|
||||
| 边界情况需要灵活性 | 模糊场景需要神经策略适应 |
|
||||
| 可解释性要求 | Core 的决策应该能被人类理解 |
|
||||
| 训练成本 | 符号规则零成本,神经策略训练数据少 |
|
||||
| 鲁棒性 | 符号规则保证基础行为不崩溃 |
|
||||
| 可迭代 | 发现问题后直接修改符号规则即可 |
|
||||
|
||||
---
|
||||
|
||||
## 表达验证器训练(Core 内部组件)
|
||||
|
||||
Core 的一个核心职责是**接收 LLM 的表达验证张量,判断输出质量**。这本质上是一个**二分类/回归问题**。
|
||||
|
||||
### 训练数据集
|
||||
|
||||
```json
|
||||
{
|
||||
"input": {
|
||||
"reasoning_path": "{推理路径张量摘要}",
|
||||
"expression_tensor": "{表达验证张量}",
|
||||
"original_intent": "用户问北京今天天气"
|
||||
},
|
||||
"label": {
|
||||
"correctness": 0.95,
|
||||
"completeness": 1.0,
|
||||
"faithfulness": 0.92,
|
||||
"overall_pass": true
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### 模型
|
||||
|
||||
小型分类器(MLP),输入为表达验证张量 + 推理路径张量的联合特征:
|
||||
|
||||
```
|
||||
输入: 表达验证张量 (768维) + 推理路径张量 (768维)
|
||||
│
|
||||
▼
|
||||
MLP(1536 → 256 → 64 → 3)
|
||||
│
|
||||
├── 正确性得分 (0~1, sigmoid)
|
||||
├── 完整度得分 (0~1, sigmoid)
|
||||
└── 通过/不通过 (binary)
|
||||
```
|
||||
|
||||
### 训练
|
||||
|
||||
- 数据:人工标注 1 万条 LLM 输出-验证对
|
||||
- 损失:二元交叉熵(通过/不通过)+ MSE(正确性/完整度)
|
||||
- 训练 50 epochs
|
||||
- 评估:验证准确率 ≥ 95%
|
||||
|
||||
---
|
||||
|
||||
## 综合训练流程
|
||||
|
||||
```
|
||||
Core 训练总流程
|
||||
│
|
||||
┌───────────────────┴──────────────────────┐
|
||||
│ │
|
||||
符号规则编写 神经策略训练
|
||||
│ │
|
||||
┌────┴────┐ ┌──────┴────────┐
|
||||
│ 规则1~N │ ┌────────────────┤ │
|
||||
│ 手工编写 │ │ │ │
|
||||
│ 单元测试 │ ▼ │ │
|
||||
└─────────┘ ┌──────────────────┐ │ │
|
||||
│ 阶段1: 行为克隆 │ │ │
|
||||
│ 10K 专家轨迹 │ │ │
|
||||
│ SFT 预训练 │ │ │
|
||||
└────────┬─────────┘ │ │
|
||||
▼ │ │
|
||||
┌──────────────────┐ │ │
|
||||
│ 阶段2: 在线 RL │ │ │
|
||||
│ 模拟环境 │ │ │
|
||||
│ PPO 优化 │ │ │
|
||||
│ 500K 步 │ │ │
|
||||
└────────┬─────────┘ │ │
|
||||
▼ │ │
|
||||
┌──────────────────┐ │ │
|
||||
│ 阶段3: 边界训练 │ │ │
|
||||
│ 符号→神经交叠区 │ │ │
|
||||
│ 1~5万条边界数据 │ │ │
|
||||
└────────┬─────────┘ │ │
|
||||
│ │ │
|
||||
└─────────────────┘ │
|
||||
│ │
|
||||
▼ │
|
||||
┌──────────────────┐ │
|
||||
│ 仲裁器整合 │ │
|
||||
│ 确定性阈值调优 │ │
|
||||
│ 端到端验证 │ │
|
||||
└──────┬───────────┘ │
|
||||
│ │
|
||||
▼ │
|
||||
┌──────────────────┐ │
|
||||
│ 表达验证器训练 │ │
|
||||
│ 1万条标注数据 │ │
|
||||
└──────────────────┘ │
|
||||
│ │
|
||||
▼ │
|
||||
┌──────────────────┐ │
|
||||
│ 集成测试 && 上线 │ │
|
||||
│ 与四个子网联调 │ │
|
||||
└──────────────────┘ │
|
||||
```
|
||||
|
||||
## 评估指标体系
|
||||
|
||||
| 指标 | 计算方式 | 目标 |
|
||||
|------|----------|------|
|
||||
| 调度正确率 | 调度序列与专家一致的比例 | ≥ 85% |
|
||||
| 端到端任务成功率 | 完整链路最终结果正确 | ≥ 90% |
|
||||
| 冗余调用率 | 无产出调用的比例 | ≤ 5% |
|
||||
| 平均调度次数 | 每次任务平均调度子网次数 | ≤ 5 次 |
|
||||
| 平均响应延迟 | 从输入到输出的总时间 | ≤ 2s |
|
||||
| 冲突检测率 | 能识别出的子网矛盾比例 | ≥ 95% |
|
||||
| 表达验证准确率 | 判断 LLM 输出正确性的准确率 | ≥ 95% |
|
||||
| 记忆中介准确率 | Core 传递给记忆子网的信息完整性 | ≥ 98% |
|
||||
|
||||
## 建议
|
||||
|
||||
对于 NextAgent 的初期实现,推荐**神经符号混合方案**:
|
||||
|
||||
1. **第 1 阶段**:纯符号规则驱动 Core(零训练成本,1 天完成)
|
||||
2. **第 2 阶段**:在边界数据上训练小神经策略(1 周)
|
||||
3. **第 3 阶段**:加入表达验证器训练(3 天)
|
||||
4. **第 4 阶段**:逐步替换符号规则为 RL 优化的决策(2 周)
|
||||
|
||||
这样能快速搭建可工作的系统,再逐步优化。
|
||||
Reference in New Issue
Block a user