note

  • GLM5:海量通用语料打底 → 长上下文和 Agent 数据强化 → 用监督学习塑形 → 用多阶段 RL 提升推理和执行能力 → 最后用蒸馏把各阶段能力重新“缝合”起来,避免遗忘
  • thinking模式:
    • 单轮内部:是不是支持 interleaved thinking。也就是一边想、一边调工具、拿到结果再想。
    • 跨轮之间:是不是支持 preserved thinking,也就是上一轮那些 thinking,到了下一轮还在不在上下文里。
  • hybrid reward system,将三类奖励信号结合起来使用:
    • rule-based reward functions
    • outcome reward models(ORMs)
    • generative reward models(GRMs)
  • agentic训练数据:合成任务 + 合成环境 + 合成反馈 + 合成轨迹
  • On-Policy Distillation结合了【off policy,如sft】和【on policy,如grpo】两者的优点。它让学生模型先按照自己的当前策略生成轨迹,再由教师在这些学生真实会访问到的状态上(甚至可以提供答案级别的特权信息)提供逐 token 的监督信号。这样,OPD 一方面保留了 on-policy 训练更不易遗忘的特点,另一方面又利用蒸馏提供了高密度的知识传递。

一、三阶段训练

现代大模型不再追求“一个阶段解决所有问题”,而是采用分阶段建模、分阶段强化的策略。以 GLM-5 为例,其训练链路清晰划分为两大阶段:

1. Base Model Training(底座能力构建)

  • Pre-Training:使用 28.5 万亿 Tokens 的 Web、Code、Math & Science 语料,建立通用语言与知识表征,早期即侧重代码与推理能力
  • Mid-Training(关键增量):定向强化长上下文(扩展至 200K)软件工程理解。引入 Repo-level Code、Issue、PR、Commit Diff 等数据,让模型理解真实的开发上下文,而非孤立代码片段。
    在这里插入图片描述

2. Post-Training(能力对齐与执行)

  • SFT阶段:引入 Interleaved / Preserved Thinking 机制。模型在工具调用前会“打草稿”(Thought),并在多轮对话中保留推理过程,为 Agent 任务建立行为先验。

在这里插入图片描述

GLM-5 在 SFT 阶段还支持三种不同的 thinking 特性:
• Interleaved Thinking(交错式思考):模型会在每次回复和 tool call 之前进行思考,从而提升指令遵循能力和生成质量。本质就是形成一个Thought-Action-Observation的思维链循环,相当于给后续react流程打个草稿。
• Preserved Thinking(保留式思考):在 coding agent 场景下,模型会自动保留多轮对话中的 thinking blocks,复用已有推理过程,而不是每一轮都重新推导。这种方式可以减少信息丢失和前后不一致,更适合长流程、复杂任务
• Turn-level Thinking(轮次级别思考):模型支持在同一 session 中按轮次控制是否启用 reasoning。对于简单请求可以关闭 thinking,以降低延迟和成本;对于复杂任务则可以开启 thinking,以提升准确性和稳定性

  • 多阶段 RL(能力分层强化)

    • Reasoning RL:在数学、代码等可验证任务上,使用结果正确性(0/1 Reward)强化推理链。
    • Agentic RL:在 SWE、Terminal、Search 等可验证环境中,基于任务完成度(如测试通过率)进行 Group-wise 策略优化。
    • General RL:混合 Rule-based、ORM、GRM 奖励,优化通用对话的正确性与人类偏好。
  • On-Policy Cross-Stage Distillation(防遗忘机制):将 SFT、RL 等各阶段的优质模型作为 Teacher,让最终模型在自己生成的轨迹上蒸馏学习,“缝合”回因多阶段训练而可能遗忘的能力

Teacher 是谁,数据从哪来
前面各训练阶段的最终 checkpoint 都可以当 teacher,包括:
• earlier SFT stage
• Reasoning RL stage
• General RL stage
也就是:把之前各阶段最好的模型都当老师
训练时的prompt不是随便来的,而是:
• 从对应 teacher 的训练集里采样
• 再按合适比例混合

