From c3faa570cacfdf803305320f97dd49af8c004ea3 Mon Sep 17 00:00:00 2001 From: root Date: Mon, 1 Jun 2026 10:00:16 +0800 Subject: [PATCH] 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 --- docs/core-training.md | 483 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 483 insertions(+) create mode 100644 docs/core-training.md diff --git a/docs/core-training.md b/docs/core-training.md new file mode 100644 index 0000000..936cb40 --- /dev/null +++ b/docs/core-training.md @@ -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 周) + +这样能快速搭建可工作的系统,再逐步优化。