在传统问答和静态代码生成中,模型通常接收一段相对完整的输入,并在一次生成中给出结果。长时程 Agent 面对的则是持续变化的任务环境:它需要阅读大型代码库,调用工具,分析执行结果,修改多个文件,在失败后调整方案,并在数小时甚至更长时间内维持对目标和当前状态的理解。
这类任务涉及的问题并不只有上下文窗口长度。即使模型能够接收一百万个 token,系统仍需处理不断增长的历史,从大量工具输出中筛选后续行动所需的信息,训练长度悬殊的交互轨迹,限制 Agent 利用评测漏洞获取奖励,并控制长期推理带来的计算开销。
本文以 GLM 5.2 与 Kimi K3 的公开材料为基础,按长上下文、长轨迹训练、环境验证、推理计算和基础设施等主题梳理其中描述的技术设计。GLM 5.2 是约 753B 总参数、约 40B 激活参数的文本 MoE;Kimi K3 是 2.8T 总参数、104.2B 激活参数的原生多模态 MoE。GLM 5.2 官方发布文;Kimi K3 技术报告
本文只整理公开资料中描述的机制,不比较两个模型的能力、性能或适用场景,也不据此对模型作优劣判断。
一、百万上下文的两个问题:如何有效利用并降低计算成本
将上下文窗口扩展到一百万个 token,会产生两个需要分别处理的问题。第一个问题是如何让远处的信息真正影响后续行动,第二个问题是如何控制读取和处理整段上下文的计算成本。前者涉及训练目标和状态管理,后者涉及注意力结构与索引计算。
如何有效利用百万上下文
窗口长度只决定信息能否进入模型,并不保证模型会主动使用远处内容。如果训练样本虽然很长,但任务答案始终可以从局部获得,模型仍可能形成局部注意模式,而没有建立长距离依赖。
让训练任务依赖远距离信息
K3 采用渐进式上下文训练。模型在预训练阶段从 8K 扩展到 64K,在后期 cooldown 阶段进一步从 256K 扩展到 1M。超长序列训练被集中在后期阶段,使训练长度逐步增加。
除了天然长文档和长视频,K3 的训练流程还会组合多模态文档和子任务,使完成任务所需的信息分散在上下文的不同位置。这样,训练目标本身就要求模型使用远距离内容,而不只是接收更长的输入。
在窗口耗尽前压缩任务状态
有效利用上下文并不等于永久保留全部历史。长时程任务中的源代码、终端输出、错误日志、工具调用和中间尝试会不断累积,其中一部分在当前阶段结束后已经不再影响后续行动,但文件修改状态、失败原因和关键参数仍需保留。
用于 GLM 5.2 训练流程的 CompactionRL 将摘要生成纳入强化学习。模型在上下文接近上限时生成压缩状态,并基于该状态继续执行任务;最终任务奖励同时用于优化摘要内容。CompactionRL 论文
这一过程保留任务状态和阶段性结论,删减后续行动不再需要的过程信息。压缩后的状态继续进入上下文,用于衔接下一阶段的任务。
如何降低百万上下文的计算成本
即使模型能够识别需要使用的信息,长上下文仍会带来独立的计算问题。标准全局注意力需要处理大量 token 之间的交互。下面分别讨论稀疏注意力与混合线性注意力两种实现方式。
稀疏注意力
GLM 5.2 延续 DeepSeek Sparse Attention,即 DSA。它先由轻量 indexer 找到最相关的一组 token,再只在这些位置上计算稀疏注意力,使注意力主体不必覆盖全部历史。
DSA 的 indexer 仍需扫描长上下文以寻找 top-k 位置,并且通常在每一层重复执行。GLM 5.2 的 IndexShare 让相邻层共享检索结果:每四层运行一次完整 indexer,其他三层复用所得索引,并从中期训练阶段开始让模型适应这一结构。官方报告称,在一百万 token 上下文下,该方法可将单 token 计算 FLOPs 降低约 2.9 倍。IndexCache 论文
IndexShare 因而处理的是稀疏注意力之外的重复索引计算。注意力仍然只读取选定位置,indexer 则不再在每一层重新扫描整段历史。
混合线性注意力
Kimi K3 的主干网络按照大约三比一的比例交替使用 Kimi Delta Attention 和 Gated Multi-head Latent Attention,而不是在所有层中使用同一种全局注意力。
Kimi Delta Attention 通过递归状态传递历史信息,使计算复杂度随序列长度近似线性增长;周期性出现的 Gated MLA 则执行全局交互。两者分别承担递归状态传递和全局注意力计算,从而将全局注意力限制在部分网络层中。
二、超长轨迹的训练问题:如何管理尚未完成的任务
长时程任务不仅扩大了推理上下文,也改变了强化学习数据的结构。
传统语言模型强化学习通常假设,同一道题可以生成若干条长度大致相近的回答,系统等待整组回答完成后再计算奖励并更新模型。Agent 任务的轨迹长度并不固定:有些任务可能在数轮工具调用后完成,有些任务则需要长时间调试,不同环境的启动和执行时间也各不相同。如果训练系统必须等待整组轨迹全部结束,较短轨迹完成后的计算资源将处于空闲状态。
从成组同步转向单轨迹异步训练
GLM 5.2 使用的 Single-Rollout Asynchronous Optimization,即 SAO,将每个 prompt 的单条轨迹作为独立训练单位。轨迹完成后即可送入训练,不必等待其他同组样本。
在这种组织方式中,不同长度的任务无需同时结束。训练系统可以接收已经完成的单条轨迹,仍在运行的任务则继续生成后续交互。
异步训练同时会产生新的稳定性问题。一条长轨迹生成期间,训练模型可能已经更新多次,导致生成轨迹的策略与当前策略之间出现偏差。SAO 为此使用 token 级重要性校正、更加严格的裁剪机制和独立价值模型,在保留异步效率的同时控制策略陈旧带来的影响。对于多轮工具交互,它还将模型生成的动作与环境返回的 observation 区分开来,避免把并非由模型生成的工具输出作为策略 token 进行优化。SAO 论文
SAO 因而同时涉及轨迹调度和策略校正:前者处理任务完成时间不同的问题,后者处理异步生成期间策略版本发生变化的问题。
让一条任务跨越多个训练迭代
K3 使用 partial rollout 组织长轨迹。每轮训练开始时,系统维护一批正在执行的轨迹;当其中一定比例完成后,生成阶段即可暂停并进入模型更新。尚未完成的轨迹不会被丢弃,而是在后续迭代中恢复。
这意味着,一次 Agent 任务可以跨越多轮模型训练继续运行。但要实现这种流程,系统需要保存的不只是文本历史。它还必须保存模型侧的 KV cache,以及环境侧的文件、进程、依赖、工具状态和执行结果。否则,轨迹恢复后就无法准确延续此前工作。
K3 为长上下文 RL 建立了外部 KV-cache 池,将暂时不活跃但后续仍可能复用的缓存从 GPU 转移到 CPU 内存;同时使用可以暂停、恢复、复制和增量保存的 microVM sandbox 保存环境状态。技术报告将这一缓存与环境管理方案用于百万上下文 RL 实验。Kimi K3 技术报告
在 partial rollout 的设置下,一条训练样本由模型轨迹、缓存状态、工具状态和环境状态共同组成。训练系统需要在多次迭代之间保存并恢复这些状态。
三、开放环境中的奖励问题:如何确认模型真正完成了任务
在数学题或封闭问答中,正确答案通常可以直接作为训练信号。Agent 进入代码仓库、终端和网络环境后,结果验证变得更加复杂。
模型可能通过正确的方法完成任务,也可能读取隐藏测试、复制参考实现、下载目标代码或利用评测程序漏洞获得相同分数。在 GPU kernel 优化等任务中,模型还可能通过缓存输入、降低精度或绕过实际计算来获得表面上的性能提升。
如果训练系统无法区分任务完成与评测投机,奖励信号就可能覆盖两类不同的行为。因此,长时程 Agent 的训练流程还需要定义验证器、环境边界和允许执行的操作。
以环境状态作为验证依据
K3 的后训练任务广泛采用可验证环境。软件工程任务检查代码是否能够构建并通过测试;GPU kernel 任务同时检查数值正确性和执行性能;网页开发任务验证功能、结构和视觉结果;自主执行任务则根据最终环境状态判断目标是否实现。
在这类任务中,奖励依据是代码、文件、程序状态或其他可执行结果,而不是模型对完成情况的自述。
K3 还将公开 verifier 与隐藏 verifier 结合。公开验证器可以在任务过程中提供诊断反馈,使模型根据结果修正方案;隐藏验证器用于检查未暴露场景,防止模型仅针对已知测试优化。这种设置尤其适用于需要多次提交和持续修正的任务。
K3 还使用可组合的训练环境,将工具接口、系统提示、记忆、上下文管理、技能和 sub-agent 等模块组合为不同 harness,使训练轨迹覆盖不同的工具协议和交互格式。
对 reward hacking 进行在线处理
GLM 5.2 的训练流程包含对工具调用作弊行为的在线处理。系统首先通过规则发现可疑操作,再由模型判断相关行为是否具有读取隐藏测试、获取参考答案或绕过任务约束的意图。
检测到异常后,系统可以阻断具体工具调用并返回替代结果,使 Agent 继续执行当前轨迹。这样,被阻断的行为不会进入正向训练信号,已经生成的其他轨迹内容也可以继续使用。
训练环境需要同时定义可执行操作和隔离边界。K3 使用 microVM 保存文件、进程和依赖状态,并将这些操作限制在独立环境内。
sandbox、verifier 和反作弊机制分别规定执行边界、结果检查方式和异常操作处理方式,并共同参与奖励数据的生成。
四、推理计算的成本问题:如何控制预算与执行开销
长时程任务通常伴随更长思考、更多工具调用、更大上下文和更多次尝试。如果计算增长缺乏约束,轨迹中可能出现冗长推理、重复调用工具和反复探索等行为。
因此,长时程 Agent 需要学习的不只是如何完成任务,也包括应当为任务投入多少计算。
将思考预算纳入训练
K3 将后训练划分为通用任务、通用 Agent 和 Coding Agent 三个领域,并分别训练 low、high、max 三种 reasoning effort,共形成九个专家策略。
这些 effort 并非简单地在推理时截断输出。训练过程中,每个任务都具有相应的 token budget;超出预算的轨迹会受到惩罚。训练先使用较宽松的预算,随后逐步收紧预算。最终,九个领域与 effort 专家通过 Multi-Teacher On-Policy Distillation 合并为统一模型。
这一过程试图解决两个问题。其一,不同任务需要不同的训练环境和计算规模;其二,实际部署又需要统一模型,而不是为每种领域和预算分别维护完整权重。多教师在线蒸馏用于保留各专家能力,同时让最终模型根据请求选择适当的推理强度。
K3 还对非确定性任务中的输出长度进行约束,以避免奖励模型把文本长度本身作为奖励来源。
投机解码与量化训练
GLM 5.2 使用 MTP 层进行投机解码。草稿模块一次预测若干后续 token,再由主模型并行验证;被接受的草稿 token 无需由主模型逐个解码。
GLM 5.2 的 MTP 训练包含索引与 KV 复用、rejection sampling 和端到端分布损失,用于约束草稿预测与主模型分布之间的差异。投机解码会影响长轨迹中主模型执行解码与验证的次数。
K3 从 SFT 阶段开始对占据大部分参数的 MoE 专家执行量化感知训练,使用 MXFP4 权重和 MXFP8 激活;强化学习的 rollout 和训练使用相同的量化设置。其 MTP 层也会进一步训练为投机解码草稿模型。
在上述流程中,量化格式、草稿模型和 token budget 都在训练阶段确定,而不是只在部署阶段作为外部配置加入。
五、长时程 Agent 的系统层次
为了组织上述技术内容,可以将长时程 Agent 拆分为四个系统层次。
第一是模型层,包含超长序列计算和远距离信息传递。IndexShare 和混合 KDA—MLA 都属于这一层次。
第二是记忆与策略层。模型需要判断哪些历史需要检索,哪些信息需要压缩,以及应当为不同任务投入多少推理计算。CompactionRL 和 reasoning effort 分别对应上下文压缩与计算预算。
第三是环境与奖励层,包含可执行环境、独立 verifier、隐藏测试、反 reward hacking、不同 harness 和 microVM sandbox。它们共同定义任务反馈、验证规则和可执行操作的范围。
第四是训练与运行系统层。超长轨迹涉及异步生成、暂停与恢复;模型侧缓存和环境侧状态需要协同保存;量化、投机解码、专家并行和集群调度则分别作用于训练或推理流程。
这四个层次之间存在依赖关系:上下文长度影响缓存规模,环境中的可执行操作影响验证和隔离方式,rollout 长度影响调度与状态恢复,模型规模则影响训练和推理所需的资源。
结语
本文并不追求详细、全面地介绍两个模型的技术细节,而是围绕长时程 Agent,选取与上下文管理、轨迹训练、环境验证和推理计算直接相关的设计。
长时程 Agent 将模型的使用方式从单轮生成扩展为持续交互过程。随着轨迹变长,问题会同时出现在模型、训练、环境和运行系统多个层次:上下文需要检索和压缩,未完成的轨迹需要暂停与恢复,工具操作需要独立验证,推理计算则需要纳入预算和基础设施管理。
这些环节并非彼此孤立。上下文长度会影响缓存与调度,环境状态会影响轨迹恢复,验证规则会塑造奖励信号,量化与投机解码也与训练配置和部署方式相连。长时程 Agent 因而更接近一套协同运行的系统,而不只是增加上下文窗口或延长推理时间。
沿着这条主线,GLM 5.2 与 Kimi K3 的公开材料可以被放入同一张技术图谱:从信息如何保存、任务如何继续,到结果如何验证、计算如何执行。理解这些机制之间的连接关系,正是本文梳理的目的。