相关训练超参数:
遵循 GLM-4.5 的设置,包括 Muon 优化器、余弦衰减和批量大小预热。学习率从 0 到 2e-4 的预热阶段,衰减阶段到 4e-5,直到预训练阶段结束。在预训练阶段,学习率从 4e-5 线性下降到 1e-5。其他超参数与 GLM-4.5 相同。对于 DSA 预热阶段,学习率从 5e-3 下降到 2e-4。对于 DSA 稀疏适应阶段,我们使用 1e-5 的恒定学习率。

二、Agentic 数据合成:从“生成文本”到“构建环境”

Agent 能力的关键不在于模型规模,而在于数据质量。Agentic 数据合成的核心是合成任务 + 合成环境 + 合成反馈,而非单纯合成文本。

1. SWE(软件工程)数据:还原真实开发流

  • 来源:利用 GitHub 真实的 Issue-PR 对作为种子。
  • 关键:构建可执行的容器化环境(含测试脚本)。模型需要像真人一样:读 Issue → 定位代码 → 修改 → 运行测试 → 修复。
  • 价值:训练模型掌握“定位-修改-验证”的长链条能力,而非仅生成代码片段。

SWE数据举例如下,就是多轮交互function call过程&工具执行结果更偏真实环境结果

{
  "task_id": "swe_registration_empty_username_123",
  "task_type": "swe_fix",
  "source": {
    "issue_id": "#123",
    "pr_id": "#456",
    "seed_type": "issue_pr_pair"
  },
  "instruction": "修复注册接口问题:当 username 参数为空字符串时,应返回 HTTP 400 错误和提示信息,而不是 HTTP 500。",
  "context": {
    "issue_text": "Registration API returns 500 when username is empty string ... expected HTTP 400 with message 'Username cannot be empty'.",
    "repo_state": "pre_pr_456_snapshot",
    "environment": {
      "language": "python",
      "runtime": "containerized",
      "tools": [
        "file_viewer",
        "file_editor",
        "shell",
        "test_runner",
        "diff_viewer"
      ]
    }
  },
  "validation": {
    "f2p_tests": [
      "tests/test_registration.py::test_register_empty_username_returns_400"
    ],
    "p2p_tests": [
      "tests/test_registration.py::test_register_success",
      "tests/test_auth.py::test_login_success"
    ],
    "success_criteria": "All F2P and P2P tests pass"
  },
  "trajectory": [
    {
      "step": 1,
      "role": "assistant",
      "thought": "先定位注册接口和 username 的处理位置。"
    },
    {
      "step": 2,
      "role": "assistant",
      "action": {
        "tool": "shell",
        "input": "grep -R \"def .*register\\|register.*username\\|username\" -n app/ api/ tests/"
      }
    },
    {
      "step": 3,
      "role": "environment",
      "observation": "api/register.py:12:def register_user(request):\napi/register.py:16:username = request.json.get('username')\nservices/user_service.py:8:def create_user(username, password):"
    },
    {
      "step": 4,
      "role": "assistant",
      "thought": "查看注册入口实现,判断是否缺少输入校验。"
    },
    {
      "step": 5,
      "role": "assistant",
      "action": {
        "tool": "file_viewer",
        "input": "api/register.py"
      }
    },
    {
      "step": 6,
      "role": "environment",
      "observation": "def register_user(request):\n    username = request.json.get('username')\n    password = request.json.get('password')\n    user = create_user(username, password)\n    return JsonResponse({'id': user.id}, status=201)"
    },
    {
      "step": 7,
      "role": "assistant",
      "thought": "注册入口直接把 username 传给 create_user,空字符串会进入后续流程,符合 Issue 描述。应在入口层返回标准 400。"
    },
    {
      "step": 8,
      "role": "assistant",
      "action": {
        "tool": "file_viewer",
        "input": "services/user_service.py"
      }
    },
    {
      "step": 9,
      "role": "environment",
      "observation": "def create_user(username, password):\n    normalized = username.strip()\n    ...\n"
    },
    {
      "step": 10,
      "role": "assistant",
      "thought": "如果 username 是空字符串,strip 后可能触发异常或非法状态。最佳修复点仍是 API 入口。"
    },
    {
      "step": 11,
      "role": "assistant",
      "action": {
        "tool": "file_editor",
        "input": {
          "path": "api/register.py",
          "patch": "def register_user(request):\n    username = request.json.get('username')\n    password = request.json.get('password')\n\n    if username == \"\":\n        return JsonResponse({'error': 'Username cannot be empty'}, status=400)\n\n    user = create_user(username, password)\n    return JsonResponse({'id': user.id}, status=201)\n"
        }
      }
    },
    {
      "step": 12,
      "role": "assistant",
      "thought": "补充专门覆盖空用户名的测试,并执行目标测试与回归测试。"
    },
    {
      "step": 13,
      "role": "assistant",
      "action": {
        "tool": "file_editor",
        "input": {
          "path": "tests/test_registration.py",
          "patch": "def test_register_empty_username_returns_400(client):\n    resp = client.post('/register', json={'username': '', 'password': 'pass123'})\n    assert resp.status_code == 400\n    assert resp.json['error'] == 'Username cannot be empty'\n"
        }
      }
    },
    {
      "step": 14,
      "role": "assistant",
      "action": {
        "tool": "test_runner",
        "input": "pytest tests/test_registration.py::test_register_empty_username_returns_400 -q"
      }
    },
    {
      "step": 15,
      "role": "environment",
      "observation": "1 passed"
    },
    {
      "step": 16,
      "role": "assistant",
      "action": {
        "tool": "test_runner",
        "input": "pytest tests/test_registration.py::test_register_success tests/test_auth.py::test_login_success -q"
      }
    },
    {
      "step": 17,
      "role": "environment",
      "observation": "2 passed"
    }
  ],
  "result": {
    "status": "success",
    "modified_files": [
      "api/register.py",
      "tests/test_registration.py"
    ],
    "final_summary": "在注册入口增加空用户名校验,返回 HTTP 400 和明确错误信息;新增测试并确认正常注册、登录未回归。"
  },
  "reward": {
    "strategy": "test_based",
    "score": 1.0,
    "details": {
      "f2p_passed": true,
      "p2p_passed": true,
      "all_checks_passed": true
    }
  }
}

