Learning CLI Agents with Structured Action Credit under Selective Observation¶
会议: NeurIPS 2026
arXiv: 2605.08013
代码: https://github.com/Hoyant-Su/Agentic-RL-A3
领域: LLM Agent
关键词: CLI Agent, 强化学习, 动作信用分配, 抽象语法树, 选择性观测
一句话总结¶
针对命令行智能体在大型代码库中部分可观测与长轨迹稀疏奖励两大瓶颈,本文提出基于语法树距离的多粒度动作优势分配方法 \(\mathrm{A}^3\) 与推理期上下文修剪机制 \(\sigma\)-Reveal,在保持近乎标准 GRPO 极低开销的同时显著提升长程文件操作任务准确率。
研究背景与动机¶
命令行界面(CLI)智能体正在成为代码生成与通用计算机控制领域的主流范式。与调用预定义工具 API 的传统智能体不同,CLI 智能体直接将可执行 shell 命令作为原生动作空间,在复杂的文件系统与终端反馈闭环中执行目录探索、程序调试、代码重构与结果校验。然而,在真实代码库与文件系统环境中使用强化学习训练此类智能体面临两个紧密耦合的系统瓶颈:一方面,高维工作区状态对智能体仅呈局部部分可观测,初始提示词若盲目拼接整个文件树会导致超长上下文爆炸,而过于局部的视角又使智能体无法获取任务关键证据;另一方面,终端奖励在多轮执行结束时极其稀疏,执行结果往往由多步中间状态转移及文件修改交织决定,如何将最终成败精确归因到关键动作上极具挑战。
现有的模仿学习(SFT)依赖预先标注的轨迹,模型极易产生对特定接口样式的机械记忆而非理解任务语义;基于强化学习的探索虽展现潜力,但主流批归一化方法(如 GRPO)在序列级别分配信用,无法区分轨迹内部到底是哪一步操作扭转了局势。近年来出现的层次化状态分组方法(如 GiGPO、HGPO)假设存在可聚类的重复观测状态,但在几乎每次命令输出和文件上下文都独一无二的大规模 CLI 交互中,这种状态重复假设被彻底打破;而依赖 LLM Judge 作为判别器的方法又带来了数十倍的训练时间开销。
本文的切入角度在于:CLI 智能体的动作本质上不是自由文本,而是具有严格语法结构的 shell 程序;同时工作区文件系统的树状分层也为先验过滤提供了显式结构。核心 idea:利用 Bash 抽象语法树(AST)的结构化距离在情节、轮次与历史树三个粒度构建免 Critic 动作优势分配算法 \(\mathrm{A}^3\),并配合基于任务类型与深度的推理期上下文修剪机制 \(\sigma\)-Reveal,在近乎零额外计算开销下实现精准的动作信用归因与高效证据检索。
方法详解¶
整体框架¶
智能体与环境交互的完整流程包含预先上下文选取、安全沙箱交互与策略优化三个阶段。首先,\(\sigma\)-Reveal 在推理期根据用户指令和初始文件系统,在给定 token 预算下选择相关度最高的闭包子树构造初始观测;随后智能体在受限正则协议下生成规划与可执行 shell 命令,并在内核级安全沙箱(Landlock + Network Namespace)中执行;最后,收集到的多轮交互轨迹通过 AST 语法解析计算结构签名距离,在情节级、轮次动作残差级和抽象历史树级分别计算三路优势,归一化融合后通过裁剪的 PPO 目标更新策略网络。
%%{init: {'flowchart': {'rankSpacing': 24, 'nodeSpacing': 28, 'padding': 6, 'wrappingWidth': 400}}}%%
flowchart TD
A["任务指令与初始文件系统 FS₀"] --> B["σ-Reveal 上下文修剪<br/>基于引用/深度/扩展名分数在预算内选子树 T*"]
B --> C["策略模型输出结构化动作<br/>正则约束解码分离 Plan 与 Bash Payload"]
C --> D["内核沙箱执行<br/>Landlock 文件写入隔离 + 网络 Namespace 隔离"]
D --> E["终止状态评估<br/>获取情节回报 Rn 与可验证结果"]
E --> F["A³ 动作优势分配<br/>AST 结构化多粒度归因"]
F --> G["策略梯度更新<br/>仅对可执行 Payload 计算重要性权重更新网络"]
关键设计¶
1. σ-Reveal 上下文修剪:在 token 预算内选择高相关工作区子树 针对全量文件树上下文过长而盲目截断又丢失关键文件的问题,\(\sigma\)-Reveal 在首轮执行前为初始文件树 \(\mathrm{FS}_0\) 中的每个节点 \(x\) 计算相关度评分 \(\hat{\mu}(x \mid o_0)\),并在总渲染开销不超过预算 \(B\) 的前提下求解最优子树闭包集合 \(T^{\star}=\arg\max_{T \in \mathcal{C}_B(\mathrm{FS}_0)} \sum_{x \in T} \hat{\mu}(x \mid o_0)\)。相关度函数综合了显式线索与层级先验: $\(\hat{\mu}(x \mid o_0) = \lambda_{\mathrm{cite}}\,\mathbf{1}[\mathrm{name}(x) \in \mathrm{tokens}(o_0)] + \lambda_{\mathrm{depth}}\,\beta^{\,\mathrm{depth}(x)} + \lambda_{\mathrm{ext}}\,\zeta(\mathrm{ext}(x) \mid \mathrm{type}(o_0))\)$ 其中第一项奖励与任务指令词匹配的文件名,第二项通过几何衰减 \(\beta^{\mathrm{depth}(x)}\) 优先保留浅层骨架目录结构,第三项依据判别的任务类型(如代码编辑、日志分析、表格检索)对特定文件后缀加权。这种方式保证了注入模型的上下文始终保持目录路径连续且关键线索密集。
2. AST 动作相似度度量:剥离字面量干扰的命令结构化表示
针对字符串级别对比无法捕捉命令语义意图、且易受路径或参数字面值轻微变化干扰的问题,本文引入 Tree-sitter 语法树解析器将 shell 动作 \(a\) 映射为抽象语法树 \(\mathrm{AST}(a)\)。通过确定的前序遍历序列化映射 \(\mathrm{Lin}\),将控制流关键词(如 if, while, pipe)、标准动词原语(如 grep, sed, awk)以及归一化后的字面量拼接为紧凑符号序列 \(\sigma(a) = \mathrm{Lin}(\mathrm{AST}(a)) \in \mathcal{A}^*\)。两个 shell 动作 \(a_i, a_j\) 之间的距离定义为归一化的 Levenshtein 距离:
$\(d(a_i, a_j) = \frac{\mathrm{Lev}(\sigma(a_i), \sigma(a_j))}{\max(|\sigma(a_i)|, |\sigma(a_j)|)} \in [0, 1]\)$
该度量不仅计算极其高效(批处理毫秒级),而且能准确识别结构相同的等效操作,为后续动作聚类奠定了客观基础。
3. 三通道动作优势分配(A³):解耦融合情节、轮次与历史树信用 为了解决稀疏回报在长轮次展开下的归因模糊,\(\mathrm{A}^3\) 在三个不同时空视界构建优势并联合归一化: - 情节级主干优势(Episode Backbone):计算相同任务提示词下轨迹回报与同批中位数之差,并采用绝对中位差(MAD)进行鲁棒标准化: $\(A_{u,n,k}^{\mathrm{ep}} = \frac{R_n - \mathrm{median}(\mathcal{R}_u)}{\mathrm{MAD}(\mathcal{R}_u) + \epsilon}\)$ - 轮次级动作子链残差(Turn-Level Residual):在不同滑动窗口长度 \(\ell \in \{\ell_1, \dots, \ell_G\}\) 下提取截至当前轮的动作子链,通过 AST 距离进行单链接聚类,计算同类子链的留一法均值残差: $\(A_i^{\mathrm{intent}} = \sum_{\ell=1}^G \hat{w}_\ell \left(R_n - \bar{R}_{u,k,\ell}^{\mathrm{LOO}}(n)\right)\)$ 该项衡量在执行了相似结构命令的前提下,当前轨迹比同类动作高出多少,精准归因局部命令的优劣。 - 抽象历史树优势(Tree Advantage):根据历史聚类标签的汉明距离构建抽象状态 \(S\) 与抽象动作 \(\mathcal{K}\),计算分支期望增益 \(\delta_i = V(\mathcal{K}(i)) - V(S(i))\),并以折扣因子 \(\gamma\) 反向传播累积 \(A_i^{\mathrm{tree}} = \delta_i + \gamma A_{i^+}^{\mathrm{tree}}\),同时由样本计数门控 \(g_i = n_i / (n_i + \alpha)\) 抑制小样本噪声。 最后,各通道除以批次绝对均值对齐量纲,并通过有界双曲正切激活截断离群值:\(A_i = \phi(\widetilde{A}_i^{\mathrm{ep}} + w_{\mathrm{intent}}\widetilde{A}_i^{\mathrm{intent}} + w_{\mathrm{tree}}\widetilde{g_i A_i^{\mathrm{tree}}})\)。
4. 结构化动作协议与轻量内核沙箱:聚焦有效载荷的可靠训练基座 为了消除语言模型生成无效格式对奖励分配的稀释,框架制定了严格的正则语法规范,将输出分为自然语言规划区(Plan)与命令载荷区(Code/Answer)。策略梯度更新时,损失掩码 \(m_{i,l}\) 仅在可执行载荷 token 上置为 1,完全剔除格式包装与自然语言推导 token,确保信用只流向引起环境状态迁移的实质代码。在执行层面,利用 Linux 用户命名空间剥离网络访问权限,配合 Landlock LSM 将文件系统写操作严格限定在任务专用工作区内,无需臃肿的 Docker 容器即可提供轻量安全的毫秒级执行环境。
损失函数 / 训练策略¶
策略网络使用序列级重要性采样权重的裁剪 PPO 目标进行优化。对于第 \(i\) 个轮次实例,有效载荷 token 集合长度为 \(L_i = \sum_l m_{i,l}\),重要性权重为: $\(\rho_i = \exp\left(\frac{1}{L_i} \sum_{l=1}^{L_i} (\log \pi_\theta(a_{i,l} \mid h_{i,l}) - \log \pi_{\theta_{\mathrm{old}}}(a_{i,l} \mid h_{i,l}))\right)\)$ 整体损失函数结合了 PPO 裁剪上下界 \(\epsilon_{\mathrm{lo}}, \epsilon_{\mathrm{hi}}\): $\(\mathcal{L} = -\frac{1}{N} \sum_{i=1}^N \min\left(\rho_i A_i,\; \mathrm{clip}(\rho_i, 1-\epsilon_{\mathrm{lo}}, 1+\epsilon_{\mathrm{hi}}) A_i\right)\)$ 训练在 4 张 NVIDIA H200 上进行,基座模型采用 Qwen3-14B,通过 SGLang 加速推理展开与受限解码。设置滑动窗口 KL 监测器,在局部 KL 超出初始范围两倍时触发早停,防止出现训练发散与数值溢出。
实验关键数据¶
主实验¶
主实验在六个基准流构成的跨领域集合上进行评估,涵盖操作系统交互(AB-OS)、数据库操作(AB-DB)、表格问答(DataBench、TableBench)、临床一致性核对(EHRCon)以及本文构建的真实代码库交互评测集 ShellOps。任务类型涵盖纯文本字符串提取(String)、就地文件编辑(Files)以及混合输出(Hybrid)。
| 数据集 | 任务类型 | 指标 | Qwen3-14B ReACT | GSPO | GiGPO | A³ (Vanilla) | A³ (σ-Reveal) | 相对最佳基线提升 |
|---|---|---|---|---|---|---|---|---|
| AB-OS | String | EM (%) | 57.9 | 61.4 | 54.5 | 58.6 | 60.7 | -0.7 |
| AB-DB | String | EM (%) | 15.1 | 12.6 | 9.5 | 23.6 | 26.2 | +11.1 |
| DataBench | String | EM (%) | 63.7 | 70.1 | 56.8 | 74.1 | 77.9 | +7.8 |
| EHRCon | String | EM (%) | 61.5 | 45.6 | 59.3 | 66.7 | 67.4 | +5.9 |
| TableBench | String | EM (%) | 18.7 | 24.8 | 23.5 | 30.7 | 31.6 | +6.8 |
| AB-DB | Files | EM (%) | 37.8 | 43.5 | 37.8 | 46.6 | 46.4 | +2.9 |
| ShellOps | String | EM (%) | 26.0 | 25.5 | 24.0 | 46.5 | 48.5 | +22.5 |
| ShellOps | Files | EM (%) | 7.1 | 10.9 | 11.3 | 26.5 | 25.7 | +14.4 |
| ShellOps | Hybrid | EM (%) | 7.2 | 11.3 | 10.1 | 21.9 | 24.6 | +13.3 |
消融实验¶
在混合基准测试集上对 \(\mathrm{A}^3\) 的三路优势通道及动作子链窗口大小 \(\ell_{\max}\) 进行系统消融,采用 Qwen3-14B 评估精确匹配(EM)与二级辅助指标(文本 LLM Judge、文件 Diff Recall、混合 Combined):
| 配置 | 说明 | EM: String | EM: Files | EM: Hybrid | Sec: String | Sec: Files | Sec: Hybrid |
|---|---|---|---|---|---|---|---|
| Full \(\mathrm{A}^3\) (\(\ell_{\max}=3\)) | 完整模型配置 | 44.5 | 38.1 | 21.9 | 46.1 | 50.8 | 47.2 |
| w/o \(A^{\mathrm{intent}}\) | 去除轮次级动作子链残差 | 38.2 | 32.9 | 17.2 | 39.0 | 44.9 | 36.1 |
| w/o \(A^{\mathrm{tree}}\) | 去除抽象历史树优势 | 42.5 | 30.6 | 22.0 | 43.4 | 38.7 | 38.3 |
| w/o \(A^{\mathrm{intent}}, A^{\mathrm{tree}}\) | 仅保留情节级主干优势(退化为批归一化) | 39.0 | 30.7 | 10.9 | 40.4 | 45.6 | 36.4 |
| \(\ell_{\max}=1\) | 仅比较单步动作语法树 | 34.7 | 27.4 | 18.0 | 35.4 | 35.9 | 34.4 |
| \(\ell_{\max}=2\) | 考虑两步动作子链 | 29.8 | 28.3 | 13.0 | 30.5 | 39.5 | 34.9 |
| \(\ell_{\max}=4\) | 动作子链拓展至 4 步 | 41.1 | 33.4 | 16.6 | 41.9 | 47.8 | 35.9 |
| \(\ell_{\max}=5\) | 动作子链拓展至 5 步 | 36.2 | 33.2 | 23.2 | 37.1 | 39.9 | 34.4 |
关键发现¶
- 复杂混合任务质的飞跃:在最为严苛、同时要求终端输出与文件就地修改正确的 ShellOps Hybrid 任务中,完整 \(\mathrm{A}^3\) (\(\sigma\)-Reveal) 的 EM 达到 24.6%,较最强强化学习基线 GSPO (11.3%) 和 GiGPO (10.1%) 实现翻倍提升,证明了结构化归因对多阶段目标任务的决定性作用。
- 通道协同贡献机制:消融数据显示,若去除轮次级残差 \(A^{\mathrm{intent}}\),Hybrid EM 下跌 4.7%;若同时去除轮次和树级优势(仅留情节主干),Hybrid EM 暴跌至 10.9%(腰斩)。通道权重分析表明,情节主干、动作子链残差与树优势在融合前分别占据 47.7%、30.8% 与 21.5% 的信号份额,三者相辅相成。
- 极致的训练与推理效率:由于基于 Tree-sitter 的 AST 计算极其轻量,\(\mathrm{A}^3\) 的优势计算耗时仅为每批 0.023 秒,与 GSPO 的 0.027 秒完全在一个量级,而依赖 LLM Judge 的 GiGPO 与 HGPO 优势计算耗时分别高达 31.8 秒和 139.6 秒;在推理阶段,\(\sigma\)-Reveal 仅微增约 120 个输入 token,完全避免了冗长搜索带来的上下文过载。
亮点与洞察¶
- 将 Bash 命令的编译器先验引入强化学习归因:不同于把模型输出视为黑盒自由文本的常规思路,利用 Tree-sitter 将 shell 命令提炼为去除参数干扰的控制流/原语骨架,以极其廉价的编辑距离实现有物理语义的动作聚类与残差归因。
- 纯内核级轻量隔离沙箱工程实现:摒弃沉重的容器依赖,基于 Linux 原生 Landlock LSM 与 Network Namespace 实现了毫秒级冷启动、网络静默和写权限受限的文件系统沙箱,配合正则受限解码,构建了高吞吐、零幻觉格式的闭环系统。
- 对通用计算机操作(OS/GUI Agent)的启发:针对多轮复杂交互环境,无需为中间过程额外训练庞大的价值模型或调用昂贵的大模型裁决,利用底层系统操作自带的结构化语法(如 API 调用图、GUI 操作树)进行意图分桶,是实现低延迟、高可扩展信用分配的通用路径。
局限与展望¶
- 语法相似不等于执行语义等价:当前 AST 签名虽然滤除了字面量的琐碎差异,但若两个命令仅在关键参数标志位(如
rm -f与rm -r)或目标路径上存在差异,AST 距离可能判定为极度相似,从而在残差计算时产生语义错配。 - 弱结构化工作区的上下文截断风险:\(\sigma\)-Reveal 依赖文件名、目录深度与后缀作为启发式线索,在扁平化目录、文件名完全无意义或关键信息深埋在大文件正文深处的数据集中,该先验机制可能误删关键证据。
- 适用场景待扩展:当前实验集中于 Linux shell 与文件系统环境,未来需进一步推广至网络交互、Web 浏览器操作或 GUI 多模态交互等更广泛的通用智能体场景。
相关工作与启发¶
- vs GRPO / GSPO: GRPO 及其序列级扩展 GSPO 仅在整条轨迹级别按批次均值和方差进行归一化,分配给整条轨迹内所有动作完全相同的优势值,无法识别哪一步操作导致失败;\(\mathrm{A}^3\) 在保留其免 Critic 优势的同时,通过 AST 动作聚类实现了轮次级局部残差归因。
- vs GiGPO / HGPO: 这类方法尝试在多轮状态上建立聚类以进行分层信用归因,但强烈依赖跨轨迹的“重复观测状态”,在文件系统不断变化、终端输出千变万化的 CLI 场景下难以聚类;且若引入 LLM Judge 判定状态相似性会带来数百倍的算力开销。\(\mathrm{A}^3\) 改为在动作空间构建 AST 抽象,不仅完全绕开唯一状态瓶颈,且保持了极高算力效率。
评分¶
- 新颖性: ⭐⭐⭐⭐ [创新地将 Bash AST 语法先验引入免 Critic 强化学习的多粒度动作信用分配]
- 实验充分度: ⭐⭐⭐⭐⭐ [涵盖六大基准、三类任务形态,包含完整的消融对比、跨参数量模型评测以及细致的时延开销分析]
- 写作质量: ⭐⭐⭐⭐⭐ [数学推导严谨,系统瓶颈剖析深刻,实验呈现层次分明且附录详尽]
- 价值: ⭐⭐⭐⭐⭐ [为代码与命令行智能体的大规模强化学习训练提供了切实可行、极具工程落地价值的高效解决方案]