2. Terminal 数据:命令行交互能力

  • 构造:从技术网页或种子任务出发,自动生成 Docker 环境与验证脚本。
  • 难点:通过 Refine Agent 自动检查任务是否存在漏洞(如能否通过删代码绕过测试),确保任务必须通过真实操作完成。

3. Search 数据:多跳检索与推理

  • 流程:从早期 Agent 访问的真实网页构建知识图谱(WKG)→ 采样多跳关系链 → 生成“表面简单、背后复杂”的问题。
  • 过滤:剔除模型仅靠记忆或单次搜索就能回答的问题,强制要求跨网页证据聚合

三、奖励函数

1、hybrid reward system

rule-based rewards 的优点是明确、可解释,适合那些可以被规则准确描述的维度;但它的覆盖范围有限,很多复杂质量维度无法完全写成规则。
ORMs 是只看答案的奖励模型,特点是信号方差低、训练效率高,但更容易被 reward hacking 利用,也就是模型学会钻评分规则的空子,而不是真正提升能力。
GRMs 则通常由语言模型生成评分或结构化评价,相对更不容易被简单 exploit,不容易被钻漏洞,但问题是方差更高、稳定性更差。

2、reward hacking

reward hacking举例,比如在html生成(ppt)任务,都想生成1280×720的html效果
ex1:模型结果将超长内容隐藏起来
ex2:通过乱加间距/拉伸布局来骗分

在这里插入图片描述

四、核心挑战与应对策略

文章最后剖析了 Agent 训练中的三大难题:

  1. 训练-推理不一致:通过 On-Policy 蒸馏和更真实的环境交互来缓解。
  2. 异步 Off-Policy 问题:Kimi K2.5 采用多智能体并行执行,需精细设计调度与奖励机制。
  3. 奖励设计:避免 Reward Hacking,需混合规则奖励与模型奖励。

Reference

[1] GLM-5: from Vibe Coding to Agentic Engineering
[2] Agentic能力从哪里来?拆解基座大模型 GLM-5 /MiniMax M2/Kimi K2.5 的训练过程

更多推